2017年要學習的三個CSS新特性

来源:http://www.cnblogs.com/yangyoucun/archive/2017/01/19/6308064.html
-Advertisement-
Play Games

這是翻譯的一篇文章,原文是: "3 New CSS Features to Learn in 2017" ,翻譯的不是很好,如有疑問歡迎指出。 新的一年,我們有一系列新的東西要學習。儘管CSS有很多新的特性,但有三個特性令我最激動併進行學習。 1. Feature Queries(特性查詢) 在這之 ...


這是翻譯的一篇文章,原文是:3 New CSS Features to Learn in 2017,翻譯的不是很好,如有疑問歡迎指出。

新的一年,我們有一系列新的東西要學習。儘管CSS有很多新的特性,但有三個特性令我最激動併進行學習。

1. Feature Queries(特性查詢)

在這之前我寫了一篇關於Feature Queries的文章the one CSS feature I really want。現在,它已經在這裡了!目前所有主流瀏覽器都支持特征查詢(包括Opera Mini),IE瀏覽器除外。

Feature Queries,使用@supports規則,允許我們在它的條件區域內寫入CSS規則,只有噹噹前的用戶瀏覽器支持某個CSS屬性-值對的時候,該CSS代碼塊才會生效。

舉一個簡單的例子,下麵的代碼中,只有當瀏覽器支持display: flex的時候才會應用Flexbox樣式。

@supports ( display: flex ) {
    .foo { display: flex; }
}

另外也可以使用一些操作符,比如andnot,我們就可以創建更複雜的特征查詢。例如,我們可以識別一個瀏覽器是否支持老版本的Flexbox語法。

@supports ( display: flexbox ) and ( not ( display: flex ) ) {
    .foo {
        display: flexbox;
    }
}

瀏覽器支持

拓展

Feature Queries同樣支持Javascript介面:CSS.supports(),同樣使用上面的例子,看下如何使用:

if ( CSS.supports( '(display: flex)') ) {
    console.log('支持flex')
} else {
    console.log('不支持flex')
}

if ( CSS.supports( '(display: flexbox)' ) ) {
    console.log('支持flexbox')
} else {
    console.log('不支持flexbox')
}

2. Grid Layout(柵格佈局)

CSS柵格佈局模塊定義了一個創建以網格為基礎的佈局系統。這和彈性盒佈局模塊相似,但柵格佈局是專門為頁面佈局設計,因此有很多不同的特性。

Explicit Item Placement

一個柵格系統是由柵格容器(Grid Containe,由display: grid創建)、柵格項(Grid Item)組成。在我們的CSS中,我們可以很容易且明確的組織佈局以及柵格項的順序、與標記中的佈局相獨立。

例如,我在用CSS柵格進行聖杯佈局一文中如何使用柵格佈局模塊創建聖杯佈局。

Holy_Grail_CSS_Grid

主要的HTML代碼:

<body class="hg">
    <header class="hg__header">Title</header>
    <main class="hg__main">Content</main>
    <aside class="hg__left">Menu</aside>
    <aside class="hg__right">Ads</aside>
    <footer class="hg__footer">Footer</footer>
</body>

主要的CSS代碼:

.hg__header { grid-area: header; }
.hg__footer { grid-area: footer; }
.hg__main { grid-area: main; }
.hg__left { grid-area: navigation; }
.hg__right { grid-area: ads; }

.hg {
    display: grid;
    grid-template-areas: "header header header"
                         "navigation main ads"
                         "footer footer footer";
    grid-template-columns: 150px 1fr 150px;
    grid-template-rows: 100px 
                        1fr
                        30px;
    min-height: 100vh;
}

@media screen and (max-width: 600px) {
    .hg {
        grid-template-areas: "header"
                             "navigation"
                             "main"
                             "ads"
                             "footer";
        grid-template-columns: 100%;
        grid-template-rows: 100px 
                            50px 
                            1fr
                            50px 
                            30px;
    }
}

靈活的長度

CSS柵格模塊介紹了一個新的長度單位:fr單元,它表示在柵格容器中剩餘的空間部分。

我們就可以通過柵格容器的可用空間來分配柵格項的高度與寬度。例如,在聖杯佈局中,我想讓main容器占滿除兩邊容器之外的所有空間,為了實現這個效果,只需寫如下一句代碼:

.hg {
    grid-template-columns: 150px 1fr 150px;
}

元素間間隔

我們可以專門定義柵格佈局中元素間的空隙,grid-row-gapgrid-column-gap以及grid-gap屬性可以完成這項工作,這些屬性接受一個<length-percentage>百分比數據類型作為值,與內容區域的尺寸對應的百分比。

