複雜選擇器 內容生成 多列 CSSHack(瀏覽器相容)
阿新 • • 發佈:2018-12-26
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外其他瀏覽器均不支援。
匹配指定元素的相鄰兄弟元素
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外其他瀏覽器均不支援。