1. 程式人生 > >複雜選擇器 內容生成 多列 CSSHack(瀏覽器相容)

複雜選擇器 內容生成 多列 CSSHack(瀏覽器相容)

1、兄弟選擇器
   匹配指定元素的相鄰兄弟元素
   1、相鄰兄弟選擇器
      匹配相鄰的元素
      匹配當前元素【後面】的【一個】元素,前提兩者必須擁有相同父元素
      語法:
           selctor1+selector2
           通過 + 作為結合符
  eg:
     div+p{}
      注意:只找與當前元素相關的後面一個緊挨著他的兄弟元素,如果符合則匹配,不符合也不會向下查詢。
   2、通用兄弟選擇器
      匹配當前元素【後面】的【所有】【兄弟】元素
      語法:
           selector1~selector2
  div.first span~b.bold_700{

  }
           使用 ~ 作為結合符  div ~ p
  注意:第二個元素不必緊緊跟隨第一個元素的後面
   練習1:
       1、通過指定元素 修改其相鄰兄弟為紅色字型
          div.s1+p{
   color:red;
 }
       2、通過指定元素 修改其通用兄弟為#ccc背景
          div.s1~p{
background:#ccc;
 }
       <p>
       <div>指定元素
       <p>
       <p>
2、屬性選擇器
   能夠將元素附帶的屬性用於選擇器中,對帶有指定屬性的元素設定樣式
   語法:
        1、[屬性名]
  選擇 帶有 指定屬性 的元素
  [title] : 匹配包含title屬性的所有元素
2、元素[屬性名]
  p[id] : 匹配所有包含id屬性的p元素
  div[title] : 匹配所有包含title屬性的div元素
3、元素[屬性1][屬性2]....
  匹配即具備屬性1又具備屬性2的元素
  div[id][class]
4、元素[屬性=值]
  input[type=text]:匹配所有type屬性值為text的input元素
  input[type="text"]
  input[type='text']


  input[class=border]
  input[id="txtName"]
5、元素[屬性~=值] 
  <div class="content"></div>
  <div class="content important"></div>
  div[class~=important]
  指定屬性中,包含【獨立】【值】單詞的元素
6、元素[屬性^=值]
  屬性值以【值】開始的元素
  div[class^=c] : class屬性以c開頭的div元素
  div[class^=my]: class屬性以my開頭的div元素
7、元素[屬性*=值]:
  屬性值中包含【值】的元素
8、元素[屬性$=值]:
  屬性值以【值】結尾的元素
3、偽類選擇器
   1、目標(target)偽類
      用於匹配 當前活動的 錨點元素
      語法::target
   2、元素狀態偽類
      場合:表單元素居多
      :enabled  匹配每個已啟用的元素
      :disabled 匹配每個被禁用的元素
      :checked 匹配每個已被選中的input元素(單選按鈕、複選框)
   3、結構偽類
      1、:first-child ,匹配屬於其父元素中的首個子元素(子元素:first-child)
      2、:last-child , 匹配屬於其父元素中的最後一個子元素
          table tr:first-child{}
 table tr:last-child{}
      3、:empty , 匹配沒有子元素(包含文字)的元素
          
          <p></p>:可以匹配出來


          以下兩種情況匹配不出來:
 <p>
   <a>百度</a>
 </p>
 <p>百度</p>
      4、:only-child ,匹配是其父元素中的唯一子元素
          
 <p>
   <a>百度</a>
 </p>
 a:only-child{}可以匹配




 <p>
   <a>百度</a>
   <a>谷歌</a>
 </p>
 a:only-child{}無法匹配
    4、否定偽類
       匹配非指定選擇器的每個元素(即不是指定選擇器的其他元素)
       語法:   :not(selector)
       input:not([type=text])
       tr:not(:first-child):not(:last-child)
4、偽元素選擇器
   特點:獲取指定元素中某一部分文字而用的。
   1、:first-letter
       用於選取指定選擇器(元素)的首字母
   2、:first-line
       用於選取指定選擇器(元素)的首行文字
   3、::selection
       匹配被使用者選取的部分
5、內容生成
   通過 css  向已有的元素上增加新的文字(圖片)內容
   選擇器:
      1、:before
         向匹配元素之前增加生成的內容
定位到匹配元素開始的位置
      2、:after
         向匹配元素之後增加生成的內容


eg:
   div:before{}
   p:after{}
   屬性:
      1、content
         作用:配合 :before , :after偽元素插入生成的內容div:before{
content:"生成的內容:";
}
常用取值:
  字串:普通文字
  url:影象
  計數器:
6、計數器
   通過css 定義一個計數器,在其他元素中可以使用該計數器生成的數字。
   屬性:
      1、counter-reset
         作用:用於定義計數器並設定初始值
      如果不設定初始值,那麼預設為0,如果設定的話可以為正、負、0
選擇器{
counter-reset:counter1 10;
}
選擇器{
counter-reset:counter1 10 counter2 20;
}
注意:如果整個頁面的任何一個元素都想使用到計數器的話,最好將其定義在body中。切記將計數器定義在某個元素中(除body外),如果這樣定義,再使用時永遠都是初始值。
body{
counter-reset:c1 10 c2 20;
}
      2、counter-increment
         作用:設定每次使用計數器時的增量,預設值為1
屬性值:可以為正(遞增),也可以為負(遞減)
注意:哪個標籤用,在那個標籤中宣告 counter-increment屬性
語法:
  counter-increment:計數器名稱 增量值;
  div{
counter-increment:c1 10;
  }
   函式:
        counter(counterName) 函式
