本文首發於個人博客css
在前面兩篇文章《你不知道的CSS(一)》和《你不知道的CSS(二)》中大體介紹了一些CSS方面比較隱晦的但又很實用的技巧。相信這些技巧會爲你們在項目實踐中帶來必定的幫助,本文做爲《你不知道的CSS》系列的第三篇文章,將繼續在CSS技巧方面進行探討,不一樣於前兩篇的是,本文將着重介紹CSS中僞類和僞元素在項目中的應用場景。僞類相信你們最熟悉也是用的最多的莫過於:hover
, :active
, :focus
之類的,由於這些在日常的項目中太經常使用了(然而我目前依然見過還有用js去添加.hover
類來變化背景色的同窗😴)。而僞元素如:before
, :after
相信你們也用的爛熟了。 固然對於比較常見的僞類(元素)不在本文的討論範圍類,本文主要介紹一些生僻的可是又很是實用的僞類(元素)。html
CSS的世界已經變天了,拋開過去,擁抱變化吧~html5
僞類和僞元素是一個比較容易混淆的概念,這不只僅是從名稱上,並且在寫法上也是類似的(目前由於兼容性的問題,它們的寫法是一致的)。這就更容易混淆了😅。但仍是但願你們在書寫的過程當中養成習慣,至於兼容性交給postcss等轉換工具去實現。css3
css3 明確規定了僞類用一個冒號
:
來表示,而僞元素則用兩個冒號::
來表示。git
:hover
,或者說是一個可使用CSS進行修飾的特定的特殊元素,如:first-child
:
:hover
:active
:focus
:visited
:link
:lang
:first-child
:last-child
:not
:before
::
::before
::after
::first-letter
::first-line
:valid
和:invalid
來作表單即時校驗html5豐富了表單元素,提供了相似required
,email
,tel
等表單元素屬性。一樣的,咱們能夠利用:valid
和:invalid
來作針對html5表單屬性的校驗。github
:required
僞類指定具備required 屬性的表單元素:valid
僞類指定一個經過匹配正確的所要求的表單元素:invalid
僞類指定一個不匹配指定要求的表單元素有沒有最開始學angular
的感受🤓,快點直戳demo感覺下吧web
.valid {
border-color: #429032;
box-shadow: inset 5px 0 0 #429032;
}
.invalid {
border-color: #D61D1D;
box-shadow: inset 5px 0 0 #D61D1D;
}
.required {
border-color: #056B9B;
box-shadow: inset 5px 0 0 #056B9B;
}
input,
textarea {
&:valid {
@extend .valid;
}
&:invalid {
@extend .invalid;
}
&:required {
@extend .required;
}
}複製代碼
:target
來實現摺疊面板
:target
是文檔的內部連接,即URL
後面跟有錨名稱 #,指向文檔內某個具體的元素。瀏覽器
利用 :target
的特性能夠實現之前只能使用JavaScript實現的顯示隱藏或者Collapse
摺疊面板。工具
.collapse {
>.collapse-body {
display: none;
&:target {
display: block;
}
}
}複製代碼
:not
來排除其餘選擇器:not
表示的是一個非/不是
的概念。我在項目mo-css上用到過不少次,尤爲是在表單類中,我用它來設置表單元素在readonly
和 disabled
狀態以外的hover
等狀態,以便於當元素在readonly
和 disabled
時,元素不具備hover
狀態。post
@mixin buttonStyle ($border, $background, $color, $hoverBorder, $hoverBackground, $hoverColor) {
color: $color;
border-color: $border;
background-color: $background;
&:not(.readonly):not([readonly]):not(.disabled):not([disabled]) {
&:hover,
&:active {
color: $hoverColor;
border-color: $hoverBorder;
background-color: $hoverBackground;
}
}
}複製代碼
:nth-child(even/odd)
來實現隔行變色:nth-child
等僞類的參數大可能是一個數值或者數學表達式2n+1
,而even
做爲參數用來表示偶數
,odd
做爲參數用來表示奇數
的相似於別罵的特性每每被忽略。
ul {
&.odd {
>li:nth-child(odd) {
background: red;
}
}
&.even {
>li:nth-child(even) {
background: green;
}
}
}複製代碼
::selection
來美化選中文本就像你用鼠標選中這段話看到的那樣,::selection
用來設置選中文本的樣式,從而改變瀏覽器一成不變的文本選中色(藍色)。
::selection{
color: #fff;
background-color: #6bc30d;
}複製代碼
::placeholder
來美化佔位符::placeholder
用來修飾input/textarea
等表單元素placeholder
屬性的樣式。
<input type="text" placeholder="我是自定義的placeholder" />複製代碼
@mixin placeholder {
&::-webkit-input-placeholder {
@content
}
&::-moz-placeholder {
@content
}
&:-ms-input-placeholder {
@content
}
}
input, textarea {
@include placeholder {
color: #f00;
}
}
//css
input::-webkit-input-placeholder{
color: #f00;
}
input::-moz-placeholder{
color: #f00;
}
input:-ms-input-placeholder{
color: #f00;
}複製代碼
::first-letter
來實現段落首字下沉首字下沉 : 設置段落的第一行第一字字體變大,而且向下必定的距離,與後面的段落對齊,段落的其它部分保持原樣
就像圖中展現的那樣,以前實現相似效果,咱們須要多加一個標籤,如:
<p>
<b>前</b>
...
</p>複製代碼
然而,如今只須要一個CSS僞元素就能夠實現。
first-letter
僞元素用於向文本的首字母設置特殊樣式
p::first-letter{
font-size: 6em;
line-height: 1;
float: left;
}複製代碼
::first-line
來特殊標記段落第一行就如它的名字同樣,這個僞元素表明了段落的第一行,你可使用任意樣式來控制它。
p::first-line{
color: red
}複製代碼
CSS的僞類和僞元素還有不少,由於或兼容性或其餘緣由,文章中介紹的幾種僞類/元素用的比較少,這不得不說是一種遺憾。但,爲了保證項目的健康和可持續化,必定要注意僞類和僞元素的區別,儘量的在寫僞類的時候使用一個冒號:
,而在寫僞元素的時候用兩個冒號::
,就像使用autoprefixer
來生成瀏覽器前綴同樣,將:
和::
的轉換交給postcss
等工具去作。
本文首發於個人博客