1. 程式人生 > >04 CSS CORE 複雜選擇器、內容生成、多列、CSS hack

04 CSS CORE 複雜選擇器、內容生成、多列、CSS hack

======================================複雜選擇器========================================

1、複雜選擇器
2、內容生成
3、多列(打醬油的屬性)
4、CSS Hack(瀏覽器相容性)
*******************************
1、複雜選擇器:兄弟選擇器、屬性選擇器、偽類選擇器、偽元素選擇器
    1、兄弟選擇器
        1、作用
            通過元素的平級關係來匹配其他元素(輩分相同的元素)
            (最大的特點)只能向後不能向前
        2、分類
            1、相鄰兄弟選擇器
                匹配指定元素的相鄰兄弟(緊緊挨在一起,不能相隔,位置的兄弟)
                相鄰:緊緊挨在指定元素的後面

                語法:
                    選擇器1+選擇器2
                    ex:
                        1、#d1+p{color:black;}:設定id選擇器為d1的相鄰的p元素的文字顏色為黑
                        2、#content+.important{}
            2、通用兄弟選擇器
                通用:某元素後面所有的兄弟元素
                語法:
                    選擇器1~選擇器2

                    #d1~p{color:black;}:d1後面所有的p元素的文字顏色設定為黑
    2、屬性選擇器
        1、作用
            允許使用元素所附帶的屬性及其值,來匹配頁面的元素
        2、語法
             唯一一組以  [] 來進行表示的選擇器
             1、[attr]
                attr:任意屬性名稱
                作用:匹配 附帶 attr 屬性的元素
                    ex:
                        1、[id]:匹配頁面所有附帶 id 屬性的元素
             2、elem[attr]
                elem : 表示任意元素
                作用:匹配附帶 attr 屬性的 elem 元素
                    ex:
                        1、p[id]:匹配附帶id屬性的p元素
             3、elem[attr1][attr2]
                作用:匹配頁面中所有即附帶attr1屬性也同時附帶attr2屬性的elem元素
                    ex:
                        div[id][class]:匹配同時帶有id屬性也同時附帶class屬性的div元素
             4、elem[attr=value]
                    value:值
                    作用:匹配頁面上 附帶attr屬性同時值為 value 的elem 元素
                    ex:
                        input[type=text] : 獲取頁面所有文字框
             5、elem[class~=value]
                    作用:匹配 附帶 class 屬性的 elem元素,其中class屬性的值是以空格隔開的值列表,value是值列表中的一個獨立值。
             6、elem[attr^=value]
                ^= : 以 value 作為開始
                作用:匹配附帶attr屬性的elem元素,並且該屬性值是以value作為開始的
             7、elem[attr$=value]
                $= : 以 value 作為結束
                作用:匹配附帶attr屬性的elem元素,並且該屬性值是以value作為結束的
             8、elem[attr*=value]
                *= : 包含 value 字元即可
    3、偽類選擇器
        1、目標偽類
            1、作用
                突出顯示活動的HTML錨元素。匹配當前頁面中活動的HTML錨元素。
            2、語法
                :target
        2、元素狀態偽類
            1、作用
                元素狀態 :啟用,禁用,被選中(checked)
            2、語法
                :enabled , 匹配每個已啟用元素(表單控制元件)
                :disabled , 匹配每個已禁用元素(表單控制元件)
                :checked , 匹配每個被選中元素(radio,checkbox)
        3、結構偽類(重點)
            1、:first-child
                匹配 屬於其父元素中的首個子元素

                   ex:   td:first-child{color:child;}
            2、:last-child
                匹配 屬於其父元素中的最後一個子元素
            3、:nth-child(n)(n=1時相當於first)
                匹配 屬於其父元素中的第n個子元素

            4、:empty
                匹配 沒有子元素(也不能包含文字)的每個元素
                <div></div>
            5、:only-child
                匹配屬於其父元素中的唯一子元素
                <div>
                    <p>Hello World</p>
                </div>
        4、否定偽類(常用作排除、篩選)
            1、語法
                :not(選擇器)
                作用:將 滿足選擇器的元素從指定範圍中排除出去

               ex:  #tb1 td:not(:first child){color:red;}    :匹配除每行第一列以外的所有列
    4、偽元素選擇器
        1、作用
            偽類:匹配元素的
            偽元素:匹配元素中的內容
        2、語法
            1、:first-letter 或 ::first-letter
                匹配 指定元素的 首字元
            2、:first-line 或 ::first-line
                匹配 指定元素的 首行
            3、::selection
                匹配 被使用者選取的部分
        3、: 和 ::的區別
            CSS3之前,所有的偽元素選擇器,全部都是 使用 :,ex  :first-line,:first-letter

            CSS3中,將所有的偽元素選擇器全部都升級為 :: , ex ::first-letter, ::first-line

            為了能夠實現瀏覽器的相容性,比較推薦使用 :的寫法
