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

CSS實現(xiàn)自適應(yīng)分隔線的N種方法

開發(fā) 前端
偷偷的看了一下知乎的實現(xiàn),很顯然是用一塊白色背景覆蓋的,加一點背景就露餡了,下面列舉幾種更好的實現(xiàn)方式,不會露餡的那種。

[[315751]]

分割線是網(wǎng)頁中比較常見的一類設(shè)計了,比如說知乎的更多回答

這里的自適應(yīng)是指兩邊的橫線會隨著文字的個數(shù)和父級的寬度自適應(yīng)

偷偷的看了一下知乎的實現(xiàn),很顯然是用一塊白色背景覆蓋的,加一點背景就露餡了

心想:知乎的前端也不怎么樣? 可能別人的重點不在這些上面吧

下面列舉幾種更好的實現(xiàn)方式,不會露餡的那種

1.偽元素+transform:translateX(-100%);

主要原理是設(shè)置文本居中text-align: center;,然后給定兩個偽元素,分別絕對定位,那么此時偽元素也是跟隨著水平居中的,設(shè)置足夠的寬度,然后把左邊的往左位移100%就可以了,父級記得超出隱藏。

具體實現(xiàn)如下

html結(jié)構(gòu)為 

  1. <div class="title">我是分割線</div> 

