摘要:本文首發于我的博客在前面兩篇文章你不知道的一和你不知道的二中大致介紹了一些方面比較隱晦的但又很實用的技巧。系列文章你不知道的一你不知道的二本文首發于我的博客
本文首發于我的博客
在前面兩篇文章《你不知道的CSS(一)》和《你不知道的CSS(二)》中大致介紹了一些CSS方面比較隱晦的但又很實用的技巧。相信這些技巧會為大家在項目實踐中帶來一定的幫助,本文作為《你不知道的CSS》系列的第三篇文章,將繼續在CSS技巧方面進行探討,不同于前兩篇的是,本文將著重介紹CSS中偽類和偽元素在項目中的應用場景。偽類相信大家最熟悉也是用的最多的莫過于:hover, :active, :focus之類的,因為這些在平常的項目中太常用了(然而我目前依然見過還有用js去添加.hover類來變化背景色的同學?)。而偽元素如:before, :after相信大家也用的爛熟了。 當然對于比較常見的偽類(元素)不在本文的討論范圍類,本文主要介紹一些生僻的但是又非常實用的偽類(元素)。
CSS的世界已經變天了,拋開過去,擁抱變化吧~
偽類和偽元素的區別偽類和偽元素是一個比較容易混淆的概念,這不僅僅是從名稱上,而且在寫法上也是相似的(目前因為兼容性的問題,它們的寫法是一致的)。這就更容易混淆了?。但還是希望大家在書寫的過程中養成習慣,至于兼容性交給postcss等轉換工具去實現。
規范區別css3 明確規定了偽類用一個冒號:來表示,而偽元素則用兩個冒號::來表示。
偽類更多的定義的是狀態,如:hover,或者說是一個可以使用CSS進行修飾的特定的特殊元素,如:first-child
偽類使用一個冒號:
常見偽類:
:hover
:active
:focus
:visited
:link
:lang
:first-child
:last-child
:not
偽元素簡單來說就是不存在于DOM文檔樹中的虛擬的元素,它們和HTML元素一樣,但是你又無法使用JavaScript去獲取,如:before
偽元素使用兩個冒號::
常見偽元素:
::before
::after
::first-letter
::first-line
用:valid和:invalid來做表單即時校驗html5豐富了表單元素,提供了類似required,email,tel等表單元素屬性。同樣的,我們可以利用:valid和:invalid來做針對html5表單屬性的校驗。
:required 偽類指定具有required 屬性的表單元素
:valid 偽類指定一個通過匹配正確的所要求的表單元素
:invalid 偽類指定一個不匹配指定要求的表單元素
有沒有最開始學angular的感覺?,快點直戳demo感受下吧
.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; } } }
預覽CSS實現Collapse折疊面板demo
:not表示的是一個非/不是的概念。我在項目mo-css上用到過很多次,尤其是在表單類中,我用它來設置表單元素在readonly 和 disabled狀態之外的hover等狀態,以便于當元素在readonly 和 disabled時,元素不具有hover狀態。
@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屬性的樣式。
@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來實現段落首字下沉
首字下沉 : 設置段落的第一行第一字字體變大,并且向下一定的距離,與后面的段落對齊,段落的其它部分保持原樣
就像圖中展示的那樣,之前實現類似效果,我們需要多加一個標簽,如:
前 ...
然而,現在只需要一個CSS偽元素就可以實現。
first-letter 偽元素用于向文本的首字母設置特殊樣式
p::first-letter{ font-size: 6em; line-height: 1; float: left; }用::first-line來特殊標記段落第一行
就如它的名字一樣,這個偽元素代表了段落的第一行,你可以使用任意樣式來控制它。
p::first-line{ color: red }小結
CSS的偽類和偽元素還有很多,因為或兼容性或其他原因,文章中介紹的幾種偽類/元素用的比較少,這不得不說是一種遺憾。但,為了保證項目的健康和可持續化,一定要注意偽類和偽元素的區別,盡可能的在寫偽類的時候使用一個冒號:,而在寫偽元素的時候用兩個冒號::,就像使用autoprefixer來生成瀏覽器前綴一樣,將:和::的轉換交給postcss等工具去做。
系列文章你不知道的CSS(一)
你不知道的CSS(二)
本文首發于我的博客
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/112623.html
摘要:變化的只有種更新和刪除。頁面的元素的數量隨著而變。四總結本文詳細介紹如何實現一個簡單的算法,再根據計算出的差異去更新真實的。 歡迎關注我的公眾號睿Talk,獲取我最新的文章:showImg(https://segmentfault.com/img/bVbmYjo); 一、前言 目前最流行的兩大前端框架,React 和 Vue,都不約而同的借助 Virtual DOM 技術提高頁面的渲染...
摘要:比方說,這些元素的寬度默認是與父級容器的。典型代表就是浮動絕對定位元素或者元素,英文稱為,收縮到合適中的指的就是這種寬度表現收縮到最小。 ????說到widh:auto這個屬性大家一定不陌生,也都知道width的默認值是auto,正因為auto是默認值,極少有人去關注auto的寬度表現,下面就讓我介紹一下我認識的auto的四種寬度表現 1.充分利用可用空間。比方說,、這些元素的寬度默認...
摘要:前言瀏覽器的內核是指支持瀏覽器運行的最核心的程序,分為兩個部分的,一是渲染引擎,另一個是引擎。渲染引擎在不同的瀏覽器中也不是都相同的。接下來就是瀏覽器的渲染過程。布局完成后,瀏覽器會立即發出和事件,將渲染樹轉換成屏幕上的像素。 前言 瀏覽器的內核是指支持瀏覽器運行的最核心的程序,分為兩個部分的,一是渲染引擎,另一個是JS引擎。渲染引擎在不同的瀏覽器中也不是都相同的。目前市面上常見的瀏覽...
摘要:前言瀏覽器的內核是指支持瀏覽器運行的最核心的程序,分為兩個部分的,一是渲染引擎,另一個是引擎。渲染引擎在不同的瀏覽器中也不是都相同的。接下來就是瀏覽器的渲染過程。布局完成后,瀏覽器會立即發出和事件,將渲染樹轉換成屏幕上的像素。 前言 瀏覽器的內核是指支持瀏覽器運行的最核心的程序,分為兩個部分的,一是渲染引擎,另一個是JS引擎。渲染引擎在不同的瀏覽器中也不是都相同的。目前市面上常見的瀏覽...
摘要:目前,和不支持該屬性,但不久后就會改變。承諾支持該屬性,值得期待等支持該屬性。在知乎的一個專欄上介紹了三個奇淫技巧,很有用,補充在此文后面關于幾乎沒人知道的件事英文原文譯文出處一些你不知道的屬性 Box-sizing 盡管box-sizing在CSS3中才被引入,其有一個值是border-box,讓元素的高和寬包含了填充和邊框。 .div { width: 150px; ...
閱讀 2789·2021-11-24 09:39
閱讀 2548·2021-11-23 09:51
閱讀 1802·2021-11-17 09:33
閱讀 1736·2021-10-22 09:54
閱讀 1870·2021-08-16 11:00
閱讀 3420·2019-08-30 15:53
閱讀 1732·2019-08-30 13:19
閱讀 2901·2019-08-30 12:49