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

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

一、複雜選擇器
二、內容生成
三、多列(打醬油的屬性)
四、CSS Hack(瀏覽器兼容性)
*******************************
一、複雜選擇器:兄弟選擇器、屬性選擇器、僞類選擇器、僞元素選擇器
    一、兄弟選擇器
        一、做用
            經過元素的平級關係來匹配其餘元素(輩分相同的元素)
            (最大的特色)只能向後不能向前
        二、分類
            一、相鄰兄弟選擇器
                匹配指定元素的相鄰兄弟(牢牢挨在一塊兒,不能相隔,位置的兄弟)
                相鄰:牢牢挨在指定元素的後面web

                語法:
                    選擇器1+選擇器2
                    ex:
                        一、#d1+p{color:black;}:設置id選擇器爲d1的相鄰的p元素的文本顏色爲黑
                        二、#content+.important{}
            二、通用兄弟選擇器
                通用:某元素後面全部的兄弟元素
                語法:
                    選擇器1~選擇器2瀏覽器

                    #d1~p{color:black;}:d1後面全部的p元素的文本顏色設置爲黑
    二、屬性選擇器
        一、做用
            容許使用元素所附帶的屬性及其值,來匹配頁面的元素
        二、語法
             惟一一組以  [] 來進行表示的選擇器
             一、[attr]
                attr:任意屬性名稱
                做用:匹配 附帶 attr 屬性的元素
                    ex:
                        一、[id]:匹配頁面全部附帶 id 屬性的元素
             二、elem[attr]
                elem : 表示任意元素
                做用:匹配附帶 attr 屬性的 elem 元素
                    ex:
                        一、p[id]:匹配附帶id屬性的p元素
             三、elem[attr1][attr2]
                做用:匹配頁面中全部即附帶attr1屬性也同時附帶attr2屬性的elem元素
                    ex:
                        div[id][class]:匹配同時帶有id屬性也同時附帶class屬性的div元素
             四、elem[attr=value]
                    value:值
                    做用:匹配頁面上 附帶attr屬性同時值爲 value 的elem 元素
                    ex:
                        input[type=text] : 獲取頁面全部文本框
             五、elem[class~=value]
                    做用:匹配 附帶 class 屬性的 elem元素,其中class屬性的值是以空格隔開的值列表,value是值列表中的一個獨立值。
             六、elem[attr^=value]
                ^= : 以 value 做爲開始
                做用:匹配附帶attr屬性的elem元素,而且該屬性值是以value做爲開始的
             七、elem[attr$=value]
                $= : 以 value 做爲結束
                做用:匹配附帶attr屬性的elem元素,而且該屬性值是以value做爲結束的
             八、elem[attr*=value]
                *= : 包含 value 字符便可
    三、僞類選擇器
        一、目標僞類
            一、做用
                突出顯示活動的HTML錨元素。匹配當前頁面中活動的HTML錨元素。
            二、語法
                :target
        二、元素狀態僞類
            一、做用
                元素狀態 :啓用,禁用,被選中(checked)
            二、語法
                :enabled , 匹配每一個已啓用元素(表單控件)
                :disabled , 匹配每一個已禁用元素(表單控件)
                :checked , 匹配每一個被選中元素(radio,checkbox)
        三、結構僞類(重點)
            一、:first-child
                匹配 屬於其父元素中的首個子元素
函數

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

            四、:empty
                匹配 沒有子元素(也不能包含文本)的每一個元素
                <div></div>
            五、:only-child
                匹配屬於其父元素中的惟一子元素
                <div>
                    <p>Hello World</p>
                </div>
        四、否認僞類(經常使用做排除、篩選)
            一、語法
                :not(選擇器)
                做用:將 知足選擇器的元素從指定範圍中排除出去url

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

            CSS3中,將全部的僞元素選擇器所有都升級爲 :: , ex ::first-letter, ::first-linerem

            爲了可以實現瀏覽器的兼容性,比較推薦使用 :的寫法
二、內容生成
    一、什麼是內容生成
        經過 css 向現有的 元素內容區域中增長一部份內容
    二、僞元素選擇器
        一、:before 或 ::before
            匹配到某元素的內容區域以前
            <div>(內容區域以前)Hello World</div>
        二、:after 或 ::after
            匹配到某元素的內容區域以後
            <div>Hello World(內容區域以後)</div>
    三、屬性
        屬性:content
        取值:
            一、字符串 : 純文本
            二、url : 圖像
            三、計數器
    四、計數器
        一、做用
            生成一段有序的數字,而且插入到元素中
        二、三步走
            一、聲明(復位)計數器
                一、屬性
                    counter-reset
                    取值:
                        一、默認值爲 0
                        二、能夠取值爲 正數或負數
                    counter-reset:計數器名稱 值;
                    一次性聲明多個計數器:
                    counter-reset:名1 值1 名2 值2;
                二、什麼地方聲明計數器???
                    不能放在使用的元素中聲明
            二、設置計數器的增量
                一、屬性
                    counter-increment
                    做用:設置某個選擇器出現的計數器的增量,默認值爲1字符串

                    counter-increment:名稱 增量值;
                二、什麼地方聲明計數器增量???
                    哪一個元素使用,就在哪一個元素中設置增量
            三、使用計數器
                一、函數
                    counter(計數器名稱)get

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

        Firefox : -moz-
        Chrome,Safari: -webkit-
四、CSS Hack
    一、解決問題
        IE各版本瀏覽器兼容性問題
    二、CSS Hack
        瀏覽器的類型及版本不一樣會形成CSS的解析效果也各不相同
            不一樣廠商瀏覽器:IE,Chrome,Firefox,Safari
            同一廠商瀏覽器的不一樣版本:IE6,IE7,IE8,IE9,IE10
    三、CSSHack 原理
        使用 CSS 樣式屬性的 優先級 來解決兼容性問題
    四、CSSHack 分類
        一、CSS類內部Hack
            經過 屬性前綴或值後綴 的方式來解決兼容性

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

            注意:
                IE7的兼容代碼 要在上
                IE6的兼容代碼 要在下
        二、選擇器Hack
            在選擇器前加上某些瀏覽器能識別的前綴
            div{
                
            }

            *前綴:IE6識別
            *+前綴:IE7識別

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

                版本:6 ~ 10 數字
                條件:
                    一、gt
                        大於指定版本的瀏覽器
                    二、gte
                        大於等於指定版本的瀏覽器
                    三、lt
                        小於指定版本的瀏覽器
                    四、lte
                        小於等於指定版本的瀏覽器
                    五、!
                        除條件版本之外的其餘版本瀏覽器
                ex:
                    <!--[if gt IE 6]>
                        該段內容只能在 IE6以上版本的瀏覽器中顯示
                    <![endif]-->

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