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

使用CSS給標題添加書名號并超出省略

開發 前端
本文的全部技巧了,你學到了?下面總結一下:1. 某些情況下HTML由其他框架生成,無法直接改底層源碼,這就需要使用CSS動態生成技術了。2. 使用兩個偽元素可以很輕松生成前后兩個書名號。3. 還可以用 CSS quotes 來生成書名號,不過只針對q元素生效等

比如,有一些書名或者標題,默認是沒有書名號的,結構如下:

<h3class="books">靈境行者</h3>
<h3class="books">斗破蒼穹</h3>
<h3class="books">我師兄實在太穩健了</h3>
...

有沒有什么辦法在不改變HTML的情況下加上書名號呢???(例如某些情況下HTML由其他框架生成,無法直接改底層源碼)

進一步,還需要書名號內部實現文本超出省略,如下:

這就需要CSS動態生成技術了,你有什么想法呢?一起看看吧。

一、使用偽元素生成書名號

沒錯,很多同學可能會想到用偽元素,前后各添加一個就好了。

.books::before{
content:'《'
}
.books::after{
content:'》'
}

效果如下:

除了手動使用偽元素生成偽元素外,還可以用 CSS quotes 來生成書名號。

.books{
quotes:"《""》"
}

但是,普通元素直接寫這個沒什么效果,只有q標簽才會顯示書名號。

<qclass="books">靈境行者</q>
<h3class="books">斗破蒼穹</h3>
<h3class="books">我師兄實在太穩健了</h3>
...

原因是,q標簽會自帶默認樣式,自動創建了偽元素。

所以,普通元素如果也想用quotes屬性,可以手動添加:

.books::before{
content: open-quote
}
.books::after{
content: close-quote
}

效果如下:

不過這樣好像還不如直接使用偽元素方便了吧???

二、書名號內文本超出省略

CSS 單行文本超出省略很容易,只需要下面 3 行。

white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;

當寬度比較小時,部分標題也發生了省略,如下:

有設計師表示,這樣不是很好看????♀?,這個省略號能否在書名號里面呢,就像這樣。

正常情況下,我們會選擇給中間的文本額外新增一層標簽,然后把文字省略設置在這個標簽上。

<qclass="books"><span>靈境行者</span></q>
<h3class="books"><span>斗破蒼穹</span></h3>
<h3class="books"><span>我師兄實在太穩健了</span></h3>
...

但是如果無法更改HTML結構,這里有辦法只用一層標簽實現嗎?

當然也是有的,下面介紹兩個思路。

三、好用的絕對定位

書名號之所以會連同文本一起被省略,在于和標題文本處于同一文本流中,所以需要將這個書名號提取出來,脫離這個文本流。

首先可以想到的是絕對定位,需要注意給右側留一點內邊距(不然就重疊了),這里給「一個字號寬度」。

.books{
position: relative;
padding-right:1em;/*只能大概給一個固定距離*/
}
.books::after{
position: absolute;
right:0;
}

效果如下:

由于是塊級元素,寬度默認撐滿,所以書名號跑到最右邊了,可以給元素加一個最大寬度為文本寬度。

.books{
/**/
max-width: fit-content;
}

這樣就正常了。

完整代碼可以查看:https://codepen.io/xboxyan/pen/emOBeGa[1]

四、有些冷門的浮動

除了前面的絕對定位,浮動也能實現類似的效果。

.books::after{
float: right
}

效果如下:

但是當文本過長時,浮動元素掉下來了,并沒有實現環繞效果。

其實,這個跟文檔的順序有關,浮動元素必須位于前面才行,也就是::before元素才可以,我們試試。

.books::before{
float: right
}

效果如下,很好的位于最右側(紅色部分)。

那么現在問題來了,::before被用掉了,用于生成右書名號,那通過什么來生成左書名號呢?

思索了一番,整個CSS中還有一個偽元素可以生成文本,那就是::marker,而且也位于左側。不過需要設置display屬性為list-item才會出現。