作用:使用計數器創建出來的數字文字。
counterName:計數器名稱
7、多列
   屬性:
     1、column-count
        元素被分隔的列數  3
     2、column-gap
        列與列之間的間隔  px
     3、column-rule
        列規則,列間隔符的寬度、樣式、顏色
column-rule:1px solid red;
   瀏覽器相容問題:
   Internet 10 和 Opera 支援多列
   Firefox : -moz-
   Chrome 和 Safari : -webkit-
   div{
column-count:3;
column-gap:50px;
column-rule:2px solid red;


-o-column-count:3;/*Opera*/
-o-column-gap:50px;
-o-column-rule:2px solid red;


-moz-column-count:3; /*火狐中的多列設定*/
-moz-column-gap:50px;
-moz-column-rule:2px solid green;


-webkit-column-count:3;/*Chrome 與 Safari*/
-webkit-column-gap:50px;
-webkit-column-rule:2px solid red;
   }
   常用火狐寫法
        -moz-column-count:3;
   -moz-column-gap:50px;
   分開寫
        -moz-column-rule-style:dashed/dotted(點狀)/double(雙線)/solid(實線);
 -moz-column-rule-width:thin/medium/thick/length;
 -moz-column-rule-color:orange;
 整體
   -moz-column-rule:2px dashed red;


8、CSS Hack
1.什麼是css Hack?
  由於不同廠商的流覽器或某瀏覽器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),對CSS的支援、解析不一樣,導致在不同瀏
覽器的環境中呈現出不一致的頁面展現效果。這時,我們為了獲得統一的頁面效果,就需要針對不同的瀏覽器或不同版本寫特定的CSS樣式,我們
把這個針對不同的瀏覽器/不同版本寫相應的CSS code的過程,叫做CSS hack!
CSS hack的原理


2.css hack 的原理
由於不同的瀏覽器和瀏覽器各版本對CSS的支援及解析結果不一樣,以及CSS優先順序對瀏覽器展現效果的影響,我們可以據此針對不同的瀏覽器情景
來應用不同的CSS。


3.CSS hack分類


CSS Hack大致有3種表現形式,CSS屬性字首法、選擇器字首法以及IE條件註釋法(即HTML頭部引用if IE)Hack,實際專案中CSS Hack大部分是針
對IE瀏覽器不同版本之間的表現差異而引入的。
屬性字首法(即類內部Hack):例如 IE6能識別下劃線"_"和星號" * ",IE7能識別星號" * ",但不能識別下劃線"_",IE6~IE10都認識"\9",但
firefox前述三個都不能認識。
選擇器字首法(即選擇器Hack):例如 IE6能識別*html .class{},IE7能識別*+html .class{}或者*:first-child+html .class{}。
IE條件註釋法(即HTML條件註釋Hack):針對所有IE(注:IE10+已經不再支援條件註釋): <!--[if IE]>IE瀏覽器顯示的內容 <![endif]-->,針對
IE6及以下版本: <!--[if lt IE 6]>只在IE6-顯示的內容 <![endif]-->。這類Hack不僅對CSS生效,對寫在判斷語句裡面的所有程式碼都會生效。
CSS hack書寫順序,一般是將適用範圍廣、被識別能力強的CSS定義在前面。
 3、HTML頭部引用Hack
      通過 IE 的條件註釋 來完成的
      條件註釋:
        與html註釋相似<!-- -->
if條件判斷是否能夠解析註釋裡的內容


gt : 選擇條件版本以上的版本(不包含條件版本)
    gt ie 7
lt : 選擇條件版本以下的版本(不包含條件版本)
    lt ie 8
gte :選擇條件版本以及以上版本
    gte ie 7
lte :
! :選擇條件版本意外的所有版本
   ! ie6
    
        <!--[if 條件]>
 滿足條件要做的事情
<![endif]-->
      1、通過條件註釋宣告,只在IE下生效
        <!--[if ie]>
 這段文字只在ie中顯示
<![endif]-->
      2、只在ie6以上的瀏覽器生效
        <!--[if gt IE 6]>
  
<![endif]-->
      3、在IE8上不生效
        <!--[if ! IE 8]>
 
<![endif]-->
IE所有的css hack
由於所有的IE瀏覽器都能夠識別特定的css屬性值字尾\9,因此我們可以給css的屬性值新增\9字尾(在結尾的分號之前),從而做到只有IE瀏覽器能夠識別
該屬性,其他瀏覽器無法識別從而將其忽略掉。
比如:.css-hack {
    color: red\9; /* 所有瀏覽器上顯示為紅色 */
    
}






IE6:


_selector{property:value;}
selector{property:value;property:value !important;} /* IE6 不支援同一選擇符中的 !important */
IE7:


+selector{property:value;}
IE8:


selector{property:value\0;}
IE6 & IE7:


*selector{property:value;}
IE6 & IE7 & IE8:


測試:
background-color:red; /* All browsers */  
    background-color:blue !important;
    *background-color:black;   
    +background-color:yellow;
    background-color:gray\9; 
    background-color:purple\0; 
    background-color:orange\9\0; 
    _background-color:green; 
  


總結:* 或 # ,IE7、IE11 支援。
     \9 ,IE8、IE9、IE11 支援。
     \0 ,IE8、IE9 支援。
      *、#、\9、\0 這幾個寫法除了IE外其他瀏覽器均不支援。