首頁 web前端 css教學 關於CSS中細節的詳解

關於CSS中細節的詳解

Oct 31, 2017 am 10:28 AM
css 詳解

  這樣寫是沒問題,直到有個子元素需要設定一個不同的字體大小,比如,在這樣的標籤當中: 

The cat sat on the mat.
登入後複製

  如果你要設定span的字體大小為1.2em ,你需要做什麼?拿出計算器,算1.2除以1.4是多少,結果如下: 

p span { font-size: 0.85714em; }
登入後複製

  這個問題不限於em。如果用百分比來建立響應式的串流佈局網站,而百分比是與容器相關的,所以,如果要定義一個元素為它的容器的40%,它的高是75%,寬則需要設定為53.33333% 。 
  很明顯,這很不方便。 
根相關的長度單位 
  為了修正字體大小定義的問題,現在可以使用單位rem(root em)。 rem同樣是相對單位,但是它所對應的是固定的基本值,這個固定的基本值也就是文檔的根元素的字體大小(在HTML文件中,就是html元素)。假設和上個例子一樣,同樣設定10px的字體大小為根元素的大小,那麼CSS這樣寫就OK了: 

p { font-size: 1.4rem; } p span { font-size: 1.2rem; }
登入後複製

  這兩個CSS規則都是相對於根元素的字體大小,這樣的程式碼更優雅簡單,特別是在設定簡單的數值如10px或12px的時候。這樣和使用px值很相似,不同點在於rem是可擴展的。 
  在整篇文章介紹的特性中,rem特性相對來說是相容性比較好,高級瀏覽器都能支持,包括IE9在內,除了Opera Mobile。 
視窗相關的長度單位 
  覺得rem單位很酷吧,如果還有另外一組單位能解決百分比的問題,那就更酷了。它和rem的道理相似,不同點在於,它相對的不是文檔的根元素,而是相對於設備視窗本身的大小。 
  這兩個單位就是vh和vw,也就是相對於視窗大小的高和寬。每個單位在前面加上數字,代表的是多少個百分比。 

p { height: 50vh; }
登入後複製

  在上面的例子,高度設定為視窗高度的一半。 1vh相當於一個百分比的視窗高度,所以50vh即是50%的視窗高度。 
  如果視窗大小改變了,那麼這個值也隨之改變。這相對百分比來說,好處是不需要擔心父容器,不管它的父容器如何,10vw的元素會一直是10%的視窗大小。 
  相應地,有vmin單位,相當於vh或vw的最小值,最近還宣布有vmax單位會被加到規範文檔裡面(雖然在這篇文章發布的時候還沒有)。 
  現在支援這個功能的有IE9+、Chrome和Safari 6。 
運算式的值 
  如果你在做響應式的串流佈局網站,常常會遇到混合單位的問題-用百分比設定柵格,但是又用固定像素寬度設定margin。如: 

p { margin: 0 20px; width: 33%;}
登入後複製

  如果佈局只用到padding和border,你可以使用box-sizing來解決,但是對於margin就無能為力了。更好、更靈活的方法是使用calc()函數,設定不同單位之間的數學方程式,如: 

p { margin: 0 20px; width: calc(33% - 40px);}
登入後複製

  它不僅可以用來計算寬,還可以用來計算長度— —如果有必要,還可以在calc()裡面再加上calc()。 
  這個特性IE9+和Firefox都支持,Firefox需要加上 -moz- 前綴(在版本16或17可能不用加前綴),Chrome和Safari也支持,但需要加上 -webkit- 前綴。然而,行動Webkit還不支援。 
載入字體庫的部分字體 
  優越的效能往往很重要,尤其是市場上各種各樣的行動裝置——導致連接速度的差異和不確定性——更加體現了這個重要性。其中一個加快頁面載入速度的方法,就是減少外部檔案個數,@font-face的一個新屬性unicode-range就是為此而生。 
  這個屬性就是unicode-range(編碼範圍),代表的是編碼字型的參數範圍。在載入外部文件的時候,只有那些被使用的字體才會被加載,而不是整套字體庫。下面的程式碼示範如何從foo.ttf字體庫中只載入三個字體: 

@font-face {font-family: foo;src: url(‘foo.ttf’);unicode-range: U+31-33;}
登入後複製

  这点对于使用字体图标的页面尤其有用。我测试过,使用unicode-range,加载字体文件的时间平均减少了0.85秒,也不是小数目了。当然,你可能不会这么想。
  这个属性,目前可以在IE9+、Webkit浏览器(如Chrome和Safari)中运行。
新的伪类
  单位和值都应该好好利用,但是,让我更兴奋的是选择器和伪类。完善的选择器模式,即使只有少数浏览器支持,都让我兴奋不已。引用乔布斯的话:你要把栅栏的里面修得和外面一样漂亮,即使别人看不到里面——因为你自己知道。
  我第一次使用:nth-of-type()的时候,简直是一次突破,就像我冲出了思想的桎梏。好吧,我有些夸张了。但有些新的CSS伪类,确实值得狂热一番。
