網頁排版:精確控制文字行高和間距

2021-02-19 字節記事本

單行高度

一行文字的高度等於 font-size 乘以 line-height

font-size: 14px, line-height: 1

當行高設置為 1 時,行高度是:

14 * 1 = 14px

font-size: 14px, line-height: 1.5

調整到 1.5 時,行高度是:

14 * 1.5 = 21px

文字行內間距

文字在一行裡的上下間距等於 font-size * (line-height - 1) * 0.5

line-height: 1

行高設為 1 時,文字上下沒有間距,調到 1.5 倍以後的效果:

line-height: 1.5

行高變成了 21px,文字上下間距是:

(21 - 14) * 0.5 = 3.5px

字號行高的關係計算出間距:

14 * (1.5 - 1) * 0.5 = 3.5px

多行文字

總高度 = 單行高度 * 行數

font-size: 14px, line-height: 1.5

5 行文字的高度是:

14 * 1.5 * 5 = 21 * 5 = 105px

之間的間距是:

14 * (1.5 - 1) = 7px

行間距和字號計算行高的方法:

1 + 行間距 / 字號 = 行高

1 + 7 / 14 = 1.5

行高帶來的排版問題

文本在行內部上下的間距,隨著行高的增加會變得更加明顯。

font-size: 14px, line-height: 2.0

當行高設置為 2 倍時,上下空白的間距達到了 7px,這個距離會拉大文字和上一個元素的間距。

div 的 margin-bottom: 24px

文字和上一個元素的實際間距就是 24 + 7 = 31px,期望的排版效果是下面這樣的:

期望的效果

解決方案


利用外邊距摺疊(Collapsing Margins)可以解決這個問題。

使用字號和行高可以計算出上下的空白間距,字號 14px、行高 2.0 ,那麼間距就是:

14 * (2 - 1) * 0.5 = 7px

那麼只要給文字的 ::before 偽元素設置 margin-top: -7px ,在外邊距摺疊效果下文字就會上移 7px,剛好就消除了上間距。

對於底部空白邊距,就給 ::after 偽元素設置 margin-bottom: -7px,讓下面的元素位置上移 7px,就可以抵消下間距。


看一下 CSS 代碼和效果:

.markdown-body > p::before {  content: "";  display: block;  width: 0;  height: 0;  margin-top: -7px;}

::before margin-top: -7px

.markdown-body > p::after {  content: "";  display: block;  width: 0;  height: 0;  margin-bottom: -7px;}

::after margin-bottom: -7px

(全文完)

