大放異彩的虛擬元素——可以做什嗎?)別人分享的文章,發現很不錯,果斷收藏了,大放異彩

來源:互聯網
上載者:User

大放異彩的虛擬元素——可以做什嗎?(轉)別人分享的文章,發現很不錯,果斷收藏了,大放異彩

虛擬元素:before:after可以做的東西是相當驚人的。對於頁面上的每一個元素,你擁有了兩個更靈活的、而且可以完成其它HTML元素都能完成的東西的元素。它們讓一大堆有趣的設計成為可能,而且不會對你的語義標籤產生負面影響。這裡有一大堆關於這些有趣的效果的樣本,你想看的話就接著往下看吧。

多重背景畫布

 

因為你可以將虛擬元素相對於它們的父類元素絕對位置,你可以想象成每個元素都有兩個額外的層。Nicolas Gallagher向我們展示了它的很多種應用,包括多邊界、類比CSS3多重背景、等高欄等。

增加單個元素能建立的形狀數目

 

這上面所有的形狀都可以只用一個元素建立,而且更加實用。相對於那些使用1700個div元素來“用純CSS做一個咖啡杯”的事情,很整齊,但不實用。

這是一個六角星的樣本:

CSS

#star-six {  width: 0;  height: 0;  border-left: 50px solid transparent;  border-right: 50px solid transparent;  border-bottom: 100px solid red;  position: relative;}#star-six:after {  width: 0;  height: 0;  border-left: 50px solid transparent;  border-right: 50px solid transparent;  border-top: 100px solid red;  position: absolute;  content: "";  top: 30px;  left: -50px;}

 

在列印網頁時顯示連結的URL

 

@media print {  a[href]:after {    content: " (" attr(href) ") ";  }}

 

清除浮動

 

相比插入額外的非語義標記來清除內嵌元素的浮動,我們可以使用一個虛擬元素來完成。俗稱"clearfix",並且使用"group"這個類名也更語義化。

CSS

.group:before,.group:after {  content:"";  display:table;}.group:after {  clear:both;}.group {  zoom:1; /* For IE 6/7 (trigger hasLayout) */}

 

類比float:center;

float屬性實際上並沒有center這個值,儘管我們可能非常需要。float雖然有左浮動和右浮動,但是我們通過使用佔位虛擬元素也可以在兩個容器之間佔一塊位置,並放上一個映像,我們可以看一下效果。

使用對應的語言標記代碼塊

這個網站的當前設計是,使用虛擬元素通過不同的語言來標記代碼塊。

HTML

<pre rel="CSS"></pre>

CSS

pre:after {  content: attr(rel);  position: absolute;  top: 22px;  right: 12px;}
建立一個完整的表徵圖集

Nicolas Gallagher再次把他的idea提升到了建立一大組表徵圖。沒有使用任何圖片,每兩個元素(最多)只有虛擬元素。

更高效地使用有限的空間

使用CSS有所得,也必然有所失。我的意思是虛擬元素的內容可以通過媒體查詢有選擇地應用或刪除。如果空間是有限的,你可能會應用表徵圖,而如果有更多空間的話就可以使用一個更具描述性的單詞。

適用內容多的布局

如果你的虛擬元素是文本,它們繼承了和它們的父元素相同的配置樣式。但是當你設定它們的內容時,你也可以編輯它們的樣式。比如說,使用不同的字型和不同的顏色來讓你的標題脫穎而出。

CSS

