CSS學習摘要-數值和單位及顏色

来源:https://www.cnblogs.com/tielemao/archive/2018/05/31/9118429.html
-Advertisement-
Play Games

在CSS中,值的類型有很多種,一些很常見,一些你卻幾乎沒怎麼遇到過。我們不會在這篇文檔中面面俱到地描述他們,而只是這些對於掌握CSS可能最有用處的這些。本文將會涉及如下CSS的值: * 數值: 長度值,用於指定例如元素寬度、邊框(border)寬度或字體大小;以及無單位整數。用於指定例如相對線... ...


在CSS中,值的類型有很多種,一些很常見,一些你卻幾乎沒怎麼遇到過。我們不會在這篇文檔中面面俱到地描述他們,而只是這些對於掌握CSS可能最有用處的這些。本文將會涉及如下CSS的值:

  • 數值: 長度值,用於指定例如元素寬度、邊框(border)寬度或字體大小;以及無單位整數。用於指定例如相對線寬或運行動畫的次數。
  • 百分比: 可以用於指定尺寸或長度——例如取決於父容器的長度或高度,或預設的字體大小。
  • 顏色: 用於指定背景顏色,字體顏色等。
  • 坐標位置: 例如,以屏幕的左上角為坐標原點定位元素的位置。
  • 函數: 例如,用於指定背景圖片或背景圖片漸變。

數值

你會在很多地方看到CSS單位中使用到數值。這一部分將會討論數值的最常用類別。

長度和尺寸

在CSS佈局、排版等等的所有時候,你都會使用到長度/尺寸單位(<length>)。我們不妨先看一個簡單的例子——先上HTML:

 <p>This is a paragraph.</p>
<p>This is a paragraph.</p>
<p>This is a paragraph.</p>

然後是CSS:

p {
  margin: 5px;
  padding: 10px;
  border: 2px solid black;
  background-color: cyan;
}

p:nth-child(1) {
  width: 150px;
  font-size: 18px;
}

p:nth-child(2) {
  width: 250px;
  font-size: 24px;
}

p:nth-child(3) {
  width: 350px;
  font-size: 30px;
}

結果如下:

在這個例子中我們做了以下事情:

  • 分別將每個段落的 marginpaddingborder-width 設置為5 pixels, 10 pixels 和 2 pixels。一個單獨的margin/padding值表示所有的4個面都被設置成同樣的值。邊框也被設置成了 border 的縮寫值。
  • 為三個不同的段落設置越來越大的寬度(width )像素值,也就是意味著越往下盒子越大。
  • 為三個不同的段落設置越來越大字型大小( font-size)像素值,也就是意味著越往下文本越大。font-size代表字體/字形的高度。