相關焦點

  • 文字排版:Google字體如何搭配組合
    面對著這麼多字體,文字排版應該如何搭配呢?來自羅馬尼亞的Milo藝術設計機構就通過十五張圖,為大家展示了Google字體如何搭配組合。每張圖使用兩到三種字體搭配,都標註了字體名稱、字號、行間距、字母間隔。字體組合和顏色完美無瑕,易於眼睛使用,學習起來很方便。
  • 經驗分享:如何複製韓國網頁上的圖片和文字?
    韓國網站的加密技術很強,經常是禁止右鍵,導致我們無法複製網頁上的文字,也無法快速的保存圖片。遇到這種情況怎麼做呢?
  • 婚禮素材第四季:婚禮卡通復古動態排版設計文字標題動畫-PR模板
    Premiere模板-222個現代媒體婚禮卡通復古動態排版設計終極文字標題動畫預設 The Ultimate
  • Shortcuts 教程:一鍵搞定公眾號圖片排版
    除非有樣式需求,否則你幾乎意識不到排版的存在。總之,這個流程的感覺就是簡潔、清晰。然而自從寫公眾號,排版的問題一直讓我頭疼。官方編輯器完全不支持 Markdown,也沒有 iPad app,只能在後臺用網頁編輯。而網頁很不穩定,我寫《聖約》的書評,正文大概一萬多字,我粘貼到網頁中,瀏覽器立刻崩潰了。
  • 純圖文PPT排版:還是熟悉的味道
    聖誕到了,給大家一份聖誕禮物——一套純圖文排版的PPT模板。
  • 視頻教程:流行的全屏式網頁是怎樣設計的?
    在國外的設計社區Dribbble和Behance也常常看到這樣的作品,那麼這種全屏式網頁是怎樣設計的呢?設計師@Harshil Acharya做了一個視頻演示,從找素材到最終設計稿,只花了很少的時間就能完成,同學們來一起學習吧。這是一個不需要解說也能看懂的網頁設計視頻教程,只需花費你1分鐘時間觀看!
  • 窩哥39:英文和數字間距為神馬突然變大了?
  • 實用攻略:word論文排版最全技巧
    文字排版真真是讓很多同學頭疼的一件事,尤其是篇幅較長的論文,常常是改了後面又錯了前面,一遍一遍修改直到崩潰。
  • 防火間距的重點、難度、易考點
    在往年的案例分析中分值都很高,在實務和綜合中,也幾乎是每年的必考點。防火間距中有很多難點和易錯點,比如:1、三級耐火等級的戊類廠房與二級耐火等級的高層公共建築之間的防火間距不應小於(   )m。二、廠房倉庫與高層民用建築、重要公共建築、明火或散發火花地點的間距1、甲、乙類廠房和乙類倉庫與民用建築中的單、多層和裙房的防火間距不應小於25m
  • 2015年網頁設計背景圖流行趨勢
    本文要剖析的並非攝影圖本身,而是網頁設計中運用和掌控攝影圖的流行趨勢。作為設計師,要對行業發展方向有清楚的了解,我們為大家收集了2015年的設計趨勢,希望對你會有所幫助。不會排版?看看看2015年的四種排版趨勢2015年將引領風騷的Web設計趨勢2015年移動APP設計趨勢展望2015年全球網站設計趨勢預測2015年即將到來的網頁設計趨勢怎樣預測網頁設計未來的趨勢其中有些顯而易見、廣為人知,其他則頻頻使用,卻鮮有提及。當我們將同類趨勢收集整理成套,對此概念的認識則會超乎我們想像。
  • 張鑫旭說:去除inline-block元素間間距的N種方法
    (左右滑動查看代碼)真正意義上的inline-block水平呈現的元素間,換行顯示或空格分隔的情況下會有間距,很簡單的個例子:間距就來了~~<input /> <input type="submit" />
  • 【2018級】防火間距的確定
    1、防止火災蔓延一二級底層+6~10m間距+撲救=不蔓延
  • 第一彈:製作家鄉網頁設計的全過程(圖文教程)
    需求 做一個介紹家鄉的網頁設計,用table進行布局,至少為三行兩列表格,包含文字、圖片、超連結、表單等元素,至少包含四頁。
  • 防火間距再複習一遍!關於記憶與調整!
    最近各位同學反應,民用建築防火間距的變形總是記不清,特別容易記混。
  • 網頁設計新趨勢:我所知道的關於web字體的一切
    我並沒有根據他的模型來使用字體,為此他專門把我叫出來並告訴我這是一個非常大的錯誤。我該如何彌補呢? 「我不知道。但是目前它是最大的問題,毫無疑問。」  說起來,在過去的很長一段時間裡,我都同不同的網頁設計師一起合作開發各種不同的網站,這使得我逐漸開始關注網頁設計中的很多細小但重要的細節了,比如,字體。  在此可以簡單介紹一點背景知識。
  • 網頁設計:字體怎麼設置才能讓網頁更美觀個性
    但是,如果你不好好設計網頁,只是隨隨便便替換下圖片和文字就發布上線了,那就很難把網站做出自己的個性。網站字體是網站個性的一個重要展現形式,字體獨特的話,也能給訪客留下深刻印象。如何設置一個獨特的字體呢?你可以利用「上線了」sxl.cn建站的「上傳自定義字體」功能實現這個效果。
  • 幾個超級無聊的網頁,真的很無聊
    就是我在發呆時對著屏幕的這些網頁。。。想選題的時候就會對著電腦屏幕,滑著滑鼠滾輪,一直滑啊!滑啊!因為小狐知道這個網頁劃不到盡頭。在滑動滑鼠滾輪的過程中,能給予小狐部分解壓和靈感!總覺得手動一下才踏實!