偽元素 :Before 和 :After的學習

来源:http://www.cnblogs.com/shouce/archive/2016/02/01/5174364.html
-Advertisement-
Play Games

層疊樣式表(CSS)的主要目的是給HTML元素添加樣式,然而,在一些案例中給文檔添加額外的元素是多餘的或是不可能的。事實上CSS中有一個特性允許我們添加額外元素而不擾亂文檔本身,這就是“偽元素”。 你一定聽說過這個詞,尤其是當你一直關註著我們的教程。點此瀏覽原作者的其他文章 事實上,的確有一些CSS


 層疊樣式表(CSS)的主要目的是給HTML元素添加樣式,然而,在一些案例中給文檔添加額外的元素是多餘的或是不可能的。事實上CSS中有一個特性允許我們添加額外元素而不擾亂文檔本身,這就是“偽元素”。

n1

  你一定聽說過這個詞,尤其是當你一直關註著我們的教程。點此瀏覽原作者的其他文章

  事實上,的確有一些CSS家族的成員(CSS選擇器)被分類為偽元素比如::first-line, :first-letter, ::selection, :before and :after。但是,就本文而言,我們將把我們探討的範圍限制在:before 和 :after這兩個元素上。因此,本文中的“偽元素”將特指這兩個偽元素(:before 和 :after),我們將從基礎入手,來研究這個獨特的主題。

 關於語法和瀏覽器支持

  偽元素實際上在CSS1中就存在了,但是我們現在所討論的:before和:after則發佈於CSS2.1中。在最初,偽元素的語法是使用“:”(一個冒號),隨著web的發展,在CSS3中修訂後的偽元素使用“::”(兩個冒號),也就是::before 和 ::after—以區分偽元素和偽類(比如:hover,:active等)

syntax1

  然而,無論你使用單冒號還是雙冒號,瀏覽器都將能識別它們。由於IE8只支持單冒號的格式,安全起見如果你想要更廣泛的瀏覽器相容性那麼還是使用單冒號的格式吧!

 它是做什麼的

  簡而言之,偽元素將會在內容元素的前後插入額外的元素,因此當我們添加它們時,使用以下的標記方式,他們在技術上是平等的。

1 2 3 4 5 <p> <span>:before</span>  This the main content. <span>:after</span> </p>

  但是這些元素實際上並不在文檔中生成。它們將在外部可見,但是你將不會在文檔的源代碼中找到它們,因此,實際上它們是“虛假”的元素。

 使用偽元素

  使用偽元素是相對容易的,:before將會在內容之前“添加”一個元素而:after將會在內容後“添加”一個元素。在它們之中添加內容我們可以使用content屬性。

  舉例來說,下麵的代碼片段將在引用的之前和之後分別添加添加一個引號。

quotationmark 1(1)

 

1 2 3 4 5 6 blockquote:before {  content: open-quote; } blockquote:after {  content: close-quote; }

 偽元素樣式

  儘管作為“虛假”的元素,事實上偽元素表現上就像是“真正”的元素,我們能夠給它們添加任何樣式,比如改變它們的顏色、添加背景色、調整字體大小、調整它們中的文本等等。