否定伪类
  你大概不知道 :not() 伪类的好,除非你亲自实践一番。带有参数的 :not() 其实就是普通的选择器——不是复合选择器。一组元素加上选择器 :not(),表示满足这个参数的元素会被排除出去。听起来有些复杂吧?但是实际上非常简单。
  假设:要对项目列表的奇数行进行选择,但是最后一行除外。如果是以前,需要这样写:

li { color: #00F; } li:nth-child(odd) { color: #F00; } li:last-child { color: #00F; }
登入後複製

  现在,通过设定:last-child作为否定伪类的参数,就可以把最后一个元素排除,这样少了一行代码,从而更加的简洁和易维护。

li { color: #00F; } li:nth-child(odd):not(:last-child) { color: #F00; }
登入後複製

  否定伪类看起来并没有什么惊人之处,你可以不用它,但是它还是挺实用的。我曾经把它用在基于Webkit的项目当中,优势还是挺明显的。说实话,它是我最喜欢的伪类之一。
  是的,我有最喜欢的伪类。
  在本文提到的特性当中,否定伪类是兼容性最好的,它被IE9+和高级浏览器支持(不需要加浏览器产商前缀)。如果你熟悉jQuery,你可能习惯用它——版本1.0开始就有了,以及相似的not()方法。
“适用于”伪类
  :matches() 伪类可以用普通的选择器、复合选择器、逗号隔开的列表或任何的选择器组合作为参数。太棒了!但是,它能做什么?
  :matches() 伪类最强大的地方就是聚合多行选择器。例如,要选择父容器里面其中几个不同子容器里面的p元素,在这之前,代码或许会写成这样:

.home header p,.home footer p,.home aside p {color: #F00;}
登入後複製

  有了:matches()伪类,就可以把共同点提取出来,缩减代码量。该例子里面,选择器的共同点是以home为起点、以p为终点,所以可以用:matches()把中间的所有元素集合起来。是不是有些困惑?看看代码就明白了:

.home :matches(header,footer,aside) p { color: #F00; }
登入後複製

  这其实是CSS4的一部分(确切地说,是CSS选择器第四等级),这份规范文档还提到将会有类似的语法(以逗号隔开的复合选择器)应用于:not()伪类。兴奋ing! 
  目前,:matches()可以在Chrome和Safari浏览器中运行,但是要加上前缀-webkit-,Firefox也支持,但是要按照旧的写法:any(),同时要加上-moz-前缀。 

以上是關於CSS中細節的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vue中怎麼用bootstrap vue中怎麼用bootstrap Apr 07, 2025 pm 11:33 PM

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

HTML,CSS和JavaScript的角色:核心職責 HTML,CSS和JavaScript的角色:核心職責 Apr 08, 2025 pm 07:05 PM

HTML定義網頁結構,CSS負責樣式和佈局,JavaScript賦予動態交互。三者在網頁開發中各司其職,共同構建豐富多彩的網站。

bootstrap怎麼寫分割線 bootstrap怎麼寫分割線 Apr 07, 2025 pm 03:12 PM

創建 Bootstrap 分割線有兩種方法:使用 標籤,可創建水平分割線。使用 CSS border 屬性,可創建自定義樣式的分割線。

bootstrap怎麼調整大小 bootstrap怎麼調整大小 Apr 07, 2025 pm 03:18 PM

要調整 Bootstrap 中元素大小,可以使用尺寸類,具體包括:調整寬度:.col-、.w-、.mw-調整高度:.h-、.min-h-、.max-h-

bootstrap怎麼插入圖片 bootstrap怎麼插入圖片 Apr 07, 2025 pm 03:30 PM

在 Bootstrap 中插入圖片有以下幾種方法:直接插入圖片,使用 HTML 的 img 標籤。使用 Bootstrap 圖像組件,可以提供響應式圖片和更多樣式。設置圖片大小,使用 img-fluid 類可以使圖片自適應。設置邊框,使用 img-bordered 類。設置圓角,使用 img-rounded 類。設置陰影,使用 shadow 類。調整圖片大小和位置,使用 CSS 樣式。使用背景圖片,使用 background-image CSS 屬性。

bootstrap怎麼設置框架 bootstrap怎麼設置框架 Apr 07, 2025 pm 03:27 PM

要設置 Bootstrap 框架,需要按照以下步驟:1. 通過 CDN 引用 Bootstrap 文件;2. 下載文件並將其託管在自己的服務器上;3. 在 HTML 中包含 Bootstrap 文件;4. 根據需要編譯 Sass/Less;5. 導入定製文件(可選)。設置完成後,即可使用 Bootstrap 的網格系統、組件和样式創建響應式網站和應用程序。

bootstrap怎麼看日期 bootstrap怎麼看日期 Apr 07, 2025 pm 03:03 PM

答案:可以使用 Bootstrap 的日期選擇器組件在頁面中查看日期。步驟:引入 Bootstrap 框架。在 HTML 中創建日期選擇器輸入框。 Bootstrap 將自動為選擇器添加樣式。使用 JavaScript 獲取選定的日期。

bootstrap按鈕怎麼用 bootstrap按鈕怎麼用 Apr 07, 2025 pm 03:09 PM

如何使用 Bootstrap 按鈕?引入 Bootstrap CSS創建按鈕元素並添加 Bootstrap 按鈕類添加按鈕文本

See all articles