h2 {  text-align: center;}h2:before, h2:after {  font-family: "Some cool font with glyphs", serif;  content: "\00d7";  /* Some fancy character */  color: #c83f3f;}h2:before {  margin-right: 10px;}h2:after {  margin-left: 10px;}
建立和瀏覽器等寬度的條

 

 

當你需要適應瀏覽器寬度的背景,但是元素的內容又不夠將其撐開時,你往往會使用非語義化的內嵌元素包裹或重複且繁瑣的間距聲明。或許你可以試試使用元素來限制內容的寬度來類比效果,通過設定虛擬元素的寬度讓標題列延伸出邊界。

建立一個body邊框

 

 

在左邊和右邊設定普通的border,在頂部和底部固定虛擬元素條的位置。完全不使用任何專門的標記,我們就可以得到一個“body border”的效果。

CSS

body:before, body:after {  content: "";  position: fixed;  background: #900;  left: 0;  right: 0;  height: 10px;}body:before {  top: 0;}body:after {  bottom: 0;}body {  border-left: 10px solid #900;  border-right: 10px solid #900;}

 

做一個閃爍的按鈕

做一個有從白色到透明漸層的虛擬元素塊,把它放在button外邊,然後在滑鼠移至上方時讓它從button上過渡移動,這樣在滑鼠移至上方時,你可以得到一個看起來似乎抓到了一點光的按鈕。只有Firefox、chrome 26+和IE10+支援。

Anton Trollbäck寫的原版效果,Nicolas Gallagher用虛擬元素寫的版本,我自己寫的另一個版本。

在特殊連結被滑鼠移至上方時將頁面淡出

 

如果你沒有給元素設定相對定位,絕對位置的虛擬元素就會相對於下一個父元素定位。如果沒有寫其它的內容,它就會相對於根項目定位。你可以使用它來做一個填充瀏覽器視窗的元素,將其相對疊齊在主要元素下,然後在滑鼠移至上方於連結上時顯示它,做一個頁面淡出的效果。

將header做成三維絲帶的樣式

絲帶大家都很喜歡!查看一下這個樣本的HTML和CSS片段。它使用了一個負的z-index,這在某些情況下需要額外的包裹元素,以防止失去背景不透明的父元素下方的元素。

為有序列表的數字設定樣式

你試過為有序列表的數字編寫樣式嗎?你還是做著這些繁瑣的事情,比如把他們包裹在span內,為清單項目寫樣式,然後跟著span一起把樣式刪除。或是胡亂地使用背景映像。或是移除列表樣式,然後放進你自己的數字。這些方法都是非常糟糕的。最好是使用虛擬元素來作為計數器。

讓資料表可響應

 

在小螢幕上瀏覽大型的資料表是很可怕的。它們要麼是被放大,並要求水平和垂直滾動,要麼是縮得太小,無法閱讀。我們可以把CSS媒體查詢和虛擬元素結合起來,使資料表迅速反應並格式化成一個在小螢幕上更具可讀性的表格。

建立樣式化的提示

 

使用HTML5資料屬性,然後將該屬性匯入並設定樣式為一個虛擬元素,這樣我們就可以使用CSS來建立完全自訂的提示。

在導航item之間添加分隔字元

如果你想將nav item之間相互分隔開,你的選擇是有限的:你可以添加一個邊框(很無聊),或是在每個項目之間添加額外的標記(也很無聊)。虛擬元素可以讓你在項目之間使用任何內容來作為分隔。

CSS

.menu li:before {  content: "// ";  position: relative;  left: -1px;}
做一個完全沒有HTML的網站

憑藉瀏覽器自動插入<html>, <head><body>標籤的功能,Mathias Bynens展示了如何只使用CSS和虛擬元素建立網站。

構建僅用CSS編寫的字型

 

對每個字母,使用一個HTML元素(包括虛擬元素)。Yusuke Sugomori通過CSS構建了一整套字型,命名為CSS Sans。這個互動demo,可以讓你看到Yusuke用於構建字母的所有巧妙技術(如rotate(旋轉)、border-radius(圓角半徑)、skew(傾斜)等)。

這套字型僅包括了大寫拉丁字母,而且非常可愛!CSS Sans項目是一個很棒的建立在各種約束上的富有創造力的示範!

 

 

 

 

本文根據@Chris Coyier的《A Whole Bunch of Amazing Stuff Pseudo Elements Can Do》所譯,整個譯文帶有我們自己的理解與思想,如果譯得不好或有不對之處還請同行朋友指點。如需轉載此譯文,需註明英文出處:https://css-tricks.com/pseudo-element-roundup/。

 

 

原文地址:http://www.w3cplus.com/css3/pseudo-element-roundup.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.