<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        真正了解CSS3背景下的@fontface規則

        來源:懂視網 責編:小采 時間:2020-11-27 15:33:30
        文檔

        真正了解CSS3背景下的@fontface規則

        真正了解CSS3背景下的@fontface規則:很多人只要一提到@font face規則,心中就會不由自主哦~~的一聲:這個我知道,可以用來生成自定義字符小圖標!話是沒錯,問題在于很多人就以為生成字符小圖標就是@font face規則的全部,實際上只是功能之一,如果真正了解@font face規則,你會
        推薦度:
        導讀真正了解CSS3背景下的@fontface規則:很多人只要一提到@font face規則,心中就會不由自主哦~~的一聲:這個我知道,可以用來生成自定義字符小圖標!話是沒錯,問題在于很多人就以為生成字符小圖標就是@font face規則的全部,實際上只是功能之一,如果真正了解@font face規則,你會
          很多人只要一提到@font face規則,心中就會不由自主“哦~~”的一聲:“這個我知道,可以用來生成自定義字符小圖標!”話是沒錯,問題在于很多人就以為生成字符小圖標就是@font face規則的全部,實際上只是功能之一,如果真正了解@font face規則,你會發現,@font face規則可以做的事情其實非常多,尤其我們不考慮IE7,IE8瀏覽器的情況下。

          一、 @font face的本質是變量

          雖然說CSS3新世界才出現真正意義上的變量var(參見此文:“了解CSS/CSS3原生變量var”),但實際上,CSS世界中,就已經出現了本質上就是變量的東西,@font face規則就是其中之一,@font face的本質上就是一個定義字體或字體集的變量,這個變量不僅僅是簡單的自定義字體,還包括字體重命名,默認字體樣式設置等等。

          這個“變量”的意識很重要,有助于我們發揮@font face的潛力,可以讓我們的CSS代碼更加的精簡,更方便的維護等。

          在進入正題之前,我們先要對@font face規則有個大致的面面觀。

          @font face規則支持的CSS屬性有:font-family,src,font-weight,font-style,unicode-range,font-variant,font-stretch,font-feature-settings。例如:

        @font-face {
         font-family: 'example';
         src: url(example.ttf);
         font-style: normal;
         font-weight: normal;
         unicode-range: U+0025-00FF;
         font-variant: small-caps;
         font-stretch: expanded;
         font-feature-settings:"liga1" on;
        }

          屬性還是挺多的,而且有些屬性,估計是他認識你,你不認識他。但是從實用角度來講,有些屬性其實可以不用去深究,例如font-variant,font-stretch,font-feature-settings這3個屬性。為什么呢?因為按照我的經驗理解,這3個屬性給我感覺更像是專為英文設計的,所以如果不是有業務需要,可以先放一放。

          好,現在,是不是感覺壓力一下子小了很多,我們需要在意的可以自定義的屬性就只剩下下面這些:

        @font-face {
         font-family: 'example';
         src: url(example.ttf);
         font-style: normal;
         font-weight: normal;
         unicode-range: U+0025-00FF;
        }

          估計會有小伙伴疑惑@font-face規則中的font-style,font-weight以及unicode-range這些屬性有什么用,尤其font-style,font-weight,好像就是專門過來打醬油的。實際上,這里的每個屬性都不是泛泛之輩,都是有故事的人。

          在介紹每個屬性之前,有必要鄭重聲明一下,接下來有大量的案例,全是基于local本地字體做示意的,而IE7,IE8瀏覽器是不支持local本地字體的,所以,本文的標題是“CSS3背景下的……”,就是這么個原因,大家注意明辨,如果你的項目還需要兼容IE8,本文介紹,這些好東西可能就需要斟酌斟酌了。

          二、 @font face常用CSS屬性詳細介紹

          我們一個一個來介紹:

          1. font-family

          這里的font-family可以看成是一個字體變量,名稱可以非常隨意,例如直接一個美元符號'$',例如:

        @font-face {
         font-family: '$';
         src: local("Microsoft Yahei");
        }

          這時候,對普通HTML元素,你設置其font-family屬性值為'$',則其字體表現就變成了“微軟雅黑”(如果本地有這個字體)。

          甚至非IE瀏覽器下可以直接使用純空格' ',不過有一點需要注意,就是使用這些稀奇古怪的字符或者有空格的時候,一定要加引號。

          雖然說自己變量名可以很隨意,但是有一類名稱,不能隨便設置,就是原本系統就有的字體名稱,例如下面的代碼:

        @font-face {
         font-family: 'Microsoft Yahei';
         src: local(SimSun);
        }

          從此“微軟雅黑”字體就變成了“宋體”。當然,有時候我們說不定就需要這種覆蓋,比如說新來了一個設計主管,平生最看不慣“微軟雅黑”,希望換成其他字體,這個時候我們就可以使用這個變量覆蓋輕輕松松完成整站的字體變更。

          2. src

          src表示調用字體文件,可以是本地字體文件(IE9+支持),也可以是線上地址(可能有跨域限制)。

          本文主要著重介紹本地字體文件的應用。

          作用1:字體文件名簡寫

          現在很多網站會使用“微軟雅黑”字體,但是,“微軟雅黑”的名稱有點長:

        .font {
         font-family: 'Microsoft Yahei';
        }

          小手一抖,說不定就拼錯了,還要加引號,還要加空格,好麻煩的勒。此時我們就可以利用@font face規則簡化,這樣就容易記憶了,書寫更快了:

        @font-face {
         font-family: YH;
         src: local("Microsoft Yahei");
        }

          使用的時候直接:

        .font {
         font-family: YH;
        }

          多么干凈,多么清爽,心情多么舒暢!

          src還支持多個local字體地址同時出現,嘿,這簡化的CSS代碼可不是一個字體名了,而是一大波字體名稱了,例如某網站使用了大量類似下面的font-family屬性值:

        body {
         font-family: PingFangSC-Regular,HelveticaNeue-Light,'Helvetica Neue Light','Microsoft YaHei',sans-serif;
        }
        .xxxx {
         font-family: PingFangSC-Regular,HelveticaNeue-Light,'Helvetica Neue Light','Microsoft YaHei',sans-serif;
        }

          雖然說,實現的時候,借助了Sass, Less之類工具讓字體名稱們成為了變量,寫代碼的時候好像也沒怎么吃力,但是最終生成的CSS其實是比較啰嗦,如果我們走本質上就是變量的@font face,是不是不僅開發簡單,代碼也簡單了,如下處理:

        @font-face {
         font-family: BASE;
         src: local("HelveticaNeue-Light"), local("Helvetica Neue Light"), local("PingFang SC"), local("Microsoft YaHei"), local(sans-serif);
        }

          于是我們用字體的時候直接:

        body {
         font-family: BASE;
        }
        .xxxx {
         font-family: BASE;
        }

          看語義又好,代碼又簡單,實用又方便,超級使用的小技巧。

          當然,local本地作用還不止這些。

          業界有個名為“字蛛”的中文字體處理工具,可以提取頁面中使用的特殊中文字體并生成新的體積更小的自定義字體。我們可以在這個基礎上更進一步,舉個例子:

          一些特殊的標題設計師就是喜歡用“方正粗雅宋”這個字體(已經購得版權),但是很顯然,這么帥氣的字體,幾乎很少有用戶安裝的,所以實際開發的時候,全都是通過工具而生成一個全新的精簡版的“方正粗雅宋”字體文件,再通過src屬性url()方法外鏈這個字體文件。

          很棒的方案,但還不夠完美,為什么呢?雖然安裝“方正粗雅宋”這個字體的用戶并不多,但并不表示沒有用戶使用之。試想一下,假如有用戶安裝了這個字體,結果你在網頁呈現的時候,還要再去外鏈一個額外的文件地址,豈不是白白的浪費?既浪費流量,體驗又不一定好,如果字體文件加載慢,會看到文字“變形”的過程,顯然是不友好的。

          我們可以借助@font face規則中的local實現代碼和體驗上的進一步的提升,如下:

        @font-face {
         font-family: FZCYS;
         src: local("FZYaSongS-B-GB"), 
         url("FZCYS.woff2"), 
         url("FZCYS.woff"),
         url("FZCYS.ttf");
        }

          于是乎,那些安裝了“方正粗雅宋”這個字體的用戶,就沒有任何字體文件請求。加載更快了,用戶體驗上升了,還省了流量,如此百益無一害的事情,還不妥妥的用起來。

          3. font-style

          在Chrome瀏覽器下,@font face規則設置font-style:italic可以讓文字傾斜,但是這并不是其作用所在。

          @font face規則中的font-style和font-weight類似,都是用來設置對應字體樣式或自重下該使用什么字體。因為有些字體可能會有專門的斜體字,注意這個斜體字,并不是讓文字的形狀傾斜,而是專門設計的傾斜的字體,很多細節會跟物理上的請求不一樣。于是,我在CSS代碼中使用font-style:italic的時候,就會調用這個對應字體,如下示意:

        @font-face {
         font-family: 'I';
         font-style: normal;
         src: local('FZYaoti');
        }
        @font-face {
         font-family: 'I';
         font-style: italic;
         src: local('FZShuTi');
        }

          由于專門的斜體字不太好找,所以我使用“方正姚體”和“方正舒體”代替做示意。上面CSS代碼我解讀一下:制定一個字體,名叫'I',當文字樣式正常的時候,字體表現使用“方正姚體”,當文字設置了font-style:italic的時候,字體表現為“方正舒體”。

          好,現在假設有下面這樣的CSS和HTML:

        .i {
         font-family: I;
        }
        <p><i class="i">類名是i,標簽是i</i></p>
        <p><span class="i">類名是i, 標簽是span</span></p>

          請問最終的表現是怎樣的?

          由于<i>標簽天然font-style:italic,因此理論上,上面一行文字表現為“方正舒體”,下面一行為“方正姚體”,最終結果是如何呢?

          當當當當,完全符合,如下截圖:

        @font-face和font-style關系作用示意

          這下大家應該明白,@font face規則中的font-style是干嘛用的了吧。

          4. font-weight

          font-weight和font-style類似,不過是定義了不同字重使用不同字體,對于中午而言,這個要比font-style適用性強很多。我這里就有一個非常具有代表性的例子,版權字體“漢儀旗黑”自重非常豐富,但是這個字體不像“思源黑體”,天然可以根據font-weight屬性值加載對應的字體文件,怎么辦呢?很簡單,使用@font face規則重新定義一下即可,例如下面的CSS代碼:

        @font-face {
         font-family: 'QH';
         font-weight: 400;
         src: local('HYQihei 40S');
        }
        @font-face {
         font-family: 'QH';
         font-weight: 500;
         src: local('HYQihei 50S');
        }
        @font-face {
         font-family: 'QH';
         font-weight: 600;
         src: local('HYQihei 60S');
        }

          解讀一下就是,是一個全新的字體,名為'QH',當字重font-weight為400的時候,使用“漢儀旗黑 40S”字重字體,為500的時候,使用“漢儀旗黑 50S”字重字體,為600的時候,使用“漢儀旗黑 60S”字重字體。

          于是乎,當我們應用如下的CSS和HTML代碼的時候:

        .hy-40s,
        .hy-50s,
        .hy-60s {
         font-family: 'QH';
        }
        .hy-40s {
         font-weight: 400;
        }
        .hy-50s {
         font-weight: 500;
        }
        .hy-60s {
         font-weight: 600;
        }
        <ul>
         <li class="hy-40s">漢儀旗黑40s</li>
         <li class="hy-50s">漢儀旗黑50s</li>
         <li class="hy-60s">漢儀旗黑60s</li>
        </ul>

          我們就可以看到,文字粗細錯落有致的效果,如下截圖:

        @font-face中font-weight作用示意截圖

          如果用在網頁開發中,必定會讓我們的界面更加的細膩,設計更加的精致,視覺更加的愉悅。

          5. unicode-range

          unicode-range的作用是可以讓特定的字符或者字符片段使用特定的字體。舉個例子,下圖是文字應用了“微軟雅黑”字體后的效果:

        微軟雅黑的冒號

          但是,這兩個“引號”左右間隙不均,方向不明,實在是看著不爽,此時我們就專門指定這兩個“引號”使用其他字體,如下CSS:

        @font-face {
         font-family: BASE;
         src: local("Microsoft Yahei");
        }
        @font-face {
         font-family: quote;
         src: local('SimSun'); 
         unicode-range: U+201c, U+201d;
        }
        .font {
         font-family: quote, BASE;
        }

          然后效果就變成這樣子了:

        變成宋體引號后的效果

          嗯,一下子變得舒服多了。

          關于unicode-range更多內容,可參考我之前寫的文章“CSS unicode-range特定字符使用font-face自定義字體”。

          三、結束語

          根據我個人的感覺,@font-face的為人所知要得益于icon fonts小圖標技術。因為自定義的小圖標字體幾乎一定是外鏈的,而恰恰好,低版本IE7,IE8瀏覽器的src只能是url()外部字體文件。外加矢量、顏色可控等特性,于是成為了兼容時代最好的小圖標解決方案,可謂功不可沒,但也帶來了另外一個弊端,讓很多同學誤以為@font-face除了自定義一些小圖標之外就一無是處了。于是,當越來越多產品和項目不需要兼容IE7,IE8瀏覽器的時候,由于有更好的SVG圖標解決方案,@font-face似乎又很少被提及了。

          通過本文的一些介紹,大家應該感覺到@font-face規則的作用被嚴重低估了,除了小圖標外,@font-face還能做的事情非常多,而這些事情,才更像是@font-face應該做的事情。

          就算你的項目需要兼容IE8,本文介紹的一些特性也是可以漸進增強使用的,例如特殊中文字體優先使用本地字體,或者unicode-range特定字符使用特定字體等。

          希望本文的內容可以喚起大家對@font-face真正的認識!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        真正了解CSS3背景下的@fontface規則

        真正了解CSS3背景下的@fontface規則:很多人只要一提到@font face規則,心中就會不由自主哦~~的一聲:這個我知道,可以用來生成自定義字符小圖標!話是沒錯,問題在于很多人就以為生成字符小圖標就是@font face規則的全部,實際上只是功能之一,如果真正了解@font face規則,你會
        推薦度:
        標簽: Face css css3
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 特级无码毛片免费视频尤物| 国产精品亚洲专区在线播放| XXX2高清在线观看免费视频| 免费中文字幕不卡视频| 亚洲成aⅴ人片久青草影院按摩| 一本岛高清v不卡免费一三区| 亚洲免费在线播放| 伊人久久免费视频| 亚洲成av人片在线看片| 中文字幕免费在线看线人| 亚洲国产电影在线观看| 67194熟妇在线永久免费观看| 亚洲一区二区影视| 成人免费淫片在线费观看| 亚洲小说图区综合在线| 日韩免费电影在线观看| 午夜亚洲国产精品福利| 久久国产成人精品国产成人亚洲| 一级做a爱过程免费视频高清| 亚洲精品中文字幕无码蜜桃| 久久精品成人免费网站| 亚洲国产综合自在线另类| 成年性羞羞视频免费观看无限| 亚洲AV永久无码天堂影院| 国产免费牲交视频| 一级女性全黄久久生活片免费 | 亚洲国产成人久久综合碰碰动漫3d| 男女午夜24式免费视频| 亚洲无限乱码一二三四区| 国产精品视频永久免费播放| 亚洲av永久无码| 亚洲中文字幕不卡无码| 99久9在线|免费| 亚洲欧美日韩一区二区三区在线| 国产成人精品高清免费| 精品国产麻豆免费人成网站| 亚洲日本乱码一区二区在线二产线| 国产麻豆剧传媒精品国产免费 | 久久免费国产精品一区二区| 亚洲日产2021三区| 亚洲精品国产福利一二区|