.books{
/**/
display: list-item;
list-style-position: inside;
}
.books::marker{
content:'《';
}
.books::before{
content:"》";
float: right;
color:red;
}

這樣就能代替原本的::before生成左書名號了(左側是::marker,右側是::before)。

同樣還有最大寬度的問題。

.books{
/**/
max-width: fit-content;
}

同樣能實現類似的效果,相比絕對定位來說,無需給一個“大概”的右內邊距。

完整代碼可以查看:https://codepen.io/xboxyan/pen/ZYzBajg[2]

五、總結一下

以上就是本文的全部技巧了,你學到了?下面總結一下:

  1. 某些情況下HTML由其他框架生成,無法直接改底層源碼,這就需要使用CSS動態生成技術了
  2. 使用兩個偽元素可以很輕松生成前后兩個書名號
  3. 還可以用 CSS quotes 來生成書名號,不過只針對q元素生效
  4. 默認情況下,文本省略會把右側的書名號也省略
  5. 書名號之所以會連同文本一起被省略,在于和標題文本處于同一文本流中,需要把右側書名號脫離文本流。
  6. 絕對定位居右定位可以脫離文本流,不過需要預留一點空間,不然會和下面的文本重疊
  7. 塊級元素寬度默認撐滿,可以設置寬度為fit-content自適應文字寬度
  8. 浮動布局也可以脫離文本流,不過要求浮動元素在HTML結構中的左側,::after元素在文本右側,無法使用浮動實現該效果
  9. 除了偽元素,還可以通過::marker來生成內容,而且也位于文本左側
  10. 使用:marker生成左側書名號,::brfore生成右側書名號,相比絕對定位的優勢是,無需給定一個"大概"的右內邊距
責任編輯:武曉燕 來源: 前端偵探
相關推薦

2018-12-10 15:18:43

蘋果手機符號

2023-11-23 08:22:35

Vue3Tooltip

2010-08-26 13:32:05

CSSmargin參數

2016-11-10 09:55:29

CSS

2024-05-09 00:00:00

CSS標簽JavaScript

2010-09-07 14:22:41

SQL語句

2017-04-07 11:45:25

CSSDIV前端

2023-07-28 10:21:46

CSS前端

2022-12-14 08:42:46

IDEAIDEA插件

2011-08-08 15:48:13

iPhone TableView 背景

2013-11-15 15:46:16

Nagios地圖

2016-10-19 10:46:14

CSS前端

2010-09-26 13:40:14

SQL查詢

2022-05-04 18:26:25

PDF水印Python

2022-02-09 20:15:10

微軟Windows 11任務欄

2009-02-17 20:16:00

Vista加標題資源管理器

2022-02-22 07:50:10

CSS前端CSS-doodle

2011-07-08 17:35:14

Xcode View

2014-02-14 13:57:22

UbuntuWindowsMac

2021-06-15 08:02:27

Python進度條Tqdm
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99精品一级欧美片免费播放 | 污污的网站在线观看 | 欧美日在线| 欧美影院久久 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 高清一区二区三区 | 99精品免费 | 色视频一区二区 | 午夜成人免费电影 | 日韩欧美在线视频 | aaaa一级毛片 | 日本特黄a级高清免费大片 特黄色一级毛片 | 国产yw851.c免费观看网站 | 久久精品99| 久草免费在线视频 | 久久99精品久久久久久秒播九色 | 欧美一区不卡 | 午夜一区二区三区在线观看 | 久久久久久成人 | 日韩中文字幕 | www国产亚洲精品久久网站 | 九九国产 | 国产成人免费 | 99热99| 日韩一区二区av | 亚洲国产精品久久 | 久久久久国产精品一区三寸 | 成人在线免费视频 | 国产一区二区三区在线看 | 久久久精品一区 | 黄视频网址 | 亚洲日本视频 | 亚洲精品天堂 | 成人欧美一区二区三区在线播放 | 久久se精品一区精品二区 | www.日韩| 四色永久 | 国产精品美女www | 日韩精品一区二区在线 | 91精品一区二区三区久久久久久 | 免费久久精品视频 |