CSS-@規則(At-rules)常用語法使用總結

来源:https://www.cnblogs.com/jimojianghu/archive/2023/02/03/17054828.html
-Advertisement-
Play Games

At-rules規則是目前CSS中一種常見的語法規則,它使用一個"@"符號加一個關鍵詞定義,後面跟上語法區塊,如果沒有則以分號結束即可。 這種規則一般用於標識文檔、引入外部樣式、條件判斷等等,本文是對該規則的使用總結。 常用規則 @import @import 主要用於從其他樣式表導入新的樣式規則, ...


At-rules規則是目前CSS中一種常見的語法規則,它使用一個"@"符號加一個關鍵詞定義,後面跟上語法區塊,如果沒有則以分號結束即可。
這種規則一般用於標識文檔、引入外部樣式、條件判斷等等,本文是對該規則的使用總結。

常用規則

@import

@import 主要用於從其他樣式表導入新的樣式規則,語法:@import url|string list-of-mediaqueries;

  • url|string:需要引入的樣式資源路徑,相對路徑或絕對路徑都可以;
  • list-of-mediaqueries:逗號分隔的條件列表,判斷什麼條件下才引入該樣式資源,支持媒體查詢條件。
@import "./reset.css";
@import url("./reset.css")

當使用條件判斷時,可以使用媒體查詢條件。

/* 寬度小於1000px才會生效 */
@import "./reset.css" screen and (max-width: 1000px); 

另外,當在html文件或樣式文件中使用該語法(不使用現代框架),有兩點需要註意:

  • 引入位置:必須位於樣式文件或<style>區塊的頭部,前面不可以出現其他css樣式,但可以在@charset 後面。
  • 不能在條件嵌套語法中使用。

當使用vue等框架的時候,則可以在 @import 前出現css樣式,也能在條件嵌套語法中使用,是因為導入的樣式資源會被解析具體的樣式到頁面上。

@font-face

@font-face 用於載入自定義字體。屬於目前前端比較常用的語法,也有多開源的字體圖標庫可以使用。
既支持提供字體資源文件路徑進行載入,也支持用戶本地安裝的字體載入。

@font-face {
  font-family: "iconfont";
  src: url('https://at.alicdn.com/t/font_....ttf?t=1545807318834');
}
@font-face {
  font-family: "iconfont";
  src: url('./font_985780_km7mi63cihi.ttf?t=1545807318834');
}

如上,就是一個載入字體資源的示例,一個載入cdn上的地址,一個載入本地文件。

@font-face 定義了一個CSS區塊,有多個屬性取值:

  • font-family:指定字體名字,被用於font或font-family屬性;
  • src:載入字體資源;
    1. url():載入字體資源文件;
    2. local():載入本地電腦字體名稱,如 src: local("Arial");
  • font-style:對src指定字體的描述;
  • font-variant
  • font-weight
@font-face {
  font-family: "sys-Arial";
  src: local("Arial");
  font-weight: normal;
}

如上,使用local載入當前電腦系統的字體名稱。

@charset

@charset 為樣式表文件指定所需要使用的字元編碼,只能在CSS文件中使用,語法:@charset "charset";

  • charset:指定使用的字元集。
@charset "UTF-8";

特點:

  • 在樣式表文件中使用,不能在html文件的<style>區塊或元素內樣式屬性中使用。
  • 必須出現在樣式表文件的最前面。
  • 使用有效的字元編碼和雙引號,並且中間只能間隔一個空格字元,且以分號結尾。
  • 不能在條件嵌套語法中使用。
  • 如果有多個@charset聲明,則只有第一個會生效。

瀏覽器解析樣式表文件使用字元編碼的順序:

  1. 文件的編碼格式;
  2. http請求響應中的charset屬性值;
  3. @charset;
  4. link設置;
  5. 預設UTF-8;

@keyframes

@keyframes 通過定義動畫序列中的關鍵幀的樣式,用來控制CSS動畫的中間步驟。
語法定義:@keyframes animationname { keyframes-selector { css-styles; } }

  • animationname:動畫名稱,作為動畫引用時的標識符;
  • keyframes-selector:關鍵幀的名稱選擇器,用於指定關鍵幀被用於動畫過程中的哪個節點,一般是時間節點,有兩種取值方式:
    1. 百分比:0% - 100%,時間百分比的節點
    2. from和to:from等同起始時間from,to等同結束時間
  • css-styles:指定當前關鍵幀的樣式屬性值。
