文字的修飾

字體是布局中重要的一個環(huán)節(jié)。對字體的調整影響到網頁的整體效果。我們設置字體時,可以參照word里面對字體的調整,更好地記憶調整內容。

最常見的字體調整

  • 字庫 font-family

當我們需要對我們的字體類型修改時,需要指定字庫。

p {
  font-family: "Trebuchet MS", 微軟雅黑, Verdana, sans-serif;
}

按照給定的字庫順序依次尋找,直到找到存在的某一個字庫,并且應用。如果給定的字庫都在計算機的字體庫中查詢不到,則會使用默認字庫,通常是Time New Roman,中文是宋體。
字庫名稱有空格時需要用引號引用,以示完整。

定義網絡字庫 @font-face

當我們需要的字體很大幾率在客戶機中不存在,則可以使用提供的網絡字庫,使得網頁可以按照期望的樣式展示。

@font-face {
    font-family: <字體名>;
    src: <字體路徑> [<格式>][,<字體路徑> [<格式>]]*;
    [font-weight: <粗細>];
    [font-style: <樣式>];
}
屬性 描述
font-family name 必需。規(guī)定字體的名稱。
src URL 必需。定義字體文件的 URL。
font-stretch normal , condensed, ultra-condensed,extra-condensed, semi-condensed,expanded, semi-expanded, extra-expanded, ultra-expanded 可選。定義如何拉伸字體。默認是 “normal”。
font-style normal ,italic, oblique 可選。定義字體的樣式。默認是 “normal”。
font-weight normal ,bold, 100-900(整倍) 可選。定義字體的粗細。默認是 “normal”。
unicode-range unicode-range 可選。定義字體支持的 UNICODE 字符范圍。默認是 “U+0-10FFFF”。

例如

