CSS 偽元素有哪些不得了的用法?
請教除了常說的添加元素,加小標,清浮動之類的,還有哪些兇殘的實用技巧,比如在結構、性能提升、像什麼2d、3d轉換、一些不用圖片的特效等等,是不是可以運用到?另外大量使用偽元素有副作用嗎?
[contentEditable].empty:before {
position: absolute; /* Firefox 特別處理 */
content: attr(placeholder);
color: gray;
}
用此模擬原生 input[placeholder] 效果
所有偽元素能實現的,真實子元素都可以做到。
只不過有時候單純是為了樣式和布局就改變html結構,這樣的做法不幹凈,不值得提倡,所以才有了偽元素的市場。
我用偽元素繪製過印表機,拆開一半的信封等,也用它實現過非規整圖片輪廓。
不過這些真實子元素同樣可以做到,只不過沒有做到內容結構與樣式分離而已。
關於坑,就是你沒法通過dom操作直接操作偽元素。補充一個,css3中偽元素content的attr十分有意思,例如文本為鏈接地址的超鏈接或者是a標籤的某個data項,用這個就不需要js去遍歷讀取然後插入了。
另外再說兩個最近遇到的坑:
1.IE8的偽元素不支持filter,想不通過背景圖片或多餘節點來實現兼容IE8的透明蒙層只能洗洗睡了……
2.極大量的低版本安卓手機默認瀏覽器和各類國產第三方瀏覽器,包括微信自帶的QQ瀏覽器內核webview,不支持偽元素的transition和animation,而且由於是偽元素,完全不能指望用js來方便的解決,所以如果遇到需要有動畫和過度效果的移動端頁面,還是老老實實用實元素比較好,雖然代碼看起來好臟不開心有什麼不得了的,不就是多了一個原本不存在於DOM節點中的元素么,說白了,其實還是一個元素,跟多寫一個標籤的區別就是在於HTML中多了幾個字元和少了幾個字元而已。
額 其實我是覺得偽元素和普通的標籤沒什麼區別,要說真有什麼區別,我能想到的也就是只有存在一個標籤,才能存在該元素的偽元素,個人覺得偽元素僅僅是為了代碼簡化而產生的東西,所以,普通標籤能完成的樣式功能什麼的,偽元素都可以的。更甚者有可能,有些東西用偽元素來實現更簡單。
偽元素寫的一個list,請各位客官食用RunJS用來在不影響布局的情況下擴大元素的可點擊區域,具體怎麼做自己想想哦
無法回答的邀請該怎麼感謝。。編程至今能稱為黑魔法的我只在js里見過一次。。高端技巧倒還有一些。。話歸正傳。。別忘了偽元素沒有dom就行了…其實自從用了js輸出html模板的前端mvc(或者反用web app的概念,稱為基於pjax的local web),偽元素我就不怎麼用了…好遺憾剛打算放棄ie67的強兼容而體會到一點偽元素的便利,讓html清爽了幾天…說句實在話html和css終究是難以分割的,反正要一起改就沒研究「換皮膚」的技術了…
純CSS3掃雷 https://github.com/imsun/CSS-Minesweeper
不用JS或JQ實現tab標籤頁。
div{z-index:1}
div:target{z-index:2;}
清除浮動
div:before,div:after{
content:"";
display:table;
}
div:after{
clear:both;
}
添加動畫
div:before{
content:"";
animation: myanim .5s ease-in-out 0s infinite ;
}
div:after{
content:"";
animation: myanim .5s ease-in-out .5s infinite ;
}
@keyframes myanim {
from{xxxxxx;}
to{xxxxxxx;}
}
:after和:before配合@font-face來給文字添加矢量圖或者圖標。
【CSS進階】偽元素的妙用--單標籤之美
這有一個不錯的紙張陰影特效,用的:before :after 可以看一下CSS Box Shadows Effects
偽元素如果按普通元素來用 多半就做ui效果 保持html簡潔 沒有多餘樣式元素
個人覺得用content:; 讀html Attribute 很好用, 可以用偽元素做很多以前依賴js的效果 少寫代碼 很好用
至於兇殘的效果 和真實元素差不多 就沒什麼特別的推薦閱讀:
※剛開始學HTML5 + CSS,用什麼軟體好?
※知乎的登錄首頁背景動畫是怎麼做到的?JS還是CSS3,求教
※如何看待《css權威指南》 (第三版) 中提到的 「HTML可能會逐步被XML所取代」 ?
※新組建的前端團隊如何選擇前端框架方案?
※前端開發該如何循序漸進地學習?對於html、css、js、jq等有哪些不錯的資料 (視頻,博客,書籍等)可以推薦?