像素 (px) 是一種絕對單位(absolute units 因為無論其他相關的設置怎麼變化,像素指定的值是不會變化的。其他的絕對單位如下:

  • mm, cm, in: 毫米(Millimeters),釐米(centimeters),英寸(inches)
  • pt, pc: 點(Points (1/72 of an inch)), 十二點活字( picas (12 points.))

除了px之外,你很可能都不怎麼使用其他的單位。

也有相對單位,他們是相對於當前元素的字型大小( font-size )或者視口viewport 尺寸。

  • em:1em與當前元素的字體大小相同(更具體地說,一個大寫字母M的寬度)。CSS樣式被應用之前,瀏覽器給網頁設置的預設基礎字體大小是16像素,這意味著對一個元素來說1em的計算值預設為16像素。但是要小心—em單位是會繼承父元素的字體大小,所以如果在父元素上設置了不同的字體大小,em的像素值就會變得複雜。現在不要過於擔心這個問題,我們將在後面的文章和模塊中更詳細地介紹繼承和字體大小設置。em是Web開發中最常用的相對單位
  • ex, ch: 分別是小寫x的高度和數字0的寬度。這些並不像em那樣被普遍使用或很好地被支持。
  • rem: REM(root em)和em以同樣的方式工作,但它總是等於預設基礎字體大小的尺寸;繼承的字體大小將不起作用,所以這聽起來像一個比em更好的選擇,雖然在舊版本的IE上不被支持。
  • vw, vh: 分別是視口寬度的1/100和視口高度的1/100,其次,它不像rem那樣被廣泛支持。

使用相對單位是非常有用的-你可以調整你的HTML元素大小相對於你的字體或視口大小,這意味著佈局將保持看起來正確,假設舉個例子是一個視障用戶的話,整個網站上的文本大小是原來的兩倍。

無單位的值

你有時候會在CSS遇到無單位的數值,這不總是一個錯誤,事實上它是在某些情況下,完全可以。例如,如果你想讓一個元素完全去除外邊框和內邊框,你可以只使用無單位的0 — 0就是0,不管前面設置的單位是什麼!

margin: 0;

無單位的行高

另一個例子是 line-height 設置元素中每行文本的高度。你可以使用單位設置特定的行的高度,但使用一個無量綱的值往往更容易,它就像一個簡單的乘法因數。

註:line-height
CSS屬性中設置用於行所需要的空間,例如文本。
對於塊級元素,它指定元素中線框的最小高度。
在未替換的內聯元素中,它指定用於計算線框高度的高度。
對於替代行內元素,如 button 或其他 input 元素,line-height 沒有影響。
對於部分替代元素,line-height 依然可以影響元素的樣式佈局。

動畫的數值

CSS動畫能夠讓頁面上的HTML元素動起來。我們來看一個例子,當我們把滑鼠浮動到一個段落上的時候,它能夠旋轉起來。這個例子的HTML代碼很簡單:

<p>Hello</p>

CSS有點複雜:

@keyframes rotate {
  0% {
    transform: rotate(0deg);
  }

  100% {
    transform: rotate(360deg);
  }
}

p {
  color: red;
  width: 100px;
  font-size: 40px;
  transform-origin: center;
}

p:hover {
  animation-name: rotate;
  animation-duration: 0.6s;
  animation-timing-function: linear;
  animation-iteration-count: 5;
}

這裡你可以看到一些我們之前沒有明確提到的有趣單位,但是我們感興趣的是這一行 animation-iteration-count: 5; ——此行控制著動畫啟動(這裡是指游標浮動至段落上)時後會執行多少次,而且這是一個簡短無單位純數字(電腦中稱之為整型)。

以下是代碼的實際效果:

百分比

還可以使用百分比值指定可以通過特定數值指定的大部分內容。這使我們可以創建,例如,其寬度總是會移動到其父容器寬度的一定百分比的框中。這可以與那些將其寬度設置為某個單位值(如px或ems)的框進行比較,它們的長度總是保持相同的長度,即使它們的父容器的寬度發生變化。

讓我們舉個例子來說明這個問題。

首先,用HTML標記的兩個相似的盒子:

<div>
  <div class="boxes">Fixed width layout with pixels</div>
  <div class="boxes">Liquid layout with percentages</div>
</div>

現在一些CSS來裝飾這些盒子:

div .boxes {
  margin: 10px;
  font-size: 200%;
  color: white;
  height: 150px;
  border: 2px solid black;
}

.boxes:nth-child(1) {
  background-color: red;
  width: 650px;
}

.boxes:nth-child(2) {
  background-color: blue;
  width: 75%;
}

這給了我們以下結果:

在這裡,我們給兩個divs一些 [margin] [height] [font-size] [border] 和 [color] 。

然後我們給第一個div和第二個div不同的 [background-color],所以我們可以很容易地區分開他們。 我們還將第一個div的 [width]設置為650px,將第二個div的寬度設置為75%。 這樣做的效果是,第一個div始終具有相同的寬度,即使視口大小被調整(當視口變得比屏幕更窄時,它將從屏幕上消失),而第二個div的寬度隨著視口(viewport )的變化而變化,使其始終保持其父元素的75%。 在這個例子中,div的父元素是<body>元素,預設情況下是視口寬度的100%。

註意: 您可以通過調整本文中的瀏覽器視窗來看到這種效果;
margin屬性為給定元素設置所有四個(上下左右)方向的外邊距屬性。這是四個外邊距屬性設置的簡寫。四個外邊距屬性設置分別是: margin-top, margin-right, margin-bottom 和 margin-left 。指定的外邊距允許為負數。

font-size CSS 屬性中指定字體的大小。因為該屬性的值會被用於計算em和ex長度單位,定義該值可能改變其他元素的大小。

border屬性是一個用於設置各種單獨的邊界屬性的簡寫屬性。border可以用於設置一個或多個以下屬性的值: border-width, border-style, border-color。

background-color 會設置元素的背景色, 屬性的值為顏色值或關鍵字transparent二者選其一。

width 屬性指定了元素內容區的寬度. 內容區在元素padding,border和margin裡面。

我們也可以設置font-size的百分比為200%。它將和你預計的工作方式有一點不同,但這是講得通的,它的新大小是相對於父容器的字體大小的,就像em一樣。在這種情況下,父容器的字體大小為16px——頁面的預設值,所以計算的值為16px的200%,或32px。這和em的風格確實很類似—200%基本上和2em一樣。

這兩種不同的框佈局類型通常稱為動態(流體)佈局(如瀏覽器視口大小的變化),固定寬度佈局(不管怎樣都保持不變):

  • 可以使用動態佈局來確保標準文檔始終適合於屏幕,並且可以在不同的移動設備屏幕大小上表現良好。
  • 一個固定寬度的佈局可以用來保持線上地圖的大小相同;瀏覽器視口可以在地圖上滾動,只在一個時間內查看一定數量的地圖。您可以立即看到的量取決於您的視口有多大。

顏色

CSS中指定顏色的方法有很多,其中一些是最近實現的。CSS中到處都可以使用相同的顏色值,無論是指定文本顏色、背景顏色,還是其他任何顏色。

現代電腦中可用的標準顏色系統是24位,通過不同的紅、綠、藍通道,每個通道有256種不同的值,從而顯示出大約1670萬種不同的顏色。 (256 x 256 x 256 = 16,777,216.)

讓我們運行不同的可用類型的顏色值。

關鍵詞(色彩關鍵字)

最簡單、最古老的顏色類型,CSS顏色關鍵詞。這些都是特定的字元串代表特定的顏色值。例如red代表紅色。

這很容易理解,儘管它只能讓我們指定明顯的顏色基元。有大約165個不同的關鍵字可用於現代Web瀏覽器-見 full color keyword list.

你可能會在工作中經常使用諸如紅色、黑色和白色這樣的純顏色,但除此之外,你還想使用另一種顏色系統。

十六進位值

下一個常用的顏色系統是十六進位顏色或十六進位代碼。每個顏色包括一個哈希/磅符號(#)和其後面緊跟的六個十六進位數,其中每個十六進位數可以是0和F之間的一個值(一共16個),0123456789abcdef。每對十六進位數代表一個通道(紅色、綠色或者藍色)允許我們指定256個可用值。 (16 x 16 = 256.)

例如,這個代碼:

<p>This paragraph has a red background</p>
<p>This paragraph has a blue background</p>
<p>This paragraph has a kind of pinky lilac background</p>
/* equivalent to the red keyword */
p:nth-child(1) {
  background-color: #ff0000;
}

/* equivalent to the blue keyword */
p:nth-child(2) {
  background-color: #0000ff;
}

/* has no exact keyword equivalent */
p:nth-child(3) {
  background-color: #e0b0ff;
}

給出以下結果:

這些值比較複雜,不太容易理解,但是它們比關鍵字更靈活——您可以使用十六進位值來表示您想要在顏色方案中使用的任何顏色。

RGB

我們要討論的第三個方案是RGB。一個RGB值是一個函數rgb() -這是給定的三個參數表示的紅色,綠色和藍色通道的顏色值,在大致相同的方式作為十六進位值。與RGB的區別在於,每個通道不是由兩個十六進位數字表示的,而是由0到255之間的十進位數表示的。

讓我們重寫上面那個例子來使用RGB顏色:

<p>This paragraph has a red background</p>
<p>This paragraph has a blue background</p>
<p>This paragraph has a kind of pinky lilac background</p>
/* equivalent to the red keyword */
p:nth-child(1) {
  background-color: rgb(255,0,0);
}

/* equivalent to the blue keyword */
p:nth-child(2) {
  background-color: rgb(0,0,255);
}

/* has no exact keyword equivalent */
p:nth-child(3) {
  background-color: rgb(224,176,255);
}

這給出了和上面例子同樣的結果。

RGB值的支持度與十六進位不相上下,在你的工作中你可能不會遇到任何不支持它們的瀏覽器。

RGB值可以說比十六進位值更直觀,更容易理解。

註意: 為什麼是255而不是256?電腦系統傾向於從0計算,而不是從1計算。所以允許256個可能的值,RGB顏色在0-255範圍值,不是1-256。

HSL

支持度比RGB稍微差一點的是HSL(不支持舊版本IE),這是開發者非常感興趣而實施的——不只是紅、綠和藍色的值,該hsl()函數接受的色相飽和度以及明度值,以與上述三種不同的方式用來區分167萬種顏色:

  1. 色調:顏色的底色調。這個值在0到360之間,表示色輪周圍的角度。
  2. 飽和度:飽和度是多少?這需要一個從0-100%的值,其中0是沒有顏色(它將顯示為灰色),100%是全彩色飽和度。
  3. 明度:顏色有多亮或明亮?這需要一個從0-100%的值,其中0是無光(它會出現全黑的),100%是充滿光的(它會出現全白)

現在我們用HSL顏色重寫上面的例子:

<p>This paragraph has a red background</p>
<p>This paragraph has a blue background</p>
<p>This paragraph has a kind of pinky lilac background</p>
/* equivalent to the red keyword */
p:nth-child(1) {
  background-color: hsl(0,100%,50%);
}

/* equivalent to the blue keyword */
p:nth-child(2) {
  background-color: hsl(240,100%,50%);
}

/* has no exact keyword equivalent */
p:nth-child(3) {
  background-color: hsl(276,100%,85%);
}

HSL顏色模型對於常使用這樣的模型的設計師來說非常直觀。例如,找到一組色調以單配色方式使用是非常有用的。

/* three different shades of red*/
background-color: hsl(0,100%,50%);
background-color: hsl(0,100%,60%);
background-color: hsl(0,100%,70%);

RGBA 和 HSLA

RGB和HSL都有相應的模式——RGBA和HSLA——不僅允許您設置想要顯示的顏色,還有此顏色的透明度( transparency )。它們與與之相應的函數採用同樣的參數,再加上第四個範圍在0-1的值——設置透明度,或者說alpha通道。0是完全透明的,1是完全不透明的。

讓我們展示另一個簡單的例子,第一個HTML:

<p>This paragraph has a transparent red background</p>
<p>This paragraph has a transparent blue background</p>

現在CSS——我們正在第一段向下定位,顯示段落重疊的效果(以後你會瞭解更多關於定位的知識):

p {
  height: 50px;
  width: 350px;
}

/* Transparent red */
p:nth-child(1) {
  background-color: rgba(255,0,0,0.5);
  position: relative;
  top: 30px;
  left: 50px;
}

/* Transparent blue */
p:nth-child(2) {
  background-color: hsla(240,100%,50%,0.5);
}

結果如下:

透明的顏色更豐富的視覺效果非常有用——混合的背景,半透明的UI元素等等。

不透明度(Opacity)

還有另一種方法來指定透明度,通過CSS——opacity 屬性。
與設置某個特定顏色的透明度相比,這會設置所有選定元素以及它們的孩子節點的不透明度。

opacity屬性指定了一個元素的透明度。換言之,opacity屬性指定了一個元素後面的背景的被覆蓋程度。

為了看出他們的區別,我們來研究下麵這個例子:

<p>This paragraph is using RGBA for transparency</p>
<p>This paragraph is using opacity for transparency</p>

現在CSS是:

/* Red with RGBA */
p:nth-child(1) {
  background-color: rgba(255,0,0,0.5);
}

/* Red with opacity */
p:nth-child(2) {
  background-color: rgb(255,0,0);
  opacity: 0.5;
}

結果如下:

註意區別——第一個盒子使用RGBA顏色,只有一個半透明的背景,而一切在第二個盒子里的都是透明的,包括文本。您要仔細思考使用兩者的時機——例如,當您想創建一個圖片覆蓋的標題,圖片能透過標題顯示,且標題的文本顯示不受影響,此時應該使用RGBA修改標題背景色的透明度;另一方面,當您想要創建一個動畫效果,整個UI元素從完全隱藏到可見,此時應該使用不透明度(Opacity)。

transparent 關鍵字

transparent 關鍵字表示一個完全透明的顏色,即該顏色看上去將是背景色。從技術上說,它是帶有阿爾法通道為最小值的黑色,是 rgba(0,0,0,0) 的簡寫。

currentColor 關鍵字

currentColor 關鍵字代表原始的 color 屬性的計算值。它允許讓繼承自屬性或子元素的屬性顏色屬性以預設值不再繼承。

它也能用於那些繼承了元素的 color 屬性計算值的屬性,相當於在這些元素上使用 inherit關鍵字,如果這些元素有該關鍵字的話。

附圖:大部分的色彩關鍵字和rgb表示

(譯者註:顏色譯名僅供參考。)

end
2018-5-31

全文摘錄自MDN網路開發者網站


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

-Advertisement-
Play Games
更多相關文章
  • 一,新建立一個工程,Hello,如圖所示。 二,Xcode >New >File >FirstViewController >選中Also create XIB file >Next.如圖所示。 三,如下圖所示。 四,在AppDelegate.m中輸入如下代碼 : 五,在FristViewContr ...
  • 組件化的項目開發中,組件應當劃分為三個層次:組件、模塊、頁面 微信小程式已經為開發者封裝好了基礎組件,頁面文件(pages)也有了詳細的規定 而模塊就需要自行開發,並且要和頁面文件區分開,這就涉及到自定義組件 一、基本用法 在根目錄下創建一個 components 目錄,用於存放自定義組件 組件也是 ...
  • 具體的看代碼,都寫在註釋里了,歡迎討論 ...
  • 層疊 CSS 是 **Cascading Style Sheets** 的縮寫,這暗示層疊(cascade)的概念是很重要的。在最基本的層面上,它表明CSS規則的順序很重要,但它比那更複雜。什麼選擇器在層疊中勝出取決於三個因素(這些都是按重量級順序排列的——前面的的一種會否決後一種): 1. 重要... ...
  • 當給幾個大小一樣有boder的盒子浮動時,會出現margin自動加起來的結果。 此時可以給每個盒子一個margin-left:-border的長來實現很好的效果,這樣右邊的盒子會把左邊盒子的右邊border壓住,如圖所示。 還可以使用偽元素實現動態效果,代碼如下。 ...
  • 博主使用了純HTML和CSS實現了JD的輪播圖,沒有加動態效果,主要是使用了定位的知識。 ,如圖為兩個側邊箭頭圖片。 實現瞭如下效果 ...
  • 前戲 到目前為止,我們已經學過了JavaScript的一些簡單的語法。但是這些簡單的語法,並沒有和瀏覽器有任何交互。 也就是我們還不能製作一些我們經常看到的網頁的一些交互,我們需要繼續學習BOM和DOM相關知識。 JavaScript分為 ECMAScript,DOM,BOM。 BOM(Browse ...
  • 1、JavaScript概述 2、JavaScript引入方式 3、JavaScript語言規範 4、JavaScript語言基礎 5、JavaScript數據類型 6、JavaScript運算符 7、JavaScript流程式控制制 8、JavaScript函數 9、JavaScript詞法分析 10 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...