7個你可能不認識的CSS單位

来源:http://www.cnblogs.com/www2846613430/archive/2016/03/10/5261327.html
-Advertisement-
Play Games

7個你可能不認識的CSS單位 眾所周知CSS技術我們雖然很熟悉,在使用的過程卻很容易被困住,這讓我們在新問題出現的時候變得很不利。隨著web繼續不斷地發展,對於新技術新解決方案的要求也會不斷增長。因此,作為網頁設計師和前端開發人員,我們別無選擇,必須熟悉我們手上的工具,做到知己知彼,這樣才能百戰不殆


                                                                                    7個你可能不認識的CSS單位

眾所周知CSS技術我們雖然很熟悉,在使用的過程卻很容易被困住,這讓我們在新問題出現的時候變得很不利。隨著web繼續不斷地發展,對於新技術新解決方案的要求也會不斷增長。因此,作為網頁設計師和前端開發人員,我們別無選擇,必須熟悉我們手上的工具,做到知己知彼,這樣才能百戰不殆。

  這就意味著有那麼些個特別的貨,雖然平常都不怎麼會用上,但是一旦某個地方需要它們了,他們就真的是特麽得合適不過來了呢。

  今兒,我就準備向大伙兒介紹一些你們之前可能很少見過CSS家伙們。他們每個都是度量的單位,類似pixel 和 em 這樣的,但是很有可能你之前從來就沒聽過這些家伙們!就讓我們一起來交個朋友吧~

  rem

  我們首先介紹下和我們熟悉的很相似的貨。em 被定義為相對於當前對象內文本的字體大小。炒個慄子,如果你給body小哥設置了font-size字體大小,那麼body小哥的任何子元素的1em就是等於body設置的font-size。

1

2

3

<body>

    <div   class="test">Test</div>

</body>

1

2

3

4

5

6

body {

    font-size: 14px;

}

div {

    font-size: 1.2em; // calculated   at 14px * 1.2, or 16.8px

}

  你看,這裡div這娃的字體大小是1.2em。解釋來說,就是他從body爹爹那裡繼承的字體大小(這裡是14px)的1.2倍,結果就是16.8px。

  但是,如果你用em一層一層級聯得定義嵌套元素的字體大小又會花生什麼事情呢?在下麵這一小段代碼里我們應用了和上面一樣一樣的CSS,每一個div都從它上一級父元素繼承了字體大小,並且逐漸得增加。

1

2

3

4

5

6

7

8

9

10

11

<body>

    <div>

        Test   <!-- 14 * 1.2 = 16.8px -->

        <div>

            Test   <!-- 16.8 * 1.2 = 20.16px -->

            <div>

                Test   <!-- 20.16 * 1.2 = 24.192px -->

            </div>

        </div>

    </div>

</body>

  實例

  雖然在某些地方這正是我們想要的,但是通常情況下我們還是希望就依賴單一的相對度量單位就好。這時候嘛,我們就可以使用 rem 了。 ‘r’是“root”的縮寫,意思就是1rem等於根元素的字體大小;大部分情況下,根元素就是<html>元素了。

1

2

3

4

5

6

<span id="0_nwp" style="width: auto;   height: auto; float: none;"><a id="0_nwl" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=20&is_app=0&jk=7e479ecd4ba6006&k=html&k0=html&kdi0=0&luki=3&mcpm=0&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_

id=1&sid=660bad4ec79e407&ssp2=1&stid=9&t=tpclicked3_hc&td=1922429&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F5463%2Ehtml&urlid=0"   target="_blank" mpid="0"

style="text-decoration:   none;"><span   style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">html</span></a></span>   {

    font-size: 14px;

}

div {

    font-size: 1.2rem;

}

  這樣在上面的那三個嵌套的div娃們的字體大小都是 1.2*14px = 16.8px 了。

  適用於網格佈局

  Rems 不僅僅只是在設置字體大小上很方便。再炒個慄子,你可以用基於html根元素字體大小的rem作為整個網格佈局或者UI庫的大小單位,然後在其他特定的地方用em單位。這樣將會給你帶來更多的字體大小和伸縮的可控性,

1

2

3

.container {

    width: 70rem; // 70 * 14px =   980px

}

  概念上來說,這個方法的思想就是讓你的界面根據你的內容進行縮放。但是,這樣做並不是對所有的情況都有意義。

  vh and vw

  響應式web設計離不開百分比。但是,CSS百分比並不是所有的問題的最佳解決方案。CSS的寬度是相對於包含它的最近的父元素的寬度的。但是如果你就想用視口(viewpoint)的寬度或者高度,而不是父元素的,那該腫麽辦? 這就是 vh 和 vw 單位為我們提供的。

  1vh 等於1/100的視口高度。慄子:瀏覽器高度900px, 1 vh = 900px/100 = 9 px。同理,如果視口寬度未750, 1vw = 750px/100 = 7.5 px。

  可以想象到的,他們有很多很多的用途。比如,我們用很簡單的方法只用一行CSS代碼就實現同屏幕等高的框。

.slide {

    height: 100vh;

}

  假設你要來一個和屏幕同寬的標題,你只要設置這個標題的font-size的單位為vm,那標題的字體大小就會自動根據瀏覽器的寬度進行縮放,以達到字體和viewport大小同步的效果,有木有?!

  實例

  vmin and vmax

  vh和 vm 依據於視口的高度和寬度,相對的,vmin 和 vmax則關於視口高度和寬度兩者的最小或者最大值。比如,瀏覽器的寬度設置為1100px,高度設置為700px, 1vmin = 1px, 1vmax = 11px。如果寬度設置為800px,高度設置為1080px, 1vmin就等於8px, 1vmax則未10.8px。

  那麼問題來了,我們應該在什麼場景下使用這兩個單位呢?

  假設有一個元素,你需要讓它始終在屏幕上可見。只要對其高度和寬度使用vmin單位,並賦予其低於100的值就可以做到了。再來個慄子,可以這樣定義一個至少有兩個邊觸摸到屏幕的方形:

1

2

3

4

.box {

    height: 100vmin;

    width: 100vmin;

}

                       

  如果你要讓這個方形框框始終鋪滿整個視口的可見區域(四邊始終觸摸到屏幕的四邊)

1

2

3

4

.box {

    height: 100vmax;

    width: 100vmax;

}

 

  結合使用這些單位可以為我們提供一個新穎有意思的方式來靈活地利用我們視口的大小。

  ex and ch

  ex 和 ch 單位,類似於 em 和 rem, 依賴於當前的字體和字體大小。 但是,不同的是,這兩貨是基於字體的度量單位,依賴於設定的字體。

  ch 單位通常被定義為數字0的寬度。你可以在Eric Meyers的博客里找到關於它的一些有意思的討論,例如將一個等寬字體的字母”N”的寬度設置為40ch,那麼在另一種類型的字體里它卻可以包含40個字母。這個單位的傳統用途主要是盲文的排版,但是除此之外,肯定還有可以應用他的地方。

  ex 定義為當前字體的小寫x字母的高度或者 1/2 的 1em。 很多時候,它是字體的中間標誌。

 

x-height; the height of the lower case x

  這些單位有很多用途,大部分用於版式的微調。比方說,sup 元素(上角文字標),可以通過position:relative;bottom: 1ex;實現 。類似的方法,你可以實現一個下角文字標。瀏覽器預設的方式是利用上標和下標特定垂直對齊規則,但是如果你想更細粒度更精確得控制,你可以像下麵這樣做:

1

2

3

4

5

6

7

8

sup {

    position: relative;

    bottom: 1ex;

}

sub {

    position: relative;

    bottom: -1ex;

}

  結論

  持續關註不斷發展壯大的CSS技術無疑是很重要的,這樣你才能掌握你所持有的工具的全部技能。說不定將來你遇到的某個特殊的問題就需要使用這些複雜的單位來解決。花點時間去閱讀新的技術規範,註冊訂閱一些不錯的網站或者資源,類似 cssweekly這樣的。 當然不要忘記現在就去註冊像TUTS +這樣的網站來獲取每周的更新,課程,免費教程還有資源!

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 package com.shejimoshi.behavioral.Strategy; 2 3 4 /** 5 * 功能:上班的介面 6 * 時間:2016年3月9日下午8:53:34 7 * 作者:cutter_point 8 */ 9 public interface ToWork 10 {
  • 閑話 寫這篇博客來記錄下這兩三個月來的所學所感。 目前市面上,有許許多多互聯網公司,對於類似BAT那種級別的,我們就不說了。那種剛起步,剛經歷第一輪融資或者投資的小型互聯網公司比比皆是。當這些公司業務量上來的時候、用戶量上來的時候,總是會有一個擔憂,之前運行穩定的公司平臺架構能否繼續穩定的服務下去,
  • 儘管MVC早已不是什麼新鮮話題了,但是從近些年一些優秀MVC框架的設計上,我們還是會發現MVC在架構設計上的一些新亮點。本文將對傳統MVC架構中的一些弊病進行解讀,瞭解一些優秀MVC框架是如何化解這些問題的,揭示其中所折射出的設計思想與設計理念。 MVC回顧 作為一種經典到不能再經典的架構模式,MV
  • 入駐博客園兩個月之後的第一篇隨筆,希望能夠做到三個原則: One:不浪費自己的時間, Tow:不浪費讀者的時間, 第三就是希望有緣的朋友們多多指教,共度前端快樂的大坑!!! 咱們今天來做一個居家旅行必備的小tips,展現前端老前輩的智慧,積澱的文化... 先來一個小口訣【呆會會用到的,不用著急記住它
  • 作為一名做為在前端死纏爛打6年並且懶到不行的攻城士,這幾年我還是閱過很多同門從知名到很知名的各種前端框架,本來想拿15-20個框架來分享一下,但在跟幾個前輩討教寫文章的技巧時果斷被無情的打擊了,所以這裡我還是低調的只拿出10個框架來個大鍋亂燉來簡單介紹,湊夠字數也就全劇終了。 原本寫這篇文章想圍繞著
  • 前段時間做個項目,是個網頁的聊天界面,聊天的內容使用flash製作,我需要將flash的swf插件放到頁面上,然後獲取聊天內容, 1.將文件在頁面上顯現出來: 如圖,正中間使用後臺製作出來的swf文件。 <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-4
  • 現在大部分企業對瀏覽器相容要求是IE7+或者IE8+,要求IE6的很少,此處一併寫出。 IE6: _margin-top: 20px; IE6+IE7: *margin-top: 20px; +margin-top: 20px; IE6+: margin-top: 20px\9; IE8+: mar
  • hggroup通常放在標簽內部,不過不做強制要求! ​adress 通常用於作者的聯繫信息。比如名字,Email,電話,地址。標簽內字體顯示斜體。 ​ 與 標簽的比較:比div簡潔,更少的用到id或class。 ​新佈局的優點: 1.更註重於內容而不是形式;​ ​2.對人的友好,更加直觀,增加了代碼
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...