styles4

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 blockquote:before {  content: open-quote;  font-size: 24pt;  text-align: center;  line-height: 42px;  color: #fff;  background: #ddd;  float: left;  position: relative;  top: 30px;   } blockquote:after {  content: close-quote;  font-size: 24pt;  text-align: center;  line-height: 42px;  color: #fff;  background: #ddd;  float: right;  position: relative;  bottom: 40px; }

 指定偽元素尺寸

  預設生成的元素是一個內聯元素,於是當我們想要指定它們的高度和寬度的是偶,我們首先不得不使用display: block把它們聲明為塊級元素。

  由於已經設置float,所以無需設置display:black。

dimension5

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 blockquote:before {  content: open-quote;  font-size: 24pt;  text-align: center;  line-height: 42px;  color: #fff;  background: #ddd;  float: left;  position: relative;  top: 30px;  border-radius: 25px;  height: 25px;  width: 25px; } blockquote:after {  content: close-quote;  font-size: 24pt;  text-align: center;  line-height: 42px;  color: #fff;  background: #ddd;  float: right;  position: relative;  bottom: 40px;  border-radius: 25px;  height: 25px;  width: 25px; }

 關聯背景圖像

  我們也可以替換用圖片替換內容而不是只有純文本。儘管content屬性提供了 url()來插入圖片, 但是在更多的實例中,我更傾向於使用背景(background)屬性從而更好的控製圖片。

image-background6

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 </pre> blockquote:before {  content: " ";  font-size: 24pt;  text-align: center;  line-height: 42px;  color: #fff;  float: left;  position: relative;  top: 30px;  border-radius: 25px;    background: url(images/quotationmark.png) -3px -3px #ddd;    display: block;  height: 25px;  width: 25px; } blockquote:after {  content: " ";  font-size: 24pt;  text-align: center;  line-height: 42px;  color: #fff;  float: right;  position: relative;  bottom: 40px;  border-radius: 25px;    background: url(images/quotationmark.png) -1px -32px #ddd;    display: block;  height: 25px;  width: 25px; }

  然而,正如你能夠從上面的代碼片段中看到的,我們仍舊聲明瞭content屬性,而且此時使用了空字元串。content屬性是必須的而且應該經常被應用。否則,偽元素無論如何都無法正常工作。

 結合偽類

  儘管有不同類型的偽X(偽元素、偽類),我們可以使用偽類連同偽元素一起放入一個CSS規則中,例如,如果我們希望當我們的滑鼠移到blockqoute上時,引號的背景色能夠略微變深。

hover7

1 2 3 blockquote:hover:after, blockquote:hover:before {  background-color: #555; }

 添加過渡效果

  我們甚至可以在偽元素上應用transition屬性來創建優美的顏色過渡效果。

1 2 3 4 transition: all 350ms; -o-transition: all 350ms; -moz-transition: all 350ms; -webkit-transition: all 350ms;

 更多的靈感

  為了激發你的靈感,我們已經選擇了三個很酷的例子,可以在web設計上給你很多主意。

  迷人的陰影

  在這個教程中 Paul Underwood 解釋瞭如何創建更加逼真和吸引人的陰影效果。

  使用 偽元素:before 和 :after 。它們兩個都是絕對定位,而且使用負z-index來放置到圖片後方實現陰影效果。

fascinating-shadows8

  3D按鈕

  這是一個非常聰明的實現,利用偽元素結合CSS3 box-shadow 來繪製一個令人吃驚的3D按鈕,僅僅使用了CSS和單一的錨文本。偽元素:before 被用來在按鈕的左側添加數字“1”。

3d-button9

  疊加圖像效果

  使用偽元素來僅僅依靠一個圖片標簽創建一個“凌亂的”疊加圖像效果也是可能的。偽元素用於建立一個圖片疊加的錯覺,通過使用z-index負值使“疊加”的圖片在真正的圖片後面來實現。

stacked-image10

 結論

  偽元素很酷同時也是可應用到實際工作中的,基本上,每一個我們所添加的元素都不會幹擾現有的HTML結構,而且偽元素可以做到 幾乎所有我們能想到的事情

  實際上有一些偽元素的改進工作,目前逐步進行,比如偽元素嵌套div::before::before { content: ”; }以及多重偽元素div::before(3) { content: ”; }。很顯然,在未來的web設計中,這些改進會讓我們的設計有更多的形式(更多的可能性)。然而,他們將會在最新的瀏覽器中得到支持,讓我們現在耐心的等待吧!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.memset #include <stdio.h> #include <string.h> int main() { //char *s="My Dream Come true";//用來初始化字元指針的字元串常量會被編譯器安排到只讀數據存儲區,是不可以修改的 char s[] ="My Dre
  • 參考老師的博客: 金角:http://www.cnblogs.com/alex3714/articles/5143440.html 銀角:http://www.cnblogs.com/wupeiqi/articles/4963027.html 一、常用函數說明: ★ lamba python lam
  • 一、什麼是裝飾模式 通過關聯機制給類增加行為,其行為的擴展由修飾對象來決定; 如JAVA IO流里的以下形式,BufferedReader為裝飾類,其關聯了一個具體對象(new FileReader(new File("test.txt"))),並對其進行裝飾,裝飾後擁有readLine行為(方法)
  • 2.15 max 2.15.1 語法: _.max(list, [iteratee], [context]) 2.15.2 說明: 返回list中的最小值。 list為集合,數組、對象、字元串或arguments iteratee作為返回最大值的依據 iteratee的參數(value, key,
  • 上一篇文章《聖杯佈局小結》總結了幾種常見的分欄佈局方法,這幾個方法都可以實現多欄頁面下,所有欄的高度可動態變化,某一欄寬度自適應的佈局效果,能滿足工作中大部分的佈局需求。後來我在搜集更多關於分欄佈局的文章時,發現了一個新的問題,這個問題在前面那篇文章中也有朋友在評論里跟我提起,就是如何在實現分欄佈局...
  • Geolocation(地理定位) 基本內容 地理定位 - 地球的經度和緯度的相交點 實現地理定位的方式 GPS - 美國的,依靠衛星定位 北斗定位 - 純國產,慣性定位技術和衛星定位 基站定位 - 移動運營商創建基站(提供信號源) 基於互聯網 - IP地址(PC端和移動端) 目前很多瀏覽器都具有定
  • 不到30行JS代碼實現的Excel表格,jQuery並非不可替代 某國外程式員展示了一個由原生JS寫成不依賴第三方庫的,Excel表格應用,有以下特性: 由不足30行的原生JavaScript代碼實現 不依賴第三方庫 Excel風格的語義分析 (公式以 "=" 開頭) 支持任意表達式 (=A1+B2
  • 0.前提 JavaScript對象的屬性分為兩種存在形態. 一種是存在實例中, 另一是存在原型對象中. 根據上述, 檢測屬性的時候會出現4種情況 既不存在實例中, 也不存在原型對象中 存在實例中, 不存在原型對象中 不存在實例中, 存在原型對象中 既存在實例中, 也存在原型對象中 1.hasOwnP
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...