css樣式為 

  1. .title{  
  2.     position: relative;  
  3.     text-align: center;  
  4.     overflow: hidden;  
  5.     font-size: 14px;  
  6.     color: #999;  
  7.  
  8. .title::before,.title::after{  
  9.     content: '';  
  10.     display: inline-block;  
  11.     width: 100%;  
  12.     height: 1px;  
  13.     position: absolute;  
  14.     background: #ccc;  
  15.     top: 50%;  
  16.  
  17. .title::before{  
  18.     margin-left: -10px;  
  19.     transform: translateX(-100%);  
  20.  
  21. .title::after{  
  22.     margin-left: 10px;  

CSS分隔線 (偽元素+transform)

2.偽元素+flex

這個比較好理解了,設(shè)置display:flex,然后兩個偽元素分別鋪滿剩余空間。

具體實現(xiàn)如下

html結(jié)構(gòu)為 

  1. <div class="title">我是分割線</div> 

css樣式為 

  1. .title{  
  2.     display: flex;  
  3.     align-items: center;  
  4.     font-size: 14px;  
  5.     color: #999;  
  6.  
  7. .title::before,.title::after{  
  8.     content: '';  
  9.     flex: 1;  
  10.     height: 1px;  
  11.     background: #ccc;  
  12.  
  13. .title::before{  
  14.     margin-right: 10px; 
  15.  
  16. .title::after{  
  17.     margin-left: 10px;  

CSS分隔線 (偽元素+flex)

3.偽元素+box-shadow/outline+clip-path

同樣利用text-align: center使文本和偽元素居中,然后生成足夠大的box-shadow或者outline,由于不支持單個方向,所以用clip-path或者clip裁剪掉

具體實現(xiàn)如下

html結(jié)構(gòu)為 

  1. <div class="title">我是分割線</div> 

css樣式為 

  1. .title{  
  2.     text-align: center;  
  3.     font-size: 14px;  
  4.     color: #999;  
  5.     overflow: hidden;  
  6.  
  7. .title::before,.title::after{  
  8.     content: '';  
  9.     display: inline-block;  
  10.     width: 0;  
  11.     height: 1px;  
  12.     box-shadow: 0 0 0 9999px #ccc;  
  13.     vertical-align: middle;  
  14.  
  15. .title::before{  
  16.     margin-right: 10px;  
  17.     clip-path: polygon(0 0, -9999px 0, -9999px 100%, 0 100%);  
  18.  
  19. .title::after{  
  20.     margin-left: 10px;  
  21.     clip-path: polygon(0 0, 9999px 0, 9999px 100%, 0 100%);  

CSS分隔線 (偽元素+box-shadow/outline+clip-path)

4.偽元素+right:100%

這個實現(xiàn)需要多一層標簽,外部仍然是text-align: center,內(nèi)部文本里添加兩個偽元素絕對定位,其中左邊的設(shè)置距離右邊100%(相對于文本標簽)即可

具體實現(xiàn)如下

html結(jié)構(gòu)為 

  1. <div class="title">  
  2.     <span class="inner">我是分割線</span>  
  3. </div> 

css樣式為 

  1. .title{  
  2.     text-align: center;  
  3.     font-size: 14px;  
  4.     color: #999;  
  5.     overflow: hidden;  
  6.  
  7. .inner{  
  8.     position: relative;  
  9.  
  10. .inner::before,.inner::after{  
  11.     position: absolute;  
  12.     content: '';  
  13.     width: 9999px;  
  14.     height: 1px;  
  15.     background: #ccc;  
  16.     top: 50%;  
  17.  
  18. .inner::before{  
  19.     right: 100%;  
  20.     margin-right: 10px;  
  21.  
  22. .inner::after{  
  23.     margin-left: 10px;  

CSS分隔線 (偽元素+right:100%)

5. border+transform

這個思路可以不用到偽元素,不過需要額外的標簽,給內(nèi)部文本左右足夠大的1px邊框,此時需要設(shè)置line-height:1px,由于內(nèi)部整體以及足夠大了(超過父級),可以使用絕對定位和transform: translateX(-50%)居中

具體實現(xiàn)如下

html結(jié)構(gòu)為 

  1. <div class="title">  
  2.     <span class="inner">我是分割線</span>  
  3. </div> 

css樣式為 

  1. .title{  
  2.     position: relative;  
  3.     text-align: center;  
  4.     font-size: 14px;  
  5.     color: #999;  
  6.     overflow: hidden;  
  7.     padding: .6em 0;/**把高度撐起來**/  
  8.  
  9. .inner{  
  10.     position: absolute;  
  11.     left: 50%;  
  12.     transform: translateX(-50%);  
  13.     white-space: nowrap;  
  14.     line-height: 1px;  
  15.     border-left: 9999px solid #ccc;  
  16.     border-right: 9999px solid #ccc;  
  17.     padding: 0 10px;  

CSS分隔線 (border+transform)

6.偽元素+border+left/right

這個思路只需要一個偽元素,在文本內(nèi)部生成一個偽元素,利用足夠大的border和相同的負值(絕對定位+left/right)還原位置

具體實現(xiàn)如下

html結(jié)構(gòu)為 

  1. <div class="title">  
  2.     <span class="inner">我是分割線</span>  
  3. </div> 

css樣式為 

  1. .title{  
  2.     text-align: center;  
  3.     font-size: 14px;  
  4.     color: #999;  
  5.     overflow: hidden;  
  6.  
  7. .inner{  
  8.     position: relative;  
  9.     padding: 0 10px;  
  10.  
  11. .inner::before{  
  12.     content: '';  
  13.     position: absolute;  
  14.     height: 1px;  
  15.     top: 50%;  
  16.     border-left: 9999px solid #ccc;  
  17.     border-right: 9999px solid #ccc;  
  18.     right: -9999px;  
  19.     left: -9999px;  

CSS分隔線 (偽元素+border+left/right)

7.偽元素+table-cell

主要思路為父級設(shè)置display:table,偽元素設(shè)置display:table-cell,并設(shè)置足夠大的寬度即可

具體實現(xiàn)如下

html結(jié)構(gòu)為 

  1. <div class="title">  
  2.     <span class="inner">我是分割線</span>  
  3. </div> 

css樣式為 

  1. .title{  
  2.     display: table;  
  3.     font-size: 14px;  
  4.     color: #999;  
  5.  
  6. .inner{  
  7.     display: table-cell;  
  8.     white-space: nowrap;  
  9.     padding: 0 10px;  
  10.  
  11. .title::before,.title::after{  
  12.     content: '';  
  13.     display: table-cell;  
  14.     width: 9999px;  
  15.     overflow: hidden;  
  16.     background: linear-gradient(#ccc 0,#ccc) center no-repeat;/**這里用線性漸變生成的,也可以用其他方式**/  
  17.     background-size: 100% 1px;  

CSS分隔線 (偽元素+table-cell)

8.fieldset+legend

利用fieldset和legend標簽組合,可以天然實現(xiàn)分隔線效果,參考至張鑫旭的這篇文章

具體實現(xiàn)如下

html結(jié)構(gòu)為 

  1. <fieldset class="title">  
  2.     <legend class="inner">我是分割線</legend>  
  3. </fieldset> 

css樣式為 

  1. .title{  
  2.     font-size: 14px;  
  3.     color: #999;  
  4.     border: 0;  
  5.     border-top: 1px solid #ccc;  
  6.     padding: 0;  
  7.  
  8. .inner{  
  9.     margin: 0 auto;;  
  10.     padding: 0 10px;  

CSS分隔線 (fieldset+legend)

小結(jié)

上面一共列舉了8種方式來實現(xiàn)分隔線的效果,每種方法思路各不相同,重要的是可以發(fā)散自己的想象力,可能這才是CSS與其他語言所不同的吧~

這里整理了一下,整體效果如下非大家在實際項目中可自行選取所需要的方式 

 

責任編輯:龐桂玉 來源: 前端教程
相關(guān)推薦

2025-04-27 09:12:42

2022-10-24 17:57:06

CSS容器查詢

2023-10-23 08:48:04

CSS寬度標題

2010-08-26 16:27:46

CSS高度

2010-08-26 14:18:25

DIV高度

2010-08-30 09:52:03

DIV高度自適應(yīng)

2010-08-25 13:10:43

div高度CSS

2024-05-11 08:25:43

自定義分隔線背景效果

2024-09-05 11:48:33

2013-09-04 11:02:52

手機web網(wǎng)頁設(shè)計

2014-04-15 13:09:08

Android配色colour

2010-04-30 10:40:19

Oracle實現(xiàn)

2010-08-24 16:03:22

Div高度

2022-05-13 12:46:06

開源深度學(xué)習(xí)技術(shù)

2010-08-30 09:15:15

DIV高度自適應(yīng)

2010-08-27 10:30:16

CSS垂直居中

2010-08-26 16:19:41

DIV圓角

2010-08-26 10:56:16

CSStextarea

2017-06-06 10:30:12

前端Web寬度自適應(yīng)

2010-09-06 10:04:31

CSS樣式表
點贊
收藏

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