@keyframes dropIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes wave {
  0% {
    transform: translateY(0);
  }
  45% {
    transform: translateY(-100%);
  }
  100% {
    transform: translateY(0);
  }
}

如上,使用兩種方式定義的關鍵幀動畫樣式。

特性說明:

  • 當沒有指定開始或結束狀態,則將元素的享有樣式作為開始或結束狀態;
  • 當有多個同名稱的關鍵幀時,樣式屬性相同以最後一次為準,樣式屬性不同則會合併所有屬性共同起作用;
  • 如果再關鍵幀樣式中使用不能用作動畫的屬性,會被忽略;
  • 在關鍵幀中使用 !important 限定樣式會被忽略,不起作用。

為了獲得最佳動畫體驗,應該始終定義開始和結束狀態。

@media

@media 媒體查詢,是基於不同的媒體查詢結果定義不同的樣式。多用於針對不同屏幕尺寸進行差異化的樣式設置,做一些響應式頁面設計。另外,如果縮放瀏覽器的大小,也可以根據查詢寬高重新渲染頁面樣式等。

語法: @media mediatype and|not|only (media feature) { CSS-Style; }

說明:

  • mediatype:媒體類型,描述設備類別,一般有 all、print、screen、speech,預設all:

    • all:所有設備;
    • print:列印預覽模式;
    • screen:用於屏幕;
    • speech:語音合成器;
  • 媒體特性(media feature):描述設備、環境的具體條件特征;必須使用括弧括起來,常用的有:

    • 寬高類:width、max-width、min-width、height、max-height、min-height等;
    • 其他:color、grid、orientation、resolution、scan等;
  • 邏輯操作符:and、not、only、,:

    • and:多個規則組合,每條都滿足才行;
    • not:否定某個查詢規則;
    • only:整個查詢匹配時才滿足;
    • 逗號,:將多個查詢組合,一條滿足即可,類似 or;
@media screen (max-width: 1000px) { 
  div {
    background-color: red;
  }
}

/*或者嵌套*/
@media screen {
  @media (max-width: 1000px) {
    div {
      background-color: red;
    }
  }
}

如上示例,即是我們經常使用的方式。

@media 媒體查詢也能作為 @import 的條件使用,可見上面已有介紹。

link和style中使用

在引入樣式表的 <link> 語句中,也可以使用媒體查詢,根據不同的條件載入不同的樣式文件:

<link rel="stylesheet" media="mediatype and|not|only (media feature)" href="./reset.css">

<link rel="stylesheet" media="screen and (max-width: 1000px)" href="./reset.css">

<style> 樣式區塊也可以使用媒體查詢:

<style media="screen and (max-width: 1000px)">
  div {
    background-color: red;
  }
</style>

JS檢測媒體查詢

使用Window.matchMedia() 和MediaQueryList.addListener() 方法來測試和監控媒體狀態。
使用方式:

// 獲取媒體查詢MediaQueryList對象,有matches
const screenMediaQueryList = Window.matchMedia('(max-width: 1000px)')
console.log(1, screenMediaQueryList)
// matches: true  -- 當前媒體查詢規則已生效,為false則不生效
// media: "(max-width: 1000px)"

screenMediaQueryList.addEventListener('change', (res) => {
  console.log(2, res)
})

可以獲取當前是否已使用該媒體查詢規則,或者監聽媒體查詢狀態的變化事件。

非常用規則

以下是一些使用較少的@規則。

@supports

@supports 用於指定依賴於瀏覽器一個或多個特定CSS功能的支持申明。常用來判斷當前瀏覽器是否支持某個CSS特性功能,所以又被稱為特性查詢。
ie不支持。

如判斷自定義屬性,詳見自定義屬性知識介紹。

@supports ((--a: 0)) {
  /* 支持自定義屬性 */
}
@supports (not (--a: 0)) {
  /* 不支持自定義屬性 */
}

語法,由一組樣式聲明和一條支持條件構成,支持條件可以是多條,可以使用 and、or、not 等進行結合處理;還可以使用圓括弧調整優先順序。