@font-face {
  font-family: 'Bungee Inline'; /*定義字體庫名稱*/
  font-style: normal; /*字體樣式*/
  font-weight: 400; /*字體*/
  src: local('Bungee Inline') /* local 表示從本地字庫中查找指定字庫*/, local('BungeeInline-Regular'), url(https://fonts.gstatic.com/s/bungeeinline/v2/Tb-1914q4rFpjT-F66PLCfn8qdNnd5eCmWXua5W-n7c.woff) format('woff') /*url表示從網絡給定鏈接下載字庫  format是字體的格式*/;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; /*字體支持的unicode范圍*/
}

h2{
    font-family: 'Bungee Inline';
}

關于format()說明

格式 說明
TureTpe(.ttf)格式 .ttf字體是Windows和Mac的最常見的字體,是一種RAW格式,因此他不為網站優(yōu)化,支持這種字體的瀏覽器有【IE9+,Firefox3.5+,Chrome4+,Safari3+,Opera10+,iOS Mobile Safari4.2+】;
OpenType(.otf)格式 .otf字體被認為是一種原始的字體格式,其內置在TureType的基礎上,所以也提供了更多的功能,支持這種字體的瀏覽器有【Firefox3.5+,Chrome4.0+,Safari3.1+,Opera10.0+,iOS Mobile Safari4.2+】;
Web Open Font Format(.woff)格式 .woff字體是Web字體中最佳格式,他是一個開放的TrueType/OpenType的壓縮版本,同時也支持元數據包的分離,支持這種字體的瀏覽器有【IE9+,Firefox3.5+,Chrome6+,Safari3.6+,Opera11.1+】;
Embedded Open Type(.eot)格式 .eot字體是IE專用字體,可以從TrueType創(chuàng)建此格式字體,支持這種字體的瀏覽器有【IE4+】;
SVG(.svg)格式 .svg字體是基于SVG字體渲染的一種格式,支持這種字體的瀏覽器有【Chrome4+,Safari3.1+,Opera10.0+,iOS Mobile Safari3.2+】。

字體的兼容寫法

   @font-face {
    font-family: '字體名';
    src: url('字體名.eot'); /* IE9 兼容模式 */
    src: url('字體名.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
             url('字體名.woff') format('woff'), /* 現代瀏覽器 */
             url('字體名.ttf')  format('truetype'), /* Safari, Android, iOS */
             url('字體名.svg#grablau') format('svg'); /* Legacy iOS */
   }

但是常規(guī)只需要 eotwoff這兩種就可以了

 --------當字體準備完成之后,開始正式的字體修飾--------------
  • 顏色 color

字體顏色是最常見的修飾方式,不同的字體顏色產生不同的視覺效果

<style>
p {
  color: red;
}
</style>

色值可以從顏色名對照表中查找瀏覽器設定好的默認值,也可以用任意的色值方案 -- 十六進制rgb ,hsl 提供色值或者帶有alpha通道的rgbahsla設置半透明字體色彩。

在word里,字體有背景色,但是在css里沒有針對字體的背景色,因此沒有一個屬性叫 "font-background-color",
但是css提供了一個'background-color' 在調整盒模型時說明用途
  • 字體尺寸 font-size

可以使用像素單位( px )的字體字號,也可以使用磅值(pt),但是不會使用相對尺寸,em rem,因為在換算成像素時,小數部分將會使字體模糊

<style>
p {
  font-size: 20px;
}
</style>

通常瀏覽器都有最小字體,在chrome中最小字號為 12px以保證文本內容清晰顯示

  • 加粗 font-weight

區(qū)間為 100 - 900 (100的整數倍)九檔,常用的,默認值 normal =400 ,bold =800

  • lighter 更細一些,相比父元素字體而言

  • bolder 更粗一些,相比父元素字體而言

  • 傾斜 font-style

我不知道為什么style叫斜體,但是它就是這么定義的,可能是風格吧傾斜風格。
在這個屬性中有兩種傾斜方式

  • 使用斜體字 italic 。當該字體提供斜體時,可以使用該屬性,將常規(guī)字體替換為斜體字體,如果字體本身沒有攜帶斜體字,則不會生效

  • 使字體傾斜 oblique 。當該字體不提供斜體字時,將由樣式渲染字體為斜體。

  • normal 這個默認使用常規(guī)字體

  • 文本裝飾線 text-decoration

該屬性是一個復合屬性,包括:

  • text-decoration-color 裝飾線顏色
  • text-decoration-line text-decoration-line 是一個多值屬性,可以同時設定多個值
    • underline 下劃線
    • overline上劃線
    • line-through 貫穿線
    • blink 文本閃爍 該屬性并不是很受支持,并且有了css動畫,該屬性將被廢棄
  • text-decoration-style 線條風格
    • solid 實線
    • double 雙實線
    • dashed 虛線
    • dotted 點線
    • wavy 波浪線
  • text-decoration-skip 這是一個css3的屬性,用來跳過不顯示裝飾線的元素,不過目前支持力度有限
    • objects 跳過內聯塊
    • spaces 跳過空白符

雖然我們可以同時設定上劃線,下劃線,貫穿線,但是卻沒辦法單獨設置他們的樣式顏色,盡管css3標準組織已經提出了 相關解決方案,遺憾的是大多數瀏覽器都是不支持的。

  • 文字描邊 text-stroke

當我們想為文字外側再套一層顏色時,就需要使用到文字描邊。
該屬性也是復合屬性分為 text-stroke-color描邊顏色 和 text-stroke-width描邊厚度 兩部分。
目前IE 和FF (40 以下) 版本不支持,其余瀏覽器需要添加內核前綴。

  • 文本大小寫轉換 text-transform

決定文字內容(主要是西方字體) 大寫(uppercase)還是小寫(lowercase)還是首字母大寫(capitalize)的方式呈現

  • 小型的大寫字母 font-variant

當你的大寫字母比小寫字母高出很多時,使用小型大寫字母,將小寫的內容轉為大寫字母來替代原有的大寫字母內容?!緝H針對小寫字母】

<style>
p {
  font-variant : small-caps;
}
</style>
<p>this is small caps</p>
  • 文本陰影 text-shadow

這個元素將以內容文本為藍本,從當前文本的下方產生文字投影。
這個屬性一共有四個屬性值,分別是

  • 水平偏移 相對于原文本的X軸方向上的偏移
  • 垂直偏移 相對于原文本的Y軸方向上的偏移
  • 模糊半徑 如果為0則陰影不會產生模糊效果
  • 投影顏色 如果不設置默認是黑色

投影其實就是燈光照射到物體上產生的陰影,當不同角度的燈光照射進來時,產生了不同程度的投影。因此投影也是可以有多個的

<style>
p {
  text-shadow : 1px -1px 2px blue , 1px 5px 0 red;
}
</style>
  • 方向 direction

這個屬性其作用目的是修改內聯塊的排列方向,僅針對內聯塊(inline-block),默認是ltr( LEFT-TO-RIGHT )、rtl(RIGHT-TO-LEFT)

  <style>
    div {
      direction: rtl;
    }
  </style>
  <div>
      <button>內聯塊1</button>
      <button>內聯塊2</button>
      <span> 文本內容1 , </span>
      <span> 文本內容2 。 </span>
      <span style="background-color: greenyellow"> 文本內容3 ; </span>
  </div>

看下面的效果


image.png

很神奇的發(fā)現,內聯塊1,2的顯示順序調換了,這是因為該屬性修改的是內聯塊的展示方向,會依次從右向左排列,但是另一部分,三個內聯元素排列順序沒有變化,是對的,但是沒搞懂,為什么最后一個文本內容末尾的符號會被提升到前面去,不應該跟隨在文字后面么這不知道是一個 “BUG” 還是別出心裁的設計。

但是我們想象一下民國時期,從右向左書寫方式,這時候需要用到文本的寫作方向來調整了

  • 文本的方向 unicode-bidi

這個屬性需要配合上面的direction一起使用才可以生效

在現代計算機應用中,最常用來處理雙向文字的算法是Unicode 雙向算法(Unicode Bidirectional Algorithm),簡稱為 bidi 算法。而unicode字符本身分為強字符、中性字符、弱字符

  • 強字符:強字符方向是確定的,但是在bidi算法中會影響到中性字符的書寫方向。 比如中文、拉丁文字

  • 中性字符:方向是不確定的,上下文與bidi算法無關,但是會受到強字符影響。比如,一般符號

  • 弱字符:方向是確定的,但是不會對bidi算法產生影響。比如 阿拉伯數字以及跟數字相關的符號

    一個區(qū)域內有總體方向,決定從這個區(qū)域的哪邊開始書寫文字,通常稱為基礎方向。
    瀏覽器會根據你的默認語言來設置默認的基礎方向,如英語、漢語的基礎方向為從左到右,阿拉伯語的基礎方向為從右到左。
    

Web中控制文字方向的方式有三種:

  • html實體(&lrm;、&rlm;)【隱式轉換】 &lrm;&rlm;可以用來打斷方向串的連續(xù)性,影響中性字符的方向。
  • bid與bdo標簽+dir屬性
  • css屬性(direction + unicode-bidi)

具體關于 字符方向的,這里有解答
但是還是不理解上述所說的,末尾符號問題。

  • 書寫模式 writing-mode

  • horizontal-tb 默認從左向右從上到下
  • vertical-rl 垂直方向從右向左 類似古代中文書籍書寫方式
  • vertical-lr 垂直方向從左往右

當設置為垂直書寫方式時,塊元素的寬度將會以content的寬度為準,如果需要設置寬度則需要顯示的給出。該屬性可被繼承

  • 空白符 white-space

很多時候,我們需要保留文內空白符,通常比較傻的情況就是用&nbsp;這個html語義字符替代,其實css本身就提供了我們對空白符的處理,何必傻兮兮的去替換。
pre 預先使用等寬字體顯示格式化文本,不合并空白,文字超出邊界時不換行
pre-wrap 不合并空白,和邊界發(fā)生碰撞時折行
pre-line 保持文本換行,但是不保留空白,邊界碰撞時換行
nowrap 不換行,不保留空白,直到文本結束或者遇到 <br/>

  • tab尺寸 tab-size

當我們開啟了空白符時,這是可以設定tab-size的尺寸,在一般的編輯器中,一個tab等于4個space,默認也是如此,因此當我們調整tab與space互轉時,就可以用到了。

  • 文字換行 word-break

對于英文等拉丁文,有時長單詞會超出邊界。這是因為單詞被視為整體,不允許折行。這時候就會產生比較大的問題--布局撐破。盡管很少情況下會遇到,這時,我們使用break-all強制換行,即使單詞是整體,也會被折行顯示,滿足布局需要。
對于中文,如果不想換行可以使用keep-all,就表現的和英文單詞一致,是不會折行的。

  • 段落折行 overflow-wrap (word-wrap)

IE下定入標準是word-wrap,被W3C組織收編之后修改為overflow-wrap,本質還是不變的。
設定超過邊界時換行,以獲得更好的展示效果。中英文混排時,會從中英文邊界換行。

  • break-word 設定折行

  • 文本對齊 text-align

比較常用的文本對齊是 left right center,css3中新增justify兩端對齊。但是justify不會處理最后一行和第一行。(單獨一行是第一行也是最后一行)
新增的start和end 對齊方式依賴于direction設定的方向,即文檔的開始方向。start表示向文檔開始方向對齊,因此direction:rtl時,表現與left right表現相反。
而match-parent 匹配父級,當匹配父級的start或者end時,基于父級的direction計算得到結果,而inherit則沒有限定。
justify-all,同時處理行和行尾的兩端對齊,但是并未得到支持。因此還是使用下面的方式最為穩(wěn)妥。

  • 行尾對齊 text-align-last

    上述的text-align不能處理單獨行,因此需要使用該屬性單獨處理
  • 兩端對齊方式設定 text-justify

當設定了文本的兩端對齊后,需要對兩端對齊方式進行設定,然而目前并沒有瀏覽器支持。所以先放棄

  • 單詞間距 word-spacing

說白話就是一個空格有多寬。

  • 字母間距 letter-spacing

就是字母跟字母間的間隔,當然中文也可以

  • 段落縮進 text-intend

設定段首縮進像素,然而這個屬性只針對塊元素和行內塊。畢竟內聯元素的自己也做不了主。
*## 行高 line-height
行高,即字體最底端與字體內部頂端之間的距離

行高和基準線

當對文本對象垂直居中時,需要了解行高和基準線
baseline對應的垂直位置是常態(tài)下小寫字母x的底部位置
middle是小寫字母x交叉的位置

  • 垂直對齊 vertical-align

垂直對齊就是基于行高和基準線的對齊方式。有baseline 基準線 sub 上標 super 下標
top 元素頂端與行內元素最高頂端對齊
bottom 元素的頂端與行中最低的元素的頂端對齊
middle 把此元素放置在父元素的中部
text-top 把元素的頂端與父元素字體的頂端對齊
text-bottom 把元素的底端與父元素字體的底端對齊

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • HTML 5 HTML5概述 因特網上的信息是以網頁的形式展示給用戶的,因此網頁是網絡信息傳遞的載體。網頁文件是用...
    阿啊阿吖丁閱讀 4,955評論 0 0
  • 學會使用CSS選擇器熟記CSS樣式和外觀屬性熟練掌握CSS各種選擇器熟練掌握CSS各種選擇器熟練掌握CSS三種顯示...
    七彩小鹿閱讀 6,445評論 2 66
  • 1.塊級元素和行內元素 塊級(block-level)元素;行內(內聯、inline-level)元素。 塊元素的...
    饑人谷_小侯閱讀 2,217評論 1 4
  • 學習CSS的最佳網站沒有之一 http://www.w3school.com.cn/tags/index.asp ...
    Amyyy_閱讀 1,192評論 0 1
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 14,168評論 1 92

友情鏈接更多精彩內容