例如,有5%的空隙,可以這樣寫:

.hg {
    display: grid;
    grid-column-gap: 5%;
}

瀏覽器支持

CSS網格模塊將最早在今年三月在瀏覽器中可用(提供預設支持)。

現在想體驗怎麼辦?

參考我的這篇記錄:各個瀏覽器開啟CSS Grid Layout的方式

3、Native Variables

最後一個是本地CSS變數。該模塊介紹了創建用戶自定義變數的方法,可以給一個CSS屬性分配一個變數。

例如,如果我有一個主題色,這個主題色被用在了好幾個地方,這時候,就可以抽象這個主題色到一個變數中,並且在使用的時候引用這個變數,這樣比把這個顏色寫到多個地方更容易維護。

:root {
  --theme-colour: cornflowerblue;
}

h1 { color: var(--theme-colour); }  
a { color: var(--theme-colour); }  
strong { color: var(--theme-colour); } 

這種效果在之前我們一般藉助CSS預處理器來實現,比如SASS,但是CSS變數有個優點就是一直存在於瀏覽器中。這意味著這些變數值可以線上修改。例如,為了更新--theme-colour屬性值,可以通過如下方式:

const rootEl = document.documentElement;  
rootEl.style.setProperty('--theme-colour', 'plum');  

瀏覽器支持

2017年什麼CSS特性最讓你激動?



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

-Advertisement-
Play Games
更多相關文章
  • 前面的話   當我們通過某些行為(點擊、移動或滾動)觸發頁面進行大面積繪製的時候,瀏覽器往往是沒有準備的,只能被動使用CPU去計算與重繪,由於沒有事先準備,應付渲染夠嗆,於是掉幀卡頓。而CSS屬性will change為web開發者提供了一種告知瀏覽器該元素會有哪些變化的方法,這 ...
  • 最近的計劃,就是每天來幾個特效,當然這裡有限制,在什麼候選區只能放一個,還每天有限制發佈的,哎, 啊 終於寫完了,看到一個挺好玩的東西,想到能不能用網頁的特效做出來,試試唄!不過,一想肯東有很多的 相類似的了,不過,反正就是挺有成就感的。高興即來淫詩一首,兩眼黑黑,燈下黑黑,嘿嘿嘿嘿嘿嘿嘿嘿。。。 ...
  • 一、set 1.基本用法 2.Set實例的屬性 3.Set實例的方法 4.遍歷操作 二、WeakSet 三、Map結構的目的和基本用法 實例的屬性和操作方法 遍歷方法 Map結構轉為數組結構,比較快速的方法是結合使用擴展運算符(...)。 四、WeakMap WeakMap與Map在API上的區別主 ...
  • 在一年前初學js的時候,看過很多關於非同步編程的講解。但是由於實踐經驗少,沒有辦法理解的太多,太理論的東西也往往是看完就忘。 經過公司的三兩個項目的鍛煉,終於對js非同步編程有了比較具體的理解。但始終入門較淺,在這裡就當是給自己一個階段性的總結。 在非同步編程中,一條語句的執行不能依賴上一條語句執行完畢的... ...
  • /** * 第一種Ajax提交方式 * 這種方式需要直接使用ext Ajax方法進行提交 * 使用這種方式,需要將待傳遞的參數進行封裝 * @return entitySearch.firstname:document.all.firstname.value, */function saveUser ...
  • moment非常強大,提供了很多時間方法的封裝,項目需要一個小倒計時的功能,網上找了很多不合適,決定自己寫一個,直接上代碼 用法: html頁面首先要引入moment才能使用我上面的方法 假設HTML里要放入倒計時的地方在這裡 頁面上可以寫js: 看官們外觀可以修改上述代碼去做出你自己的風格,以上內 ...
  • 最近剛做完一個移動端的項目,產品之無敵,過程之艱辛,我就不多說了,記錄下在這個項目中遇到的問題,以防萬一,雖然這些可能都是已經被N多前輩解決掉了的問題,也放在這裡,算是為自己漫漫前端路鋪了一顆小石子兒吧,也在文末留下自己未能解決的疑問,希望看到的朋友能解惑。 都知道做移動端的開發,在電腦上調試好了的 ...
  • 項目中經常用到三角形,現在給大家講下用純CSS寫的下三角實心圖形 其他方向的三角圖形自己調樣式哈,舉一反三,不要這麼懶嘛,自己弄才會進步。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...