CSS —— 樣式學習 (一)

CSS 指層疊樣式表 (Cascading Style Sheets) :定義如何顯示 HTML 元素(一套自定義的衣服)

語法: 由選擇器和聲明(可以是一條或多條)構成,

聲明以大括號({})括起來,由一個屬性和一個值組成,每個屬性有一個值。屬性和值被冒號分開,以分號(;)結束

p
{
    color:red;
    text-align:center;
}

選擇器:給特定空間添加樣式,常用的有 元素選擇器(標籤名),類選擇器(.)、id 選擇器(#),通用選擇器(*)

其他選擇器

一、減少css 代碼:分組選擇器和嵌套選擇器

1、分組選擇器:  在樣式表中有很多具有相同樣式的元素,為了盡量減少代碼,你可以使用分組選擇器,每個選擇器用逗號分隔

h1,h2,p
{
    color:green;
}

2、嵌套選擇器: 適用於選擇器內部的選擇器的樣式

/* 為所有 class="marked" 元素內的 p 元素指定一個樣式*/
.marked p
{
    color:white;
}

二、組合選擇器:分為四種組合方式

1、後代選擇器(以空格分隔):用於選取某元素的後代元素,如下只要在div 標籤中的所有元素都被選中

2、子元素選擇器(以大於號分隔):用於選取作為某元素子元素的元素,與後代選擇器相比,只選中div 的 兒子 p 標籤,孫子不選中

3、相鄰兄弟選擇器(以加號分隔):選擇緊接在另一元素後的元素,且二者有相同父元素

4、普通兄弟選擇器(以破折號分隔):選取所有指定元素之後的相鄰兄弟元素

  

三、屬性選擇器   [ ]

語法 : [自定義屬性名或元素含有的] {屬性:值}

/* 對input  標籤 中類型值為 submit 的添加樣式*/
input[type=submit] {
  background-color: #4CAF50;
}

 

 

 

自定義的

 

 

 

注意:IE7和IE8需聲明!DOCTYPE才支持屬性選擇器!IE6和更低的版本不支持屬性選擇器

 

要是想要簡化的話可以使用 : *=, |=, ^=, $=, *= 

 “value 是完整單詞” 類型的比較符號: ~=, |= ,“拼接字符串” 類型的比較符號: *=, ^=, $=

 

四、偽類和偽元素

1、偽類:添加一些選擇器的特殊效果

語法:

/*偽類的語法: 
標籤:偽類選擇器名稱 {屬性 : 值;}*/
selector:pseudo-class {property:value;}

/*CSS類也可以使用偽類: 
標籤名.類名 : 偽類選擇器名稱 {屬性 : 值;}*/
selector.class:pseudo-class {property:value;}

小列子:

a.red:visited{color:#FF0000;}
<aclass="red" href="obge.html">obge</a>

 常用的:

a:link {color:#FF0000;} /* 未訪問的鏈接 */
a:visited {color:#00FF00;} /* 已訪問的鏈接 */
a:hover {color:#FF00FF;} /* 鼠標划過鏈接 */
a:active {color:#0000FF;} /* 已選中的鏈接 */

 

2、偽元素:添加一些選擇器特殊的效果

/*偽元素的語法:
標籤 : 偽元素 {屬性 :值 ;}  */
selector:pseudo-element {property:value;}

/*CSS類也可以使用偽元素:
標籤.類名 : 偽元素 {屬性 :值 ;}  */
selector.class:pseudo-element {property:value;}

常見的偽元素:

: first-line : 偽元素用於向文本的首行設置特殊樣式,只能用於塊級元素。

:first-letter: 偽元素用於向文本的首字母設置特殊樣式,只能用於塊級元素。

:before : 偽元素可以在元素的內容前面插入新內容。

 “:after” 偽元素可以在元素的內容之後插入新內容。

/*偽元素可以結合CSS類: */
p.article:first-letter {color:#ff0000;}
<p class="article">文章段落</p>


/*在每個 <h1> 元素後面插入一幅圖片:*/
h1:after
{
    content:url(smiley.gif);
}

h1:before 
{
    content:url(smiley.gif);
}

 

 

 

1、注釋: /* 開始, 以 */ 結束

/*這是個注釋*/

2、創建方式:外部樣式表(External style sheet)、內部樣式表(Internal style sheet)和內聯樣式(Inline style)

3、顏色通過CSS最經常的指定:十六進制值 – 如: #FF0000、一個RGB值 – 如: RGB(255,0,0)和顏色的名稱 – 如: red

4、字體大小設置的單位:px,em(1em的默認大小是16px,常常使用百分比和EM組合)

5、Display(顯示) 與 Visibility(可見性)

二者定義:display屬性設置一個元素應如何顯示,visibility屬性指定一個元素應可見還是隱藏。

(1)、隱藏一個元素

把display屬性設置為”none”,或把visibility屬性設置為”hidden”,但這兩種方法會產生不同的結果。

visibility:hidden可以隱藏某個元素,但隱藏的元素仍需佔用與未隱藏之前一樣的空間(雖然被隱藏了,但仍然會影響布局)

display:none 可以隱藏某個元素,且隱藏的元素不會佔用任何空間(不但被隱藏了,而且該元素原本佔用的空間也會從頁面布局中消失)

(2)、變更元素的顯示類型(塊元素與內聯元素的相互轉換)

將塊元素轉換為內聯元素
display:inline;

將內聯元素轉換為塊元素,但是一個內聯元素設置為display:block是不允許有它內部的嵌套塊元素
display:block;

顯示為內聯塊元素,表現為同行顯示並可修改寬高內外邊距等屬性
display:inline-block;

 

6、定位(Position) :指定了元素的定位類型,藉助頂部,底部,左側和右側屬性定位

position 屬性的五個值:static,relative,fixed,absolute,sticky

satic:靜態定位,HTML 元素的默認值,即沒有定位,遵循正常的文檔流對象。元素不會受到 top, bottom, left, right影響

fixed 定位:固定定位,元素的位置相對於瀏覽器窗口是固定位置。即使窗口是滾動的它也不會移動,與文檔流無關,因此不佔據空間,可以與其他元素重疊

relative 定位:相對定位,元素的定位是相對其正常位置,移動相對定位元素,但它原本所佔的空間不會改變,常被用來作為絕對定位元素的容器塊。

absolute 定位:絕對定位,元素的位置相對於最近的已定位父元素,如果元素沒有已定位的父元素,那麼它的位置相對於<html>,absolute 定位使元素的位置與文檔流無關,因此不佔據空間,可以與其他元素重疊

sticky 定位,粘性定位,基於用戶的滾動位置來定位。元素定位表現為在跨越特定閾值前為相對定位,之後為固定定位。它的行為就像 position:relative; 而當頁面滾動超出目標區域時,它的表現就像 position:fixed;,它會固定在目標位置。

注意:特定閾值指的是 top, right, bottom 或 left 之一,指定 top, right, bottom 或 left 四個閾值其中之一,才可使粘性定位生效。否則其行為與相對定位相同。Internet Explorer, Edge 15 及更早 IE 版本不支持 sticky 定位。 Safari 需要使用 -webkit- prefix

z-index : 屬性指定了一個元素的堆疊順序(哪個元素應該放在前面,或後面,具有更高堆疊順序的元素總是在較低的堆疊順序元素的前面),如果兩個定位元素重疊,沒有指定z – index,最後定位在HTML代碼中的元素將被顯示在最前面。

   值的類型:number(數字),auto,inherit(繼承)

 

7、overflow(解決子元素溢出) 屬性用於控制內容溢出元素框時顯示的方式,只工作於指定高度的塊元素上

 屬性值: 控制內容溢出元素框時在對應的元素區間內添加滾動條

  visible 默認值。內容不會被修剪,會呈現在元素框之外。

  hidden 內容會被修剪,並且其餘內容是不可見的。

  scroll 內容會被修剪,但是瀏覽器會顯示滾動條以便查看其餘的內容。

  auto 如果內容被修剪,則瀏覽器會顯示滾動條以便查看其餘的內容。

  inherit 規定應該從父元素繼承 overflow 屬性的值。

 

8、Float(浮動) :會使元素向左或向右移動,其周圍的元素也會重新排列,往往是用於圖像,但它在布局時一樣非常有用

注意:只能左右移動而不能上下移動,直到它的外邊緣碰到包含框或另一個浮動框的邊框為止,浮動元素之前的元素將不會受到影響,之後的元素將圍繞它

可能的值:left、right、none、inherit

 

clear 屬性 : 清除浮動,指定元素兩側不能出現浮動元素,元素浮動之後,周圍的元素會重新排列

可能的值:left、right、both、none、inherit

 

9、對齊

元素居中對齊margin: auto; 水平居中對齊一個元素,設置元素的寬度將防止它溢出到容器的邊緣,通過指定寬度,並將兩邊的空外邊距平均分配

  如果沒有設置 width 屬性(或者設置 100%),居中對齊將不起作用

圖片居中對齊:可以使用 margin: auto; 並將它放到 塊 元素中

文本在元素內居中對齊: text-align: center

左右對齊:

  使用定位的方式(position: absolute;):絕對定位元素會被從正常流中刪除,並且能夠交疊元素。

  使用浮動方式(float): 解決子元素溢出(clearfix(清除浮動)” 和  overflow: auto; ).

垂直居中對齊:

  使用控制內邊距的方式:padding  (如果要水平和垂直都居中,可以使用 padding 和 text-align: center:)

  使用 line-height

     使用 transform: translate(-50%, -50%)

 

10、布局 : 主要分為 頭部區域、菜單導航區域、內容區域、底部區域。

頭部區域位於整個網頁的頂部,一般用於設置網頁的標題或者網頁的 logo:

菜單導航條包含了一些鏈接,可以引導用戶瀏覽其他頁面:

內容區域一般有三種形式:移動端、平板設備、PC 桌面設備

底部區域在網頁的最下方,一般包含版權信息和聯繫方式等。

 

 

 

一、常用屬性

1、背景屬性 (background)

用處: 定義HTML元素的背景

background-color (顏色) 屬性定義了元素的背景顏色.

background-image (url(‘地址’))屬性描述了元素的背景圖像,默認情況下,背景圖像進行水平或者垂直方向平鋪重複顯示,以覆蓋整個元素實體,

background-repeat 設置背景圖像是否及如何重複,水平方向平鋪 (將值設置為 repeat-x),讓背景圖像不影響文本的排版使用no-repeat

background-position 屬性改變圖像在背景中的位置

 

2、文本  text

對標籤中的文字進行調整,

color 設置文本顏色

text-align 設置設置文本的水平對齊方式,可居中(center)或對齊到左(left)或右(right),兩端對齊(justify)

text-decoration 來設置或刪除文本的裝飾,常用的是用來刪除鏈接的下劃線(none),也可以調整線的位置,在文字上(overline),中(line-through),下(underline)

text-transform 控制元素中的字母,可用於所有字句變成大寫(uppercase)或小寫字母(lowercase),或每個單詞的首字母大寫(capitalize)

text-indent 縮進元素中文本的首行,如首行縮進50px(text-indent:50px;)

direction 設置文本方向。

letter-spacing 設置字符間距

line-height 設置行高

text-shadow 設置文本陰影

unicode-bidi 設置或返迴文本是否被重寫

vertical-align 設置元素的垂直對齊

white-space 設置元素中空白的處理方式

word-spacing 設置字間距

 

3、字體 fonts

用處: 定義字體,加粗,大小,文字樣式。

字型:通用和特定

  通用字體系列 – 擁有相似外觀的字體系統組合(如 “Serif” 或 “Monospace”)

  特定字體系列 – 一個特定的字體系列(如 “Times” 或 “Courier”)

font-family 屬性設置文本的字體系列,多個字體系使用逗號分隔,如果瀏覽器不支持第一種字體,他將嘗試下一種字體,若字體系列的名稱超過一個字,它必須用引號

font-style 字體樣式 :有三個值 正常(normal)、斜體(italic) 和 傾斜的文字(oblique)

font-size 屬性設置文本的大小。字體大小的值可以是絕對或相對的大小,默認大小和普通文本段落一樣,是16像素(16px=1em)。

  絕對大小:設置一個指定大小的文本、不允許用戶在所有瀏覽器中改變文本大小、確定了輸出的物理尺寸時絕對大小很有用

  相對大小:相對於周圍的元素來設置大小、允許用戶在瀏覽器中改變文字大小

 

4、鏈接 :不同的鏈接(狀態)可以有不同的樣式(如顏色(color),字體(text-decoration),背景(background-color)等)

鏈接的四種狀態:a:link(未訪問過的鏈接),a:hover(鼠標放在鏈接上時),a:active(被點擊的那一刻),a:visited(已訪問的)

注意:當設置為若干鏈路狀態的樣式的順序規則:a:hover 必須跟在 a:link 和 a:visited後面,a:active 必須跟在 a:hover後面

a:link {color:#000000;}      /* 未訪問鏈接*/
a:visited {color:#00FF00;}  /* 已訪問鏈接 */
a:hover {color:#FF00FF;}  /* 鼠標移動到鏈接上 */
a:active {color:#0000FF;}  /* 鼠標點擊時 */

 

5、列表 (有序ol,無序ul) :設置列表項標記

list-style-type 指定列表項標記的類型

list-style-image 將圖像設置為列表項標誌。

list-style 簡寫屬性。用於把所有用於列表的屬性設置於一個聲明中

list-style-position 設置列表中列表項標誌的位置。

 

6、邊框 border

用處:指定一個元素邊框的樣式和顏色。

border-style屬性用來定義邊框的樣式,也可以上(border-top-style)右(border-right-style)下(border-bottom-style)左()分別進行設置,常用的值為 solid  

  none: 默認無邊框

  dotted: 定義一個點線邊框

  dashed: 定義一個虛線邊框

  solid: 定義實線邊框

  double: 定義兩個邊框。 兩個邊框的寬度和 border-width 的值相同

  groove: 定義3D溝槽邊框。效果取決於邊框的顏色值

  ridge: 定義3D脊邊框。效果取決於邊框的顏色值

  inset:定義一個3D的嵌入邊框。效果取決於邊框的顏色值

  outset: 定義一個3D突出邊框。 效果取決於邊框的顏色值

border-width 屬性為邊框指定寬度。為邊框指定寬度有兩種方法:可以指定長度值,比如 2px 或 0.1em(單位為 px, pt, cm, em 等),或者使用 3 個關鍵字(thick 、medium(默認值) 和 thin),CSS 沒有定義 3 個關鍵字的具體寬度,可以修改

border-color屬性用於設置邊框的顏色,單獨使用是不起作用的,必須得先使用border-style來設置邊框樣式。

//邊框簡寫 border-width、border-style、border-color
border:5px solid red;

 

7、輪廓 (outline):指定元素輪廓的樣式、顏色和寬度

定義:是繪製於元素周圍的一條線,位於邊框邊緣的外圍,可起到突出元素的作用。

outline-color 設置輪廓的顏色

outline-style 設置輪廓的樣式

outline-width 設置輪廓的寬度

8、 margin(外邊距)屬性定義元素周圍的空間。

margin 清除周圍的(外邊框)元素區域,沒有背景顏色,是完全透明的, 可以單獨改變元素的上,下,左,右邊距,也可以一次改變所有的屬性

值的形式: auto(居中,會依賴於瀏覽器,這是設置瀏覽器邊距)、length (定義一個固定值,如像素,pt,em等)、 % (定義一個使用百分比的邊距) 

簡寫時注意四個值順序為:上(margin-top),右(right)、下(botton)、左(left)

 

9、padding(內邊距),填充,定義元素邊框與元素內容之間的空間,即上下左右的內邊距

當元素的 padding(填充)內邊距被清除時,所釋放的區域將會受到元素背景顏色的填充。

值的形式 :length (定義一個固定值,如像素,pt,em等)、 % (定義一個使用百分比的邊距)

 簡寫時注意四個值順序為:上(margin-top),右(right)、下(botton)、左(left)

 

10、Dimension(尺寸):控制元素的高度,寬度,行間距(line-heignt)

height: 設置元素的高度。

line-height :設置行高。

max-height :設置元素的最大高度。

min-height :設置元素的最小高度。

width :設置元素的寬度。
min-width :設置元素的最小寬度。

max-width :設置元素的最大寬度。

 

11、盒子模型 (box model) :本質是一個 box,它包括:邊距,邊框,填充,和實際內容,允許我們在其它元素和周圍元素邊框之間的空間放置元素。

使用盒子用來設計模型的時候要注意:

  Margin(外邊距) – 清除邊框外的區域,外邊距是透明的。

  Border(邊框) – 圍繞在內邊距和內容外的邊框。

  Padding(內邊距) – 清除內容周圍的區域,內邊距是透明的。

  Content(內容) – 盒子的內容,顯示文本和圖像

總元素的寬度=寬度+左填充+右填充+左邊框+右邊框+左邊距+右邊距

總元素的高度=高度+頂部填充+底部填充+上邊框+下邊框+上邊距+下邊

 

12、table 表格

常用屬性: 邊框(border),寬高(width,height),文字對齊,填充(padding),跨行,跨列

text-align屬性設置水平對齊方式,向左,右,或中心:

border-collapse 屬性設置表格的邊框是否被摺疊成一個單一的邊框或隔開

colspan屬性規定單元格可橫跨的列數,所有瀏覽器都支持colspan屬性。其取值為number

rowspan屬性規定單元格可橫跨的行數,所有瀏覽器都支持rowspan屬性。其取值為number

 

13、導航欄 : 一個鏈接列表,藉助 <ul> 和 <li> 進行處理

常見的導航欄:主要有兩種豎向和水平,將豎變成橫向,可以藉助內聯(display屬性 inline) 或浮動(float),但是想鏈接到具有相同的大小,必須使用浮動的方法

常用屬性與值:

ul {
    list-style-type: none;
    margin: 0;
    padding: 0;
    width: 200px;
    background-color: #f1f1f1;
}

li a {
    display: block;
    color: #000;
    padding: 8px 16px;
    text-decoration: none;
}

li a.active {
    background-color: #4CAF50;
    color: white;
}

li a:hover:not(.active) {
    background-color: #555;
    color: white;
}

<ul>
<li><a class=”active” href=”#home”>主頁</a></li>
<li><a href=”#news”>新聞</a></li>
<li><a href=”#contact”>聯繫</a></li>
<li><a href=”#about”>關於</a></li>
</ul>

 list-style-type:none – 移除列表前小標誌。一個導航欄並不需要列表標記

margin,padding:移除瀏覽器的默認設置將邊距和填充設置為0

display:block – 顯示塊元素的鏈接,讓整體變為可點擊鏈接區域(不只是文本),它允許我們指定寬度

display:inline; -默認情況下,<li>元素是塊元素。在這裡,我們刪除換行符之前和之後每個列表項,以顯示一行

 

14、下拉菜單 :鼠標移動上去後顯示下拉菜單的效果。

主要是藉助 : hover (鼠標滑過觸發)display : block(顯示,先隱藏none),並藉助定位對 下拉項(相對relative) 和 下拉內容(絕對 absolute ) 進行調整下拉內容位置

.dropdown:hover .dropdown-content {
  display: block;
}

 

15、提示工具 

也是和下拉菜單差不多,也可以藉助 visibility 屬性的兩個值(visible(顯示)和 hidden 隱藏)

需要提示的文本使用 position:relative, 提示文本需要設置定位值 position:absolute

:hover 選擇器用於在鼠標移動到到指定元素上時顯示(visible)的提示。

 CSS3 border-radius 屬性用於為提示框添加圓角。

小箭頭:用CSS 偽元素 ::after 及 content 屬性為提示工具創建一個小箭頭標誌,箭頭是由邊框組成的,但組合起來後提示工具像個語音信息框

淡入效果:用 CSS3 transition 屬性及 opacity 屬性來實現提示工具的淡入效果

 

16、透明度 opacity

Opacity屬性值從0.0 – 1.0。值越小,使得元素更加透明。如( opacity:1.0;

IE8和早期版本使用濾鏡:alpha(opacity= x)。 x可以採取的值是從0 – 100。較低的值,使得元素更加透明。如(filter:alpha(opacity=100);

img
{
  opacity:0.4;
  filter:alpha(opacity=40); /*  IE8 及其更早版本 */
}
img:hover
{
  opacity:1.0;
  filter:alpha(opacity=100); /* IE8 及其更早版本 */
}

 

17、媒體類型 @media :在相同樣式表為不同媒體設置不同的樣式

使用方式:

/* 瀏覽器屏幕上顯示一個 14 像素的 Verdana 字體樣式 */
@media screen
{
    p.test {font-family:verdana,sans-serif;font-size:14px;}
}
/* 頁面打印,將是 10 個像素的 Times 字體*/
@media print
{
    p.test {font-family:times,serif;font-size:10px;}
}
/*在屏幕上和紙上設置為粗體*/
@media screen,print
{
    p.test {font-weight:bold;}
}

常見類型:

all:用於所有的媒體設備。

print:用於打印機。

screen:用於電腦顯示器。

aural:用於語音和音頻合成器。

braille:用於盲人用點字法觸覺回饋設備。

embossed:用於分頁的盲人用點字法打印機。

handheld:用於小的手持的設備。

projection:用於方案展示,比如幻燈片。

tty:用於使用固定密度字母柵格的媒體,比如電傳打字機和終端。

tv:用於電視機類型的設備。

 

18、計數器 :通過一個變量來設置,根據規則遞增變量

content使用 ::before 和 ::after 偽元素來插入自動生成的內容

counter-increment遞增一個或多個值

counter-reset創建或重置一個或多個計數器

 

 

 

all 用於所有的媒體設備。
aural 用於語音和音頻合成器。
braille 用於盲人用點字法觸覺回饋設備。
embossed 用於分頁的盲人用點字法打印機。
handheld 用於小的手持的設備。
print 用於打印機。
projection 用於方案展示,比如幻燈片。
screen 用於電腦顯示器。
tty 用於使用固定密度字母柵格的媒體,比如電傳打字機和終端。
tv 用於電視機類型的設備。