歡迎回來三鑽的FCC前端教程
,上一篇文章咱們經過28關學會了HTML與HTML5網頁開發基礎。這一期咱們一塊兒攻破前端第二大知識點《CSS基礎入門》。由於這一課一共有44關,我把文章分紅兩期更新。敬請期待!css
Cascading Style Sheet
縮寫爲CSS,顧名思義就是層疊樣式表
的意思。CSS是HTML中的一個樣式表,告訴瀏覽器網頁上的文字和其餘內容是如何展現的。html
以上是一個官方的定義。咱們用一個更簡單的方式理解CSS究竟是一個什麼東東:前端
若是HTML是骨架,那CSS就是裝飾這個骨架的一層皮和身上的裝飾品。咱們能夠經過CSS控制皮膚的顏色,毛孔的粗細。甚至還能夠控制咱們裝飾品上的特效,動效等等(有LED燈的口罩也是一種特效)。web
迴歸HTML中的CSS,咱們可使用CSS控制哪些東西呢?bootstrap
咱們一共有3種應用CSS樣式的方法。api
- 咱們能夠在HTML元素行內的
style
中編寫樣式;- 在HTML文檔中添加
<style>
標籤,而後在標籤內編寫CSS代碼;- 把CSS樣式單獨寫入一個
CSS
樣式文件,而後在須要使用的HTML文檔中使用<link>
引入。
通常項目中都會選擇使用第三種方式,由於比較大型的前端頁面,不少樣式都是有重複性的,應用引入型的CSS樣式,咱們就能夠把通用的寫在一塊兒而後在全部HTML中引入便可,不須要重複編寫。而且能夠把CSS分類存放,提升可讀性和可維護性。瀏覽器
CSS背後的原理是,使用CSS選擇器選中DOM(文檔對象模型)裏面的某個HTML元素。而後將各類CSS樣式和屬性應用到該元素中,從而改變元素在頁面中的展示方式或者樣式。前端框架
在本節中,咱們將學會如何應用CSS樣式到CatPhotoApp的元素中,從而將它從簡單的文本裝修成一個頁面。讓咱們當即開始吧!app
關卡名:
Change the Color of Text
框架
h2
元素添加style
屬性,而後使用樣式屬性改變文字顏色;color
就是用來定義文字顏色的樣式屬性;如下例子演示如何給h2
應用一個藍色字體顏色的代碼:
<h2 style="color: blue;">CatPhotoApp</h2>
複製代碼
注意: 在行內樣式中,全部樣式屬性結束後須要加上一個
;
符號,表明這一個樣式屬性定義結束。而後後面還能夠加入更多的樣式屬性。
h2
的文字顏色爲紅色(red
);h2
元素中須要有style
屬性;h2
元素的color
樣式屬性應該賦予red
這個值;style
屬性值裏的樣式屬性應該以;
符號結束;這關卡主要教會咱們:
style
樣式屬性;color
;關卡名:
Change the Color of Text
<h2 style="color: red;">CatPhotoApp</h2>
,這裏咱們使用行內樣式,使用了文字顏色樣式來單獨改變h2
元素中的文字。在代碼的最頂端加入style
標籤:
<style> </style>
複製代碼
在style
中,使用CSS選擇器選中全部h2
標籤,而且給全部h2
標籤加入字體顏色樣式屬性color: red
:
<style> h2 { color: red; } </style>
複製代碼
注意: 選擇器名中的樣式元素必須用兩個大括號包裹着 (開始
{
與結束}
)。在樣式屬性的最後必須加入一個分號;
來結束。
h2
行內樣式;style
樣式表代碼區;h2
元素內的字體改變爲藍色;h2
元素中的style
屬性須要被移除;style
元素;h2
元素中的文字應該是藍色的;style
元素有接受標籤;這關卡主要教會咱們:
style
元素關卡名:
Use a CSS Class to Style an Element
類聲明例子:
<style> .blue-text { color: blue; } </style>
複製代碼
style
元素中咱們編寫了一個.blue-text
CSS類(CSS類須要在咱們的名字前加入.
符號, 而後CSS類的命名規範必須使用-
分割);<h2 class="blue-text">CatPhotoApp</h2>
;class="blue-text"
,便可得到該CSS類的樣式屬性。.
這個符號在最前面的。style
元素中,把h2
CSS選擇器改成.red-text
;blue
改成red
;h2
元素的問題應該是紅色的;h2
元素應該擁有一個red-text
的類;style
樣式表中有定義一個.red-text
,而且樣式屬性color
的值爲red
;h2
中使用行內style
屬性來改變元素的字體顏色;這關卡主要教會咱們:
關卡名:
Change the Color of Text
幾年前
bootstrap
,就是結合不少這種分類好的的類,讓咱們在HTML元素中組合使用就能夠快速佈局網頁。因此合理的分類好不一樣種類的類,而後給他們一種特定用途,有利於CSS開發時提升代碼複用性,提升可讀性和可維護性。
p
元素也加入red-text
類;h2
元素的文字應該是紅色;h2
元素應該擁有一個red-text
類屬性;p
元素的內容應該是紅色;p
元素的內容顏色應該不是紅色;p
元素應該擁有一個red-text
類屬性;這關卡主要教會咱們:
關卡名:
Change the Color of Text
font-size
樣式屬性控制的;h1 {
font-size: 30px;
}
複製代碼
style
元素中,.red-text
下方加入p
元素選擇器;p
選擇器中加入font-size
樣式屬性,而且把值設置爲16px
(16像素);style
元素中爲p
元素的內容的字體改成16px
的大小;這關卡主要教會咱們:
關卡名:
Set the Font Family of an Element
font-family
樣式屬性,咱們能夠定義一個元素所使用的字體;h2
元素使用sans-serif
字體,在CSS中須要這麼些:h2 {
font-family: sans-serif;
}
複製代碼
p
元素使用monospace
字體;p
元素都使用monospace
字體;這關卡主要教會咱們:
關卡名:
Import a Google Font
web fonts
網頁字體。Google Fonts
庫(顧名思義,就是使用谷歌公司提供的公開字體庫 - 也就是無償使用的)注意: 若是咱們沒法訪問谷歌字體的話,這一關是沒法過的,只能跳過。可是做爲開發人員,咱們是有辦法的。(大家懂的 😂)
Lobster
字體;<meta></meta>
標籤之中);<link href="https://fonts.googleapis.com/css?family=Lobster" rel="stylesheet" type="text/css">
複製代碼
font-family: Lobster;
, font-family
字體屬性值的格式是: font-family: FAMILY_NAME, GENERIC_NAME;
;FAMILY_NAME
就是指定的字體名,若是這個字體找不到,或者語言不適應的話,就會日後面定義的字體進行應用;GENERIC_NAME
就是後備字體,能夠用,
分割輸入多個,這個也會在下一關詳細解說;"Open Sans"
。由於Lobster
這個字體不存在這種狀況,因此不須要使用雙引號;font-family
CSS規則,而且使用Lobster
字體。必須保證咱們的h2
元素應用了這個字體定義。Lobster
字體;h2
元素中的字體使用了Lobster
字體;h2
CSS選擇器的來改變字體;p
元素應該保持原來的monospace
字體;這關卡主要教會咱們:
關卡名:
Specify How Fonts Should Degrade
monospace
, serif
和 sans-serif
;Helvetic
做爲咱們的默認字體,當這個字體沒法使用的時候自動日後選擇使用sans-serif
字體,這種場景咱們就須要用如下方式:p {
font-family: Helvetica, sans-serif;
}
複製代碼
Generic font family
的字體名是沒有大小寫限制的,只要名字正確就能夠了。而且不須要雙引號,由於它們是CSS關鍵詞而已。
h2
追加monospace
字體,讓h2
元素擁有默認字體爲Lobster
,備用本身爲monospace
;link
標籤引入了谷歌字體庫中的Lobster
字體。這裏咱們註釋掉這個引用,從而Lobster
這個字體就變成沒法使用了,因此h2
元素中就會日後取用monospcae
字體;注意: 若是咱們的電腦中安裝了
Lobster
字體,那這個例子中的Lobster
字體是可用的,天然就沒法看到瀏覽器日後取用的效果了。
h2
元素使用Lobster
字體;Lobster
字體沒法使用時,h2
元素應該日後取用monospace
字體;link
標籤的簽名加入<!--
和在結尾加入-->
;-->
;這關卡主要教會咱們:
關卡名:
Size Your Images
width
(寬度),顧名思義這個元素是用來控制元素的寬度的;px
(像素)爲單位來定義圖片的寬度larger-image
,而且使用這個類來把HTML元素的寬度定義爲500像素,咱們就用如下寫法:<style>
.larger-image {
width: 500px;
}
</style>
複製代碼
smaller-image
的CSS類,而且用這個類來縮小一個圖片的大小爲100像素寬;注意:由於瀏覽器的設置,有一些用戶會默認把網頁放大縮小了,不是默認的100%。若是是的話,請還原100%伸縮值後才能正常經過此關哦!
img
元素須要有smaller-imge
類;img
元素應該是100px
寬,而且瀏覽器縮放是在100%;這關卡主要教會咱們:
關卡名:
Add Borders Around Your Elements
style
, color
和 width
;<style>
.thin-red-border {
border-color: red;
border-width: 5px;
border-style: solid;
}
</style>
複製代碼
還有一種更簡單快捷的寫法:
<style>
.thin-red-border {
border: 5px red solid;
}
</style>
複製代碼
thick-green-border
;記住:咱們是能夠給HTML元素中的
class
屬性添加多個類,只要使用空格分隔便可。如:<img class="class1 class2">
img
元素須要有smaller-imge
類;img
元素須要有thick-green-border
類;這關卡主要教會咱們:
關卡名:
Add Rounded Corners with border-radius
border-radius
把圖片的四個角改圓邊;border-radius
一個弧度像素值;10px
的border-radius
;注意:這一關中,是有多個接單方案的:
- 在
.thick-green-border
中添加border-radius
;- 在
.smaller-image
中添加border-radius
;
img
元素須要有thick-green-border
類;這關卡主要教會咱們:
關卡名:
Make Circular Images with a border-radius
border-radius
屬性不止可使用像素爲單位,咱們還可使用百分比;50%
的border-radius
;50%
的邊框弧度;50%
;這關卡主要教會咱們:
關卡名:
Give a Background Color to a div Element
background-color
屬性來設置一個元素的背景顏色;green
)的背景,咱們就要給予這個元素一個background-color
屬性;.green-background {
background-color: green;
}
複製代碼
Create a class called silver-background
with the background-color
of silver. Assign this class to your div
element.
silver-background
,其中加入background-color
屬性和屬性值爲silver
;div
元素的class
屬性中;div
元素應有一個silver-background
類;div
元素應有銀色(silver)背景顏色;style
標籤中應該有一個.silver-background
類選擇器,而且有background-color
屬性和屬性值爲silver
;這關卡主要教會咱們:
關卡名:
Set the id of an Element
class
CSS類屬性,咱們還能夠給每個HTML元素一個id
屬性;id
屬性是有好幾個實用的用途的:咱們能夠用id
選擇器來給一個元素CSS樣式屬性,同時也可讓JavaScript找到指定id
的元素,而且對此進行修改等;id
屬性的屬性值應該是惟一的;id
的惟一性,可是在實踐中被廣大承認id
是須要惟一的,因此不要在多個一個元素中賦予同一個id
屬性;舉例:在咱們的h2
元素中添加一個id
屬性cat-photo-app
:
<h2 id="cat-photo-app">
複製代碼
form
元素添加一個id
屬性值cat-photo-form
;id
屬性值爲cat-photo-form
;這關卡主要教會咱們:
id
屬性;關卡名:
Use an id Attribute to Style an Element
id
屬性與CSS類同樣能夠爲他們綁上CSS樣式;id
是沒法複用,只能給予一個元素(源自於咱們上一關所說的緣由);id
在樣式表中相對比CSS類,它有更好的權重,若是class
和id
的樣式同時給予一個元素,那id
的樣式會覆蓋類的樣式;舉例:咱們如今給一個id
屬性爲cat-photo-element
,而後給這個id
屬性在樣式表中綁定一個background-color
背景顏色爲綠色green
。
#cat-photo-element {
background-color: green;
}
複製代碼
注意:在咱們的樣式表
<style>
中,咱們用. + 類
名來聲明類的樣式,可是若是是id
的話咱們會用# + id名
來聲明id
的樣式。
form
元素一個id
屬性,屬性值爲cat-photo-form
;id
一個綠色(green
)的背景顏色;form
元素中應有一個id
屬性爲cat-photo-form
;form
元素的背景顏色應該是綠色的;form
元素應有id
屬性;form
元素中不能有class
或者style
;這關卡主要教會咱們:
id
屬性;id
屬性的樣式;關卡名:
Adjust the Padding of an Element
padding
(內邊距),margin
(外邊距)和border
( 邊框);padding
,控制一個元素內容四邊的空間,還有內容與border
邊框的距離;padding
比藍色盒子的邊距要寬;若是想更深刻的理解內容與margin
,padding
和border
之間距離,咱們須要一個更好的圖解方式,請看下圖:
上圖中有3組顏色,從內到外:藍色是content
(內容部分),綠色部分是padding
(內邊距),黃色部分是border
(邊框),最外面的橙色部分是margin
(外邊距)。經過這個圖,咱們就能清晰理解這些邊距的實際產生的距離的效果。
padding
,盒子內容裏面的字體與邊框的距離就越遠;Change the padding
of your blue box to match that of your red box.
padding
,從而讓藍色盒子與紅色盒子的padding
一致;padding
應改成20px
;這關卡主要教會咱們:
padding
(內邊距),margin
(外邊距)和border
(邊框);關卡名:
Adjust the Margin of an Element
margin
(外邊距),控制這個元素與周圍元素之間的空間;margin
,同時讓紅色盒子看起來更小了;margin
的時候,也會看到同等的變化。由於藍色盒子與周邊元素的間距會加大,同時藍色盒子的content
內容能夠用的空間就須要伸縮適應。最後藍色盒子就會變小了;爲了更好的理解爲何內容區域寬高會變更,咱們先來看看紅色盒子的空間信息:
首先這個例子中,紅色盒子的content
內容區域是沒有給寬高的,因此會根據瀏覽器窗口大小適應。也就是說,內容區域是一個彈性寬高盒子。這個時候咱們給了20px
的padding
,5px
的border
,20px
的margin
。那盒子的總寬高是多少?
這個時候盒子的總寬高 = content寬高
+ padding
+ border
+ margin
對吧?
假設如今瀏覽器窗口的寬度是1000px
,這裏咱們先假設外層沒有一個黃色盒子,這個紅色盒子能夠填滿這個瀏覽器寬度。這個時候紅色盒子的content
寬度就是:
1000 - 20*2 (左右的
margin
外邊距) - 5*2(左右的border
邊框) - 20*2(左右的padding
內邊距) = 910px。
若是如今我把瀏覽器窗口變成800px呢?安裝剛剛的公式咱們會得出710px,對內容部分少了200px。
好了按照咱們剛剛的公式,如今瀏覽器窗口寬度不變,只把margin
外邊距加大,這個時候內容是否是也會變?由於最終內容區域的大小都是受到margin
,border
和padding
的總額所影響的?因此在上面的例子裏面咱們發現加大了藍色盒子的margin
後,藍色盒子顯然是變小了。由於咱們加大了margin
。
同時也是由於咱們看到的盒子大小是基於盒子的邊框,不是真的在看盒子的content
內容部分。
若是咱們給盒子一個寬高後,咱們加大padding
時盒子就會變大。甚至有時候在排版的過程當中,使用padding
就會發現盒子會超出了父級的元素盒子。這裏咱們能夠深刻解說一下CSS中的兩種盒模型
:
盒模型:標準盒模型
其餘間距都是額外加入的,會影響盒子整體呈現的寬高
若是不但願使用盒子的
padding
的時候影響盒子整體大小,咱們就要把盒子變成IE盒模型
在盒子的CSS中添加
box-sizing: border-box
盒模型:IE盒模型
盒子的框高包含了邊框和內邊距,因此總體的盒子高度不受
padding
和border
影響。
margin
,從而讓藍色盒子和紅色盒子又同樣的展現效果;blue-box
類應有20px
的margin
;這關卡主要教會咱們:
margin
的使用;padding
對盒子的寬高的影響;標準盒模型
和IE盒模型
;關卡名:
Add a Negative Margin to an Element
margin
控制它的周邊與它的邊框之間的空隙;margin
,這個元素會變大;因此給一個元素負
margin
就會變大?是,也不是!可是爲何呢?margin
是外邊框,不該該會對元素的內容產生大小變更呀?
要回答這個疑問,咱們首先來看看改成負margin
以前和以後是怎麼樣的:
margin
是20px
,那盒子的寬度就是149 (內容)
+ 20+20 (左右內邊距)
+ 5+5 (左右邊框)
= 199px
,最後還有左右的20px
的margin
;margin
爲-15px
後,這時寬度就是 219 (內容)
+ 20+20 (左右內邊距)
+ 5+5 (左右邊框)
= 269px
,最後左右的-15px
的margin
;219
- 149
= 70px
,那這70像素的增長是從哪裏來的呢?-15px
和20px
的區別。由於藍色盒子沒有定義寬度,因此寬度是自適應的。從左右負15來算一共給這個盒子左右各增長了15像素的空間。而後本來是20像素的邊框如今沒有了,因此另外再加了左右20像素的距離。一共就是15+15+20+20
= 70
。就是這樣咱們的內容就多了70px
的寬度,因此藍色盒子整體來講是否是寬度擴大了70px
呢?懂了!問題來了,爲何剛剛說給一個元素的
margin
變化時,會,也不會
致使元素放大呢?主要緣由是由於咱們這個例子中的藍色盒子沒有給寬度。若是給了寬度,盒子正數的margin
和負數margin
都不會影響這個盒子的寬的。因此只有當這個盒子的寬度是自適應的時候纔會致使盒子變大變小哦。
margin
,讓它與紅色盒子的呈現樣式同樣;margin
改成-15px
,從而讓藍色盒子與紅色盒子同樣佔了黃色盒子的總寬度;blue-gox
的類應有一個-15px
的margin
;這關卡主要教會咱們:
margin
;關卡名:
Add Different Padding to Each Side of an Element
padding
;padding-top (上)
、padding-right (右)
、padding-bottom (下)
和padding-left (左)
;40px
的padding
, 而後底部和右邊20px
;blue-box
類中應有40px
的padding-top
;blue-box
類中應有20px
的padding-right
;blue-box
類中應有20px
的padding-bottom
;blue-box
類中應有40px
的padding-left
;這關卡主要教會咱們:
關卡名:
Add Different Margins to Each Side of an Element
margin
;margin-top (上)
、margin-right (右)
、margin-bottom (下)
和margin-left (左)
;40px
的margin
, 而後底部和右邊20px
;blue-box
類中應有40px
的margin-top
;blue-box
類中應有20px
的margin-right
;blue-box
類中應有20px
的margin-bottom
;blue-box
類中應有40px
的margin-left
;這關卡主要教會咱們:
關卡名:
Use Clockwise Notation to Specify the Padding of an Element
padding-top (上)
、padding-right (右)
、padding-bottom (下)
和padding-left (左)
來給一個元素特定的內邊距;padding: 10px 20px 10px 20px;
;其餘語法:
/* 應用於四個邊 */
padding: 1em;
/* 垂直方向| 水平方向*/
padding: 5% 10%;
/* 頂部| 水平方向| 底部*/
padding: 1em 2em 2em;
/* 頂部| 右邊| 底部| 左邊*/
padding: 2px 1em 0 1em;
複製代碼
.blue-box
類的頂部和左邊padding
爲40px
,而後底部和右邊padding
爲20px
;blue-box
類中應有40px
的頂部padding
;blue-box
類中應有20px
的右邊padding
;blue-box
類中應有20px
的底部padding
;blue-box
類中應有40px
的左邊padding
;padding
;這關卡主要教會咱們:
關卡名:
Use Clockwise Notation to Specify the Margin of an Element
padding
可使用順時針語法,margin
也同樣能夠;margin-top (上)
、margin-right (右)
、margin-bottom (下)
和margin-left (左)
來給一個元素特定的外邊距;margin: 10px 20px 10px 20px;
;其餘語法:
margin: 5%; /* 全部的邊都是 5% 的邊距 */
margin: 10px; /* 全部的邊都是 10像素 的邊距 */
margin: 1.6em 20px; /* 上和下邊是 1.6字距, 左和右是 20像素 邊距 */
margin: 10px 3% 1em; /* 上邊 10像素, 左和右 3%, 下邊 1字距 邊距 */
margin: 10px 3px 30px 5px; /* 上邊 10像素, 右邊 3像素, bottom 30px, left 5px margin */
margin: 1em auto; /* 上和下邊 1字距 邊距, 該盒子是水平居中的 */
margin: auto; /* 該盒子是水平居中的, 上下邊距爲0 */
複製代碼
在現代瀏覽器中,若是要把一些東西水平居中,使用
display:flex; justify-content: center;
.然而, 在一些老的瀏覽器,如IE8-9, 這些是不可用的. 想要把一個元素在其父元素中居中, 使用
margin: 0 auto;
.blue-box
類的頂部和左邊margin
爲40px
,而後底部和右邊margin
爲20px
;blue-box
類中應有40px
的頂部margin
;blue-box
類中應有20px
的右邊margin
;blue-box
類中應有20px
的底部margin
;blue-box
類中應有40px
的左邊margin
;margin
;這關卡主要教會咱們:
這周咱們一塊兒闖過了22關,下一期咱們會一塊兒把剩餘的22關完成。學習是一種像登山同樣的過程,要經歷過漫長的上坡路,一步一個腳印。「路漫漫其修遠兮,吾將上下而求索。」, 在追尋知識的道路上,前方的道路還很漫長,但咱們將百折不撓,竭盡全力地,上天下地的去追求和探索。讓咱們繼續堅持學習,終身學習成長。在大前端的時代爬到技術的巔峯,作一個有深度的技術人員。
我是三鑽,一個在技術銀河中等和大家一塊兒來終身漂泊學習。 點贊是力量,關注是承認,評論是關愛!下期再見 👋!