自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

CSS 偽元素的一些罕見用例

開發(fā) 前端
偽元素已經(jīng)使用了很長時(shí)間。然而,我覺得有些用例并不是所有開發(fā)人員都完全了解的。我寫下這篇文章是為了闡明它們,以便它們能被更多地使用。

本文轉(zhuǎn)載自微信公眾號「大遷世界」,轉(zhuǎn)載本文請聯(lián)系大遷世界公眾號。

偽元素已經(jīng)使用了很長時(shí)間。然而,我覺得有些用例并不是所有開發(fā)人員都完全了解的。我寫下這篇文章是為了闡明它們,以便它們能被更多地使用。

父子元素懸停特效

由于偽元素屬于其父元素,因此存在一些不尋常的用例?,F(xiàn)在,讓我們看一個(gè)簡單的示例。

這個(gè)設(shè)計(jì)有一個(gè) section title,在它的左邊有一個(gè)小圓圈。當(dāng)我們將鼠標(biāo)懸停在section title上時(shí),圓圈會(huì)變大。

  1. .section-title:before { 
  2.     content: ""; 
  3.     width: 20px; 
  4.     height: 20px; 
  5.     background: blue; 
  6.     /* Other styles */ 
  7.  
  8. .section-title:hover:before { 
  9.     transform: scale(1.2); 

簡單明了,接著我們將此概念延伸到更有用的用例。

項(xiàng)目/博客組

在我的網(wǎng)站上,有一個(gè)部分需要列出了所有的項(xiàng)目名稱。我想為每個(gè)項(xiàng)目添加一個(gè)縮略圖,但這對我來說并不是最重要的事情。對我來說,更重要的是鏈接本身。不久前,我在[Ethan Marcotte][1]網(wǎng)站上首次看到了這種效果。

上面的設(shè)計(jì)模型展示了我想要應(yīng)用的想法。段落中的每個(gè)彩色鏈接都有一個(gè)與之配對的偽元素。

「HTML」

  1. <section class="hero"> 
  2.     <p>Hello, my name is Ahmad. I’m a UX Designer and Front End Developer that enjoys the intersection between design and code. I write on <a href="www.ishadeed.com" class="link-1">ishadeed.com</a> and <a href="www.a11ymatters.com" class="link-2">a11ymatters.com</a> on CSS, UX Design and Web Accessibility.</p> 
  3. </section> 

1.向 hero 元素添加 padding

我想為偽元素保留空間,所以添加padding是一個(gè)解決方案。

2. 對偽元素進(jìn)行絕對定位

為了絕對定位它們,我需要定義哪個(gè)父類是相對的父類。它應(yīng)該被添加到hero中 。

注意以下GIF中的位置:.hero部分中的position: relative是如何影響偽元素的。

3. 添加偽元素

最后一步是添加偽元素及其懸停效果:

  1. .link-1 { 
  2.   color: #854FBB; 
  3.  
  4. @media (min-width: 700px) { 
  5.   .link-1:after { 
  6.     content: ""; 
  7.     position: absolute; 
  8.     right: 0; 
  9.     top: 20px; 
  10.     width: 150px; 
  11.     height: 100px; 
  12.     background: currentColor; 
  13.     opacity: 0.85; 
  14.     transition: 0.3s ease-out; 
  15.   } 
  16.  
  17.   .link-1:hover { 
  18.     text-decoration: underline; 
  19.   } 
  20.  
  21.   .link-1:hover:after { 
  22.     transform: scale(1.2); 
  23.     opacity: 1; 
  24.   } 

注意,我使用了currentColor作為偽元素背景色。如果你不知道這個(gè)關(guān)鍵字,它表示繼承其父元素的color值。所以在任何時(shí)候,我想要改變鏈接的顏色,只改變一次是很容易的。

事例源碼:https://codepen.io/shadeed/pen/66e9c2039b50463d96a2a9832f05ec0f

增加可點(diǎn)擊區(qū)域的大小

通過向鏈接添加一個(gè)偽元素,鏈接周圍的可點(diǎn)擊區(qū)域?qū)⒆兊酶?。這是非常有用的,將增強(qiáng)用戶的體驗(yàn)。我們舉個(gè)例子:

此外,它還可以用于擴(kuò)展卡片組件的可點(diǎn)擊區(qū)域,該組件具有查看更多鏈接的功能。請注意,文章的內(nèi)容(如標(biāo)題和圖像)將位于偽元素之上,因此它不會(huì)影響文本的選擇或圖像的保存。

疊加層

假設(shè)有一個(gè)帶有背景圖像的元素,并且設(shè)計(jì)中有一個(gè)漸變疊加層,并且混合模式設(shè)置為color,偽元素可以幫到你。

  1. .hero { 
  2.   position: relative; 
  3.   height: 300px; 
  4.   background: url("image.jpg") center/cover; 
  5.  
  6. .hero:after { 
  7.   content: ""; 
  8.   position: absolute; 
  9.   left: 0; 
  10.   top: 0; 
  11.   width: 100%; 
  12.   height: 100%; 
  13.   background-image: linear-gradient(180deg, #851717 0%, #30328C 100%); 
  14.   mix-blend-mode: color; 

事例源碼:https://codepen.io/shadeed/pen/627c62e16dfa49021960cdc74ce459ba

包裹的陰影

過去,我曾經(jīng)創(chuàng)建過一個(gè)在邊緣傾斜的陰影。它有一點(diǎn)微妙的效果。你猜怎么了!可以使用偽元素來實(shí)現(xiàn)它們。

1. 創(chuàng)建元素

使用以下常規(guī)樣式創(chuàng)建了一個(gè)div元素。

  1. .elem { 
  2.      position: relative; 
  3.      display: flex; 
  4.      align-items: center; 
  5.      max-width: 400px; 
  6.      background: #fff; 
  7.      padding: 2rem 1rem; 
  8.      font-size: 1.5rem; 
  9.      margin: 2rem auto; 
  10.      text-align: center; 
  11.      box-sizing: border-box; 

2. 添加偽元素

然后,我為每個(gè)元素添加了:before和:after偽元素,其寬度為50%(為了更好的演示,我為每個(gè)元素添加了不同的背景)

  1. .elem:before, 
  2. .elem:after { 
  3.     content: ""; 
  4.     position: absolute; 
  5.     top: 2px; 
  6.     width: 50%; 
  7.     height: 100%; 
  8.  
  9. .elem:before { 
  10.     left: 0; 
  11.     background: grey; 
  12.  
  13. .elem:after { 
  14.     right: 0; 
  15.     background: #000; 

接下來,添加transform: skew(x),其中X為2度。對于其中之一,X應(yīng)該為負(fù)數(shù)以實(shí)現(xiàn)所需的效果。

c4a1.png" target="_blank">c4a1.png" width="auto" border="0" height="auto" alt="" title="">

接下來,我將向每個(gè)偽元素添加z-index:-1,以將其移到其父元素的后面。

完成后,執(zhí)行以下操作:

  • 添加filter: blur
  • 降低透明度
  • 添加了從透明到黑色的漸變(以隱藏其父級頂部中心的偽元素邊緣)

3. 最后代碼

  1. .elem { 
  2.   position: relative; 
  3.   display: flex; 
  4.   align-items: center; 
  5.   max-width: 400px; 
  6.   background: #fff; 
  7.   padding: 2rem 1rem; 
  8.   font-size: 1.5rem; 
  9.   margin: 2rem auto; 
  10.   text-align: center; 
  11.   box-sizing: border-box; 
  12.  
  13. .elem:before, 
  14. .elem:after { 
  15.     content: ""; 
  16.     position: absolute; 
  17.     top: 3px; 
  18.     width: 50%; 
  19.     height: 100%; 
  20.     z-index: -1; 
  21.     background: linear-gradient(to bottom, transparent, #000); 
  22.     filter: blur(3px); 
  23.     opacity: 0.3; 
  24.  
  25. .elem:before { 
  26.     left: 0; 
  27.     transform: skewY(-2deg); 
  28.  
  29. .elem:after { 
  30.     right: 0; 
  31.     transform: skewY(2deg); 

還有另一種選擇,即在偽元素:before和:after之間交換skewY值。

事例源碼:https://codepen.io/shadeed/pen/be104604ada76a7fa854bffca1d6b806

:after VS :before

在最近的Twitter討論中,我了解到最好使用:before而不是:after。為什么?因?yàn)樵谑褂?after時(shí),可能需要我們向其他嵌套元素添加z-index,以便偽元素不會(huì)與它們重疊。我們舉一個(gè)真實(shí)的例子。

這是一張由縮略圖和標(biāo)題組成的簡單卡片。注意到,在文本下方會(huì)有一個(gè)漸變疊加層,以使文本更清晰,以防縮略圖顏色太淺。

c4da7cfddea045b3b20947a448bab.png" target="_blank">c4da7cfddea045b3b20947a448bab.png" width="auto" border="0" height="auto" alt="" title="">

  1. <article class="card"> 
  2.   <img src="article.jpg" alt=""> 
  3.   <h2>Title here</h2> 
  4. </article> 

要在文本下方添加漸變疊加層,我將需要使用偽元素。你會(huì)選擇哪一個(gè)?:before或:after?我們來研究看看。

1. after 元素

在這種情況下,標(biāo)題將顯示在偽元素疊加圖的下方,如下所示:

解決方案是在卡片標(biāo)題中添加z-index。即使這是一個(gè)簡單快速的解決方案,也不是正確的做法。

  1. .card-title { 
  2.     /*Other styles*/ 
  3.     z-index: 1; 

2. before 元素

使用:before元素時(shí),默認(rèn)情況下可以使用!無需在卡片標(biāo)題中添加z-index。原因是,使用:before時(shí),該元素不會(huì)出現(xiàn)在其他同級項(xiàng)的上方,而當(dāng)元素為:after時(shí),它將出現(xiàn)在其他同級項(xiàng)之上。

事例源碼:https://codepen.io/shadeed/pen/0032e918818efe33b9016434a98bf6ff

基于文件擴(kuò)展名的鏈接樣式

例如,如果有一個(gè)包含PDF文件的鏈接,則可以添加PDF圖標(biāo),以使其對用戶更清晰。

面是如何顯示鏈接的PDF圖標(biāo)的示例

「HTML」

  1. <p><a href="example.pdf">Download PDF</a></p> 
  2. <p><a href="example.doc">Download Doc</a></p> 

「CSS」

  1. a[href$=".pdf"]:before { 
  2.   content: ""; 
  3.   display: inline-block; 
  4.   vertical-align: middle; 
  5.   margin-right: 8px; 
  6.   width: 18px; 
  7.   height: 18px; 
  8.   background: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/182774/np_pdf_377198_000000.svg) center/20px no-repeat; 
  9.   padding: 3px; 

事例源碼:https://codepen.io/shadeed/pen/24ecff4a6e9269d1ee526ec692151af4

分隔線

在此示例中,存在帶有“or”的分隔符。在每一側(cè)都有一條線。使用偽元素和 Flexbox 可以做到這一點(diǎn)。

「HTML」

  1. <p>Or</p> 

「CSS」

  1. p { 
  2.   display: flex; 
  3.   align-items: center; 
  4.  
  5. p:before, p:after { 
  6.   content: ""; 
  7.   height: 2px; 
  8.   background: #c5c5c5; 
  9.   flex-grow: 1; 
  10.  
  11. p:before { 
  12.   margin-right: 10px; 
  13.  
  14. p:after { 
  15.   margin-left: 10px; 

事例源碼:https://codepen.io/shadeed/pen/314cc43ddbd4ac384f02551d8907a323

 

責(zé)任編輯:趙寧寧 來源: 大遷世界
相關(guān)推薦

2016-10-19 14:54:46

css選擇器css3css

2011-06-02 10:04:53

CSS

2020-08-18 08:08:59

CSS偽元素偽類

2023-10-11 07:33:39

Z-indexCSS

2010-09-06 12:32:10

CSS偽元素

2012-04-23 14:04:56

CSS網(wǎng)站

2017-05-10 15:30:30

skynet崩潰程序

2010-09-07 10:39:59

CSS偽元素

2021-04-25 09:30:52

開發(fā)CSS 瀏覽器

2022-10-19 12:00:32

CSS 偽類偽元素

2015-10-12 08:59:57

異步代碼測試

2011-06-16 16:39:14

CSS

2023-08-14 15:56:52

CSS 偽元素開發(fā)

2023-05-22 15:37:31

CSS元素JavaScript

2018-01-09 18:06:41

Python爬蟲技巧

2020-08-26 08:54:17

CSSFont Size屬性

2020-12-18 08:09:53

CSS偽元素基礎(chǔ)

2018-02-23 13:25:49

LinuxVim編輯器

2020-04-21 11:08:06

CSS設(shè)計(jì)排版

2009-06-18 14:54:52

Spring AOP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號