/* 瀏覽器支持grid */
@supports (display: grid) {
  div {}
}

/* 不支持grid */
@supports not (display: grid) {
}

/* 不支持gri和flex */
@supports not ((display: grid) and (display: flex)) {
}

其他

  • @namespace:是用來定義使用在 CSS 樣式表中的 XML 命名空間的 @規則。定義的命名空間可以把通配、元素和屬性選擇器限制在指定命名空間里的元素。
  • @page:主要用於列印文檔時修改某些CSS屬性,相容性不高。
  • counter-style:定義如何把一個計數器的值轉化為字元串表示。

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

-Advertisement-
Play Games
更多相關文章
  • 一、IO口輸入內容 在學習按鍵之前先學習一下如何往單片機的IO口輸入內容。 其實輸入的本質就是往單片機的一個埠在外部給一個電平,然後單片機中的程式去讀取那個埠的電平即可完成一次輸入。 51單片機的輸入電平是非常簡單的,不需要像stm32一樣,需要調節埠的模式才能讀取埠的電平,51單片機只需要 ...
  • 轉眼間上次寫文章已經是 2022年12月15日的事情啦,本來從2022年7月份開始寫作之後保持著每周一篇,然而從12月15日後斷更了這麼久,經歷了,隔離、陽、過年、從今天開始繼續堅持寫作,本片文章給大家分享 SqlServer服務中利用觸發器對指定賬戶進行登錄ip限制從而提升賬戶的安全性,這樣可以靈 ...
  • 數據類型 整數數據類型 特殊說明: ​ 對於整數類型,MySQL還支持在類型名稱後面加小括弧(M),而小括弧中的M表示顯示寬度,M的取值範圍是(0, 255)**。int(M)這個M在欄位的屬性中指定了unsigned(無符號)和zerofill(零填充)的情況下才有意義。**表示當整數值不夠M位時 ...
  • 一、前言 很多企業管理系統,在單據及報表的使用時,都會提供小數點有效數字後0是否顯示的功能。在金蝶雲星空的BOS平臺,這個功能叫"隱藏尾0"。現在假如自己開發一個系統,提供可配置的"隱藏尾0"的功能,該如何實現呢?以下是資料庫開發方面的解決方案,僅供參考。 二、方案 方法一、將數據轉換為REAL類型 ...
  • 閱識風雲是華為雲信息大咖,擅長將複雜信息多元化呈現,其出品的一張圖(雲圖說)、深入淺出的博文(雲小課)或短視頻(雲視廳)總有一款能讓您快速上手華為雲。更多精彩內容請單擊此處。 摘要:GaussDB性能調優過程需要綜合考慮多方面因素,因此,調優人員應對系統軟體架構、軟硬體配置、資料庫配置參數、併發控制 ...
  • 華為 HMS Core 運動健康服務(HUAWEI Health Kit)提供原子化數據開放。應用在獲取用戶數據授權後,可通過介面訪問運動健康數據,對用戶數據進行讀寫等操作,為用戶提供運動健康類數據服務。 開發者應用在開發和測試階段訪問用戶運動或健康數據時,會有100個用戶的數量限制,需要通過“申請 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 本文用一個簡單的 demo 講解 App端 半屏連續掃碼 的實現方式,包括(條形碼、二維碼等各種各樣的碼)。 我會從實現思路講起,如果你比較急可以直接跳到 動手實現 章節獲取代碼。 開發和運行環境 開發工具:HBuilderX 前端框架: ...
  • Web 頁面可以使用多種方式實現動畫效果,其中最常用的有兩種: CSS 動畫:通過 CSS 中的 transition 和 animation 屬性來實現動畫效果。CSS 動畫實現起來簡單,性能消耗小,支持廣泛。 JavaScript 動畫:通過 JavaScript 代碼來實現動畫效果。JavaS ...
一周排行
    -Advertisement-
    Play Games
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...
  • 1. JUnit 最佳實踐指南 原文: https://howtodoinjava.com/best-practices/unit-testing-best-practices-junit-reference-guide/ 我假設您瞭解 JUnit 的基礎知識。 如果您沒有基礎知識,請首先閱讀(已針 ...