2、內容生成
    1、什麼是內容生成
        通過 css 向現有的 元素內容區域中增加一部分內容
    2、偽元素選擇器
        1、:before 或 ::before
            匹配到某元素的內容區域之前
            <div>(內容區域之前)Hello World</div>
        2、:after 或 ::after
            匹配到某元素的內容區域之後
            <div>Hello World(內容區域之後)</div>
    3、屬性
        屬性:content
        取值:
            1、字串 : 純文字
            2、url : 影象
            3、計數器
    4、計數器
        1、作用
            生成一段有序的數字,並且插入到元素中
        2、三步走
            1、宣告(復位)計數器
                1、屬性
                    counter-reset
                    取值:
                        1、預設值為 0
                        2、可以取值為 正數或負數
                    counter-reset:計數器名稱 值;
                    一次性宣告多個計數器:
                    counter-reset:名1 值1 名2 值2;
                2、什麼地方宣告計數器???
                    不能放在使用的元素中宣告
            2、設定計數器的增量
                1、屬性
                    counter-increment
                    作用:設定某個選擇器出現的計數器的增量,預設值為1

                    counter-increment:名稱 增量值;
                2、什麼地方宣告計數器增量???
                    哪個元素使用,就在哪個元素中設定增量
            3、使用計數器
                1、函式
                    counter(計數器名稱)

                    配合著 :before 或 :after 一起使用
                    div:before{
                        content:counter(name);
                    }
            4、練習
                1、倚天屠龍記
                    1.1 張三丰
                    1.2 張翠山
                    1.3 張無忌
                    1.4 殷素素
                2、西遊記
                    2.1 孫悟空
                    2.2 豬悟能
                    2.3 沙悟淨
                    2.4 白骨精
3、多列
    1、分隔列
        1、作用
            將一段文字拆分成幾列
        2、屬性
            column-count
            取值:數字
    2、列間隔
        1、作用
            每兩列之間的間隔距離
        2、屬性
            column-gap
            取值:px
    3、列規則
        1、作用
            每兩列之間增加分割線,並設定分割線的寬度,樣式,顏色
        2、屬性
            column-rule : width style color;
    4、瀏覽器相容性
        IE10+,Opear 支援

        Firefox : -moz-
        Chrome,Safari: -webkit-
4、CSS Hack
    1、解決問題
        IE各版本瀏覽器相容性問題
    2、CSS Hack
        瀏覽器的型別及版本不同會造成CSS的解析效果也各不相同
            不同廠商瀏覽器:IE,Chrome,Firefox,Safari
            同一廠商瀏覽器的不同版本:IE6,IE7,IE8,IE9,IE10
    3、CSSHack 原理
        使用 CSS 樣式屬性的 優先順序 來解決相容性問題
    4、CSSHack 分類
        1、CSS類內部Hack
            通過 屬性字首或值字尾 的方式來解決相容性

            + : 被IE6,IE7識別
            - : 被IE6 識別
            +,-如果同時出現的話,+只針對IE7,-只針對IE6

            注意:
                IE7的相容程式碼 要在上
                IE6的相容程式碼 要在下
        2、選擇器Hack
            在選擇器前加上某些瀏覽器能識別的字首
            div{
                
            }

            *字首:IE6識別
            *+字首:IE7識別

            *div{}
            *+div{}
        3、HTML頭部引用Hack
            1、原理
                通過IE條件註釋 解決相容性問題
                IE瀏覽器會根據一個if條件判斷,判斷指定的內容是要被解析還是被註釋
        
            2、語法
                <!--[if 條件 IE 版本]>
                    內容
                <![endif]-->

                版本:6 ~ 10 數字
                條件:
                    1、gt
                        大於指定版本的瀏覽器
                    2、gte
                        大於等於指定版本的瀏覽器
                    3、lt
                        小於指定版本的瀏覽器
                    4、lte
                        小於等於指定版本的瀏覽器
                    5、!
                        除條件版本以外的其他版本瀏覽器
                ex:
                    <!--[if gt IE 6]>
                        該段內容只能在 IE6以上版本的瀏覽器中顯示
                    <![endif]-->

                    <!--[if IE 8]>
                        該段內容只能在IE8中顯示
                    <![endif]-->