成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

CSS 進階之熟悉又陌生的 Content

開發(fā) 前端
content 屬性用于與 :before 及 :after 偽元素配合使用,來插入生成內(nèi)容。使用 content 屬性插入的內(nèi)容都是匿名的可替換元素。首先我們先了解下什么是可替換元素呢?

[[412960]]

本文轉(zhuǎn)載自微信公眾號「微醫(yī)大前端技術(shù)」,作者陳晨。轉(zhuǎn)載本文請聯(lián)系微醫(yī)大前端技術(shù)公眾號。

前言

在開發(fā)中遇到類似清除浮動、小圖標、替換內(nèi)容等場景時不可避免會遇到 content 屬性,一般就是百度下解決方案,甚少細究到底,在看《CSS 世界》這本書時看了下 content 章節(jié),今天這里就詳細介紹下 content 的使用機制。

content 屬性用于與 :before 及 :after 偽元素配合使用,來插入生成內(nèi)容。使用 content 屬性插入的內(nèi)容都是匿名的可替換元素。首先我們先了解下什么是可替換元素呢?

替換元素

首先看下圖片加載:

  1. <img src="1.jpg"
  2. <!--替換--> 
  3. <img src="2.jpg"

修改了 img 的 src 屬性,導致顯示的圖片發(fā)生了變化。這種通過修改某個屬性值呈現(xiàn)的內(nèi)容就可以被替換的元素就稱為“替換元素”。

典型的替換元素:<img>、<video>、<iframe>、<textarea> 和 <input>。

替換元素的尺寸計算規(guī)則

替換元素的尺寸計算規(guī)則有三種尺寸:

  • 固有尺寸:替換內(nèi)容原本的尺寸
  • HTML 尺寸:HTML 原生屬性 width 和 height
  • CSS 尺寸:通過 CSS 設(shè)置的寬高屬性

下面我們以 img 為例:

  1. <img src="../assets/test1.jpeg"
  2. <img width="300" height="200" class="img-test" src="../assets/test1.jpeg"
  3. <img class="img-box" width="300" height="200" src="../assets/test1.jpeg"
  4.  
  5. .img-box { 
  6.   height: 100px; 
  7.   width: 200px; 

效果如下:

圖片第一張圖:默認顯示原圖尺寸 267 * 200;

第二張圖:設(shè)置了 HTML 尺寸 width 和 height,顯示圖片 300 * 200;

第三張圖:設(shè)置了 CSS 尺寸 200 * 100。

由此可見尺寸顯示規(guī)則優(yōu)先級為 CSS 尺寸 > HTML 尺寸 > 固有尺寸。

替換元素和 content 是什么關(guān)系呢?

替換元素之所以為替換元素,就是因為其內(nèi)容可替換,即盒模型中的 content box 可替換。CSS 的 content 屬性就用于替換內(nèi)容,也可以說,content 屬性決定了是替換元素還是非替換元素。代碼如下:

  1. <img width="300" height="200" class="img-test" src="../assets/test1.jpeg"
  2.  
  3. .img-test:hover { 
  4.  content: url('../assets/test2.jpg'); 

效果如下:

此時鼠標懸浮的時候圖片為 ’../assets/test2.jpg‘,使用 content 屬性替換了 img 的 content box。

需要注意的是 content 屬性改變的僅僅是視覺呈現(xiàn),當我們以右鍵或其他形式保存這張圖片的時候,所保存的還是原來 src 對應(yīng)的圖片。

content 的使用場景

content 的定義中就提到過是和 :before 及 :after 偽元素配合使用。:before 及 :after 是最常見的偽元素,想必大家都不陌生。

再簡單介紹下 :before 和 :after:

默認 display: inline;

必須設(shè)置 content 屬性,否則無效;

默認 user-select: none,即 :before 和 :after 的內(nèi)容無法被用戶選中;

不可通過 dom 使用,就是本身不存在的頁面元素,HTML 源代碼里,找不到它們,但從視覺上,卻能看到它們的存在。

下面我們看一下主要使用場景:

插入字符

使用 content 插入字符一般是給空元素設(shè)置默認值,類似 input 的 placeholder 屬性一樣,只在元素沒有內(nèi)容的時候展示,代碼如下:

  1. <p>有內(nèi)容的段落</p> 
  2. <p></p> 
  3.  
  4. <!--:empty 是一個 CSS 選擇器,當元素里面無內(nèi)容的時候進行匹配--> 
  5. p:empty::before { 
  6.   content: '空元素內(nèi)容'
  7.   color: red; 

效果如下:

輔助元素生成

此時核心點不在于 content 生成的內(nèi)容,而是偽元素本身。通常我們會把 content 的屬性值設(shè)置為空字符串,使用其他 CSS 代碼來生成輔助元素,或?qū)崿F(xiàn)圖形效果,或?qū)崿F(xiàn)特定布局。

圖形效果

使用 ::after 偽元素插入匿名替換元素,設(shè)置 content 為空,此元素沒有內(nèi)容,通過 CSS 樣式來達到想要的圖形效果。代碼如下:

  1. <div class="content-box"></div> 
  2.  
  3. .content-box { 
  4.   height: 100px; 
  5.   width: 200px; 
  6.   border-radius: 10px; 
  7.   position: relative
  8.   background: #fff; 
  9. .content-box::after { 
  10.   content: ''
  11.   position: absolute
  12.   top: 100%; 
  13.   right: 16px; 
  14.   width: 4px; 
  15.   height: 16px; 
  16.   border-width: 0; 
  17.   border-right: 12px solid #fff; 
  18.   border-radius: 0 0 32px 0; 

效果如下:

清除浮動

清除浮動主要是為了解決,父元素因為子級元素浮動引起的內(nèi)部高度為 0 的問題,代碼如下:

  1. <div class="info-box clear"
  2.   <div class="left">左</div> 
  3.   <div class="right">右</div> 
  4. </div> 
  5.  
  6. .clear::after { 
  7.  content: ''
  8.  display: block; 
  9.  clear: both; 

上面三者缺一不可:

  • content: '':通過 ::after 給元素添加一個空的偽元素。
  • clear: both:清除浮動,使得元素周圍兩邊都不浮動。
  • display: block:clear 只對塊級元素生效。

通過添加元素清除浮動,觸動 BFC,使元素的高能夠自適應(yīng)子盒子的高。

圖片生成

直接用 url 功能符顯示圖片,既可以在文字前后添加圖片,又可以直接替換文字。

圖片直接替換文字,代碼如下:

  1. <p class="img-test">文字</p> 
  2.  
  3. .img-test { 
  4.   display: block; 
  5.   height: 20px; 
  6.   width: 20px; 
  7.   border-radius: 100%; 
  8.   content: url('../assets/test2.jpg'); 

文字前后添加圖片,代碼如下:

  1. <!--方案一 --> 
  2. .img-test::after { 
  3.   content: url('../assets/test2.jpg'); 
  4.  
  5. <!--方案二 --> 
  6. .img-test::after { 
  7.   content: ''
  8.   display: block; 
  9.   height: 20px; 
  10.   width: 20px; 
  11.   background: url('../assets/test2.jpg'); 

方案一中偽元素通過 content 設(shè)置圖片,圖片的尺寸不好控制,顯示圖片為原尺寸,比較模糊,一般使用方案二背景圖片的方式,可以按需設(shè)置尺寸。

attr 屬性值內(nèi)容生成

使用 attr 獲取元素屬性值達到效果,一般用于獲取 a 標簽的連接,代碼如下:

  1. <a class="baidu-link" href="https://baidu.com"> 百度一下,你就知道!</a> 
  2.  
  3. .baidu-link::after { 
  4.   content: " (" attr(href) ") " 

效果如下:

字符內(nèi)容生成

content 字符內(nèi)容生成就是直接寫入字符內(nèi)容,中英文都可以,比較常見的應(yīng)用就是配合 @font-face 規(guī)則實現(xiàn)圖標字體效果。

@font-face 規(guī)則

@font-face 規(guī)則指定一個用于顯示文本的自定義字體;字體能從遠程服務(wù)器或者用戶本地安裝的字體加載。它的屬性和字體相似,如下:

字體描述符 描述
font-family 必需:所指定的字體名字將會被用于 font 或 font-family 屬性
src 必需:遠程字體文件位置的 url 或者用戶計算機上的字體名稱
font-style 對于 src 所指字體的樣式
font-weight 字體粗細
font-stretch 定義應(yīng)如何拉伸字體
unicode-range 該字體支持 Unicode 字符的范圍

使用 @font-face 規(guī)則的代碼如下:

  1. <!--format 屬性是幫助瀏覽器識別字體的--> 
  2. @font-face {font-family: "iconfont"
  3.   src: url('iconfont.eot'); /* IE9*/ 
  4.   src: url('iconfont.eot#iefix') format('embedded-opentype'), /* IE6-IE8 */ 
  5.   url('iconfont.woff') format('woff'), /* chrome, firefox */ 
  6.   url('iconfont.ttf') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 
  7.   url('iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */ 
  8.  
  9. <!--html--> 
  10. <div class="look-more">查看更多</div> 
  11.  
  12. <!--css--> 
  13. .look-more { 
  14.   font-size: 14px; 
  15.   &::after { 
  16.     font-size: 14px; 
  17.     font-family: 'iconfont'
  18.     content: '\e6a7'
  19.   } 

效果如下:

如上圖,“查看更多”后面的箭頭就是上面定義的字體圖標。

當然 @font-face 也有不可避免的兼容性問題,可根據(jù)需要使用此規(guī)則,支持度如下圖:

計數(shù)器

content 的計數(shù)器是使用 CSS 代碼實現(xiàn)隨著元素數(shù)目增多,數(shù)值也跟著變大的效果。功能非常強大、實用,且不具有可替代性。

計數(shù)器包含兩個屬性和一個方法:

counter-reset:“計數(shù)器-重置”的意思,主要作用就是給計數(shù)器起個名字。也告訴從哪個數(shù)字開始計數(shù),默認值是 0,值可以為負數(shù)。

  1. <!--計數(shù)器名字為 counter,默認值為 0--> 
  2. .count-test { counter-reset: counter; } 
  3.  
  4. <!--計數(shù)器名字為 counter,初始計數(shù)為 2--> 
  5. .count-test { counter-reset: counter 2; } 
  6.  
  7. <!--多個計數(shù)器同時命名,使用空格分隔--> 
  8. .count-test { counter-reset: counter 2 counterpre -1; } 

counterincrement:“計數(shù)器遞增”的意思,值為 counter-reset 的 1 個或多個關(guān)鍵字,后面可以跟隨數(shù)字,表示每次計數(shù)的變化值,默認變化值為 1,值可以為負數(shù)。

  1. <!--counter 計數(shù)器默認遞增 1--> 
  2. counter-increment: counter; 
  3.  
  4. <!--counter 計數(shù)器遞增 2--> 
  5. counter-increment: counter 2; 
  6.  
  7. <!--counter 計數(shù)器遞增 2,counterpre 計數(shù)器遞減 -1--> 
  8. counter-increment: counter 2 counterpre -1; 

“普照規(guī)則”:普照源(counter-reset)唯一,每普照(counter-increment)一次,普照源增加一次計數(shù)值。

  1. <p class="counter"></p> 
  2.  
  3. <!--counter-increment 普照源 <p> 標簽,初始值為 2,counter-reset 值增加,默認遞增 1,最終顯示為 3--> 
  4. .counter { 
  5.  counter-reset: counter 2; 
  6.  counter-increment: counter; 
  7. .counter:before { 
  8.  content: counter(counter); 
  9.  
  10. <!-- counter-increment 直接設(shè)置在偽元素上普照自身,和上述一樣顯示 3--> 
  11. .counter { 
  12.  counter-reset: counter 2; 
  13. .counter:before { 
  14.  counter-increment: counter; 
  15.  content: counter(counter); 
  16.  
  17. <!--父元素和子元素都被 counter-increment 普照 1 次,遞增了兩次,最終顯示為 4--> 
  18. .counter { 
  19.  counter-reset: counter 2; 
  20.  counter-increment: counter; 
  21. .counter:before { 
  22.  counter-increment: counter; 
  23.  content: counter(counter); 

counter()/counters():都是計數(shù)方法,顯示計數(shù),counters 用于嵌套計數(shù)。

  1. <!--name 就是 counter-reset 的名稱--> 
  2. counter(name
  3.  
  4. <!--style 值就是 list-style-type 支持的那些值,可以是英文等--> 
  5. counter(name, style) 
  6.  
  7. <!--string 參數(shù)為字符串(需要引號包圍的,是必需參數(shù)),表示子序號的連接字符串。例如,1.1 的 string 就是'.',1-1 就是'-'--> 
  8. counters(name, string) 
  9.  
  10. counters(name, string, style) 

一般用于類似目錄以及規(guī)律變化的計數(shù),下面以層級目錄為例,代碼如下:

  1. <div class="reset"
  2.     <div class="counter">替換元素 
  3.         <div class="reset"
  4.             <div class="counter">替換元素的尺寸計算規(guī)則</div> 
  5.             <div class="counter">替換元素和 content 是什么關(guān)系呢?</div> 
  6.         </div> 
  7.     </div> 
  8.     <div class="counter">content 的使用場景 
  9.         <div class="reset"
  10.             <div class="counter">插入字符</div> 
  11.             <div class="counter">輔助元素生成</div> 
  12.             <div class="counter">圖片生成</div> 
  13.             <div class="counter">attr 屬性值內(nèi)容生成</div> 
  14.             <div class="counter">字符內(nèi)容生成</div> 
  15.             <div class="counter">計數(shù)器</div> 
  16.         </div> 
  17.     </div> 
  18. </div> 
  19.  
  20. .reset { 
  21.   counter-reset: counter; 
  22. .counter:before { 
  23.   content: counters(counter, '.''. '
  24.   counter-increment: counter; 
  • counter 默認值為 0,默認遞增為  1;
  • 第一個 reset 下面有兩個兄弟 conter 標簽,遞增則為 1 和 2;
  • 第一個 counter 下面有 reset 標簽,嵌套了一層重置計數(shù),則有 1.1、1.2 等;
  • 同理第二個 counter 下面有 2.1、2.2 等。

效果如下:

總結(jié)

了解 CSS 的 content 屬性,布局有了更多的可能性,有助于日常開發(fā)中根據(jù)需要使用一些布局小技巧,使布局簡潔明了。

參考資料

https://developer.mozilla.org/zh-CN/

https://css-tricks.com/pseudo-element-roundup/

 

責任編輯:武曉燕 來源: 微醫(yī)大前端技術(shù)
相關(guān)推薦

2022-02-09 07:40:42

JavaScript前端面試題

2024-03-15 08:18:25

volatileAtomic關(guān)鍵字

2019-07-19 15:21:00

SQL編程語言NOSQL

2018-03-07 09:42:07

2022-03-27 20:37:42

系統(tǒng)抽象語言

2009-06-24 16:27:09

路由器定義集成服務(wù)路由

2012-11-02 17:03:45

2020-06-30 20:26:10

微信功能移動應(yīng)用

2022-06-24 08:01:07

CSScontent元素

2011-04-29 12:54:05

筆記本屏幕

2023-07-18 19:11:21

配置信令系統(tǒng)

2025-02-10 00:00:25

內(nèi)存管理開發(fā)

2018-03-22 09:51:48

CAN網(wǎng)絡(luò)協(xié)議

2022-02-22 09:16:41

AndroidWindows狀態(tài)欄

2017-07-11 15:00:04

前端CSS3D視角

2021-06-18 05:59:37

Css前端CSS 特效

2009-06-30 16:46:45

Criteria進階查

2022-03-01 09:01:56

SwiftUI動畫進階Canvas

2022-03-09 09:00:41

SwiftUI視圖生成器Swift

2022-09-26 13:42:41

腳本B站視頻
點贊
收藏

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

主站蜘蛛池模板: 国产精品看片 | 欧美大片一区 | 毛片网站在线观看视频 | av在线免费观看网站 | 成年人免费在线视频 | 国产精品视频一二三区 | 国产欧美精品区一区二区三区 | 一区二区视频在线 | 精品一区二区久久久久久久网站 | 中文字幕在线电影观看 | 成人天堂噜噜噜 | 一区在线播放 | 亚洲高清视频一区二区 | 韩国成人在线视频 | 午夜小视频在线播放 | 色站综合 | 黄色小视频大全 | 日韩综合在线 | 蜜臀网 | 欧美性久久 | 久久久国产一区二区三区 | 午夜资源| 国产在线一区二区三区 | 免费观看日韩精品 | 亚洲精品视频在线 | 亚洲精品免费在线观看 | 91精品一区二区三区久久久久久 | 自拍亚洲| 欧美一二三 | 亚洲精品一区二区三区在线 | 日韩欧美在线视频播放 | 九九视频在线观看视频6 | 免费a网 | 成人在线视频免费观看 | 男女羞羞视频在线看 | 免费v片在线观看 | 中文字幕免费观看 | 欧美性网站 | av激情在线 | 国产人成精品一区二区三 | 国产精品毛片一区二区在线看 |