前端入門DAY2-CSS


1 css樣式優勢

可以修改一處就修改不同位置的樣式。如:

第一步:把這三個短語用<span></span>括起來。(見右邊代碼編輯器13行)

第二步:寫入下列代碼:(在head的style裏面)

span{
    color:red;
}

觀察結果窗口文字的顏色是否變爲紅色了。

css 樣式由選擇符和聲明組成,而聲明又由屬性和值組成,如下圖所示:


選擇符:又稱選擇器,指明網頁中要應用樣式規則的元素,如本例中是網頁中所有的段(p)的文字將變成藍色,而其他的元素(如ol)不會受到影響。

聲明:在英文大括號“{}”中的的就是聲明,屬性和值之間用英文冒號“:”分隔。當有多條聲明時,中間可以英文分號“;”分隔,如下所示:

p{font-size:12px;color:red;}

注意:

1、最後一條聲明可以沒有分號,但是爲了以後修改方便,一般也加上分號。

2、爲了使用樣式更加容易閱讀,可以將每條代碼寫在一個新行內


2註釋

CSS中也有註釋語句:用/*註釋語句*/來標明(Html中使用<!--註釋語句-->


3CCS內聯式

就是把css代碼直接寫在現有的HTML標籤中,如下面代碼:

<p style="color:red">這裏文字是紅色。</p>

並且css樣式代碼要寫在style=""雙引號中,如果有多條css樣式代碼設置可以寫在一起,中間用分號隔開。如下代碼:

<p style="color:red;font-size:12px">這裏文字是紅色。</p>

4嵌入式

就是可以把css樣式代碼寫在<style type="text/css"></style>標籤之間。

必須寫在<style></style>之間,並且一般情況下嵌入式css樣式寫在<head></head>之間。

5外部式

外部式css樣式(也可稱爲外聯式)就是把css代碼寫一個單獨的外部文件中,這個css樣式文件以“.css”爲擴展名,在<head>內(不是在<style>標籤內)使用<link>標籤將css樣式文件鏈接到HTML文件內,如下面代碼:

<link href="base.css" rel="stylesheet" type="text/css" />

注意:

1、css樣式文件名稱以有意義的英文字母命名,如 main.css。

2、rel="stylesheet" type="text/css" 是固定寫法不可修改。

3、<link>標籤位置一般寫在<head>標籤之內。

優先級:內聯式 > 嵌入式 > 外部式

6類選擇器和ID選擇器

語法:

.類選器名稱{css樣式代碼;}

注意:

1、英文圓點開頭

2、其中類選器名稱可以任意起名(但不要起中文噢)

使用方法:

第一步:使用合適的標籤把要修飾的內容標記起來,如下:

<span>膽小如鼠</span>

第二步:使用class="類選擇器名稱"爲標籤設置一個類,如下:

<span class="stress">膽小如鼠</span>

第三步:設置類選器css樣式,如下:

.stress{color:red;}/*類前面要加入一個英文圓點*/


同理,ID選擇器功能類似,但也有一些重要的區別:

1、爲標籤設置id="ID名稱",而不是class="類名稱"。

2、ID選擇符的前面是井號(#)號,而不是英文圓點(.)。


區別:

不同點:

1、ID選擇器只能在文檔中使用一次。與類選擇器不同,在一個HTML文檔中,ID選擇器只能使用一次,而且僅一次。而類選擇器可以使用多次。

2、可以使用類選擇器詞列表方法爲一個元素同時設置多個樣式。我們可以爲一個元素同時設多個樣式,但只可以用類選擇器的方法實現,ID選擇器是不可以的(不能使用 ID 詞列表)。


7 子選擇器

即大於符號(>),用於選擇指定標籤元素的第一代子元素。如右側代碼編輯器中的代碼:

.food>li{border:1px solid red;}

這行代碼會使class名爲food下的子元素li(水果、蔬菜)加入紅色實線邊框。

也可以是.first>span{border:1px solid red;}

即class名爲food下的子元素span加入紅色實線


8包含(後代)選擇器和通用選擇器

即加入空格,用於選擇指定標籤元素下的後輩元素。如右側代碼編輯器中的代碼:

.first  span{color:red;}

這行代碼會使第一段文字內容中的“膽小如鼠”字體顏色變爲紅色。

請注意這個選擇器與子選擇器的區別,子選擇器(child selector)僅是指它的直接後代,或者你可以理解爲作用於子元素的第一代後代。而後代選擇器是作用於所有子後代元素。後代選擇器通過空格來進行選擇,而子選擇器是通過“>”進行選擇。

總結:>作用於元素的第一代後代,空格作用於元素的所有後代。

而通用選擇器:* {color:red;}

9僞類選擇符

允許給html不存在的標籤(標籤的某種狀態)設置樣式,比如說我們給html中一個標籤元素的鼠標滑過的狀態來設置字體顏色:

a:hover{color:red;}

上面一行代碼就是爲 a 標籤鼠標滑過的狀態設置字體顏色變紅。這樣就會使第一段文字內容中的“膽小如鼠”文字加入鼠標滑過字體顏色變爲紅色特效。

關於僞選擇符:

    關於僞類選擇符,到目前爲止,可以兼容所有瀏鑑器的“僞類選擇符”就是 a 標籤上使用 :hover 了(其實僞類選擇符還有很多,尤其是 css3 中,但是因爲不能兼容所有瀏覽器,本教程只是講了這一種最常用的)。其實 :hover 可以放在任意的標籤上,比如說 p:hover,但是它們的兼容性也是很不好的,所以現在比較常用的還是 a:hover 的組合。


10分組選擇器

爲右側代碼編輯器中的h1、span標籤同時設置字體顏色爲紅色:

h1,span{color:red;}

它相當於下面兩行代碼:

h1{color:red;}
span{color:red;}

11繼承

繼承是一種規則,它允許樣式不僅應用於某個特定html標籤元素,而且應用於其後代。比如下面代碼:如某種顏色應用於p標籤,這個顏色設置不僅應用p標籤,還應用於p標籤中的所有子元素文本,這裏子元素爲span標籤。

p{color:red;}

<p>三年級時,我還是一個<span>膽小如鼠</span>的小女孩。</p>

可見右側結果窗口中p中的文本與span中的文本都設置爲了紅色。但注意有一些css樣式是不具有繼承性的。如border:1px solid red;


12 特殊性-權值

標籤的權值爲1,類選擇符的權值爲10,ID選擇符的權值最高爲100。例如下面的代碼:

p{color:red;} /*權值爲1*/
p span{color:green;} /*權值爲1+1=2*/
.warning{color:white;} /*權值爲10*/
p span.warning{color:purple;} /*權值爲1+1+10=12*/
#footer .note p{color:yellow;} /*權值爲100+10+1=111*/

注意:還有一個權值比較特殊--繼承也有權值但很低,有的文獻提出它只有0.1,所以可以理解爲繼承的權值最低。

13 層疊

層疊就是在html文件中對於同一個元素可以有多個css樣式存在,當有相同權重的樣式存在時,會根據這些css樣式的前後順序來決定,處於最後面的css樣式會被應用。

如下面代碼:

p{color:red;}
p{color:green;}
<p class="first">三年級時,我還是一個<span>膽小如鼠</span>的小女孩。</p>

最後 p 中的文本會設置爲green,這個層疊很好理解,理解爲後面的樣式會覆蓋前面的樣式。

所以前面的css樣式優先級就不難理解了:

內聯樣式表(標籤內部)> 嵌入樣式表(當前文件中)> 外部樣式表(外部文件中)。

若是有比較重要的,可以在在分號之前加入!important

14設置字體

爲網頁中的文字設置字體爲宋體。

body{font-family:"宋體";}

一般網頁喜歡設置“微軟雅黑”,如下代碼:

body{font-family:"Microsoft Yahei";}

body{font-family:"微軟雅黑";}

注意:第一種方法比第二種方法兼容性更好一些。

粗體:
a{font-weight:bold;}
斜體:
p a{font-style:italic;}

<p>三年級時,我還是一個<a>膽小如鼠</a>的小女孩。</p>
下劃線:
p a{text-decoration:underline;}

刪除線:

oldPrice{text-decoration:line-through;}

段首縮進兩格:

p{text-indent:2em;}

行間距:

p{line-height:1.5em;}
字母間距:
h1{
    letter-spacing:50px;
}
...
<h1>了不起的蓋茨比</h1>
單詞間距:
h1{
    word-spacing:50px;
}
...
<h1>welcome to imooc!</h1>
居中:
h1{
    text-align:center;
}
<h1>了不起的蓋茨比</h1>


15 元素分類:

常用的塊狀元素有:

<div>、<p>、<h1>...<h6>、<ol>、<ul>、<dl>、<table>、<address>、<blockquote> 、<form>

常用的內聯元素有:

<a>、<span>、<br>、<i>、<em>、<strong>、<label>、<q>、<var>、<cite>、<code>

常用的內聯塊狀元素有:

<img>、<input>

.設置display:block就是將元素顯示爲塊級元素。如下代碼就是將內聯元素a轉換爲塊狀元素,從而使a元素具有塊狀元素特點。

a{display:block;}

塊級元素特點:

1、每個塊級元素都從新的一行開始,並且其後的元素也另起一行。(真霸道,一個塊級元素獨佔一行)

2、元素的高度、寬度、行高以及頂和底邊距都可設置。

3、元素寬度在不設置的情況下,是它本身父容器的100%(和父元素的寬度一致),除非設定一個寬度。

如下代碼就是將塊狀元素div轉換爲內聯元素,從而使 div 元素具有內聯元素特點。

 div{
     display:inline;
 }

......

<div>我要變成內聯元素</div>

內聯元素特點:

1、和其他元素都在一行上;

2、元素的高度寬度及頂部和底部邊距不可設置;

3、元素的寬度就是它包含的文字或圖片的寬度,不可改變。

內聯塊狀元素(inline-block就是同時具備內聯元素、塊狀元素的特點,代碼display:inline-block就是將元素設置爲內聯塊狀元素。(css2.1新增),<img>、<input>標籤就是這種內聯塊狀標籤。

inline-block 元素特點:

1、和其他元素都在一行上;

2、元素的高度、寬度、行高以及頂和底邊距都可設置。

如:我們爲 a 元素設置了寬和高,但都沒有起到作用,原因是a在默認的時候是內聯元素,內聯元素是不可以設置的。


16 盒子模型

下面代碼爲 div 來設置邊框粗細爲 2px、樣式爲實心的、顏色爲紅色的邊框:

div{
    border:2px  solid  red;

注意:

1、border-style(邊框樣式)常見樣式有:

dashed(虛線)| dotted(點線)| solid(實線)。


2、border-color(邊框顏色)中的顏色可設置爲十六進制顏色,如:

border-color:#888;//前面的井號不要忘掉。


3、border-width(邊框寬度)中的寬度也可以設置爲:

thin | medium | thick(但不是很常用),最常還是用象素(px)。

單獨設置下邊框:
div{border-bottom:1px solid red;}


17 填充

元素內容邊框之間是可以設置距離的,稱之爲“填充”。填充也可分爲上、右、下、左(順時針)。如下代碼:

div{padding:20px 10px 15px 30px;}

順序一定不要搞混。可以分開寫上面代碼:

div{
   padding-top:20px;
   padding-right:10px;
   padding-bottom:15px;
   padding-left:30px;
}

如果上、右、下、左的填充都爲10px;可以這麼寫

div{padding:10px;}

如果上下填充一樣爲10px,左右一樣爲20px,可以這麼寫:

div{padding:10px 20px;}

18 css佈局模型

佈局模型是建立在盒模型基礎之上,又不同於我們常說的 CSS 佈局樣式或 CSS 佈局模板。如果說佈局模型是本,那麼 CSS 佈局模板就是末了,是外在的表現形式。 
CSS包含3種基本的佈局模型,用英文概括爲:Flow、Layer 和 Float。
在網頁中,元素有三種佈局模型:
1、流動模型(Flow)
2、浮動模型 (Float)
3、層模型(Layer)

Ⅰ。流動模型

流動(Flow)是默認的網頁佈局模式。也就是說網頁在默認狀態下的 HTML 網頁元素都是根據流動模型來分佈網頁內容的。

流動佈局模型具有2個比較典型的特徵:

第一點,塊狀元素都會在所處的包含元素內自上而下按順序垂直延伸分佈,因爲在默認狀態下,塊狀元素的寬度都爲100%。實際上,塊狀元素都會以行的形式佔據位置。如右側代碼編輯器中三個塊狀元素標籤(div,h1,p)寬度顯示爲100%。

第二點,在流動模型下,內聯元素都會在所處的包含元素內從左到右水平分佈顯示。(內聯元素可不像塊狀元素這麼霸道獨佔一行)

Ⅱ。浮動模型

如果現在我們想讓兩個塊狀元素並排顯示,怎麼辦呢?不要着急,設置元素浮動就可以實現這一願望。

任何元素在默認情況下是不能浮動的,但可以用 CSS 定義爲浮動,如 div、p、table、img 等元素都可以被定義爲浮動。如下代碼可以實現兩個 div 元素一行顯示。

div{
    width:200px;
    height:200px;
    border:2px red solid;
    float:left;
}
<div id="div1"></div>
<div id="div2"></div>

設置兩個元素一左一右可以實現一行顯示嗎?當然可以:

div{
    width:200px;
    height:200px;
    border:2px red solid;
}
#div1{float:left;}
#div2{float:right;}

Ⅲ、層模型

層佈局模型就像是圖像軟件PhotoShop中非常流行的圖層編輯功能一樣,每個圖層能夠精確定位操作,但在網頁設計領域,由於網頁大小的活動性,層佈局沒能受到熱捧。但是在網頁上局部使用層佈局還是有其方便之處的。下面我們來學習一下html中的層佈局。

如何讓html元素在網頁中精確定位,就像圖像軟件PhotoShop中的圖層一樣可以對每個圖層能夠精確定位操作。CSS定義了一組定位(positioning)屬性來支持層佈局模型。

層模型有三種形式:

1、絕對定位(position: absolute)

如果想爲元素設置層模型中的絕對定位,需要設置position:absolute(表示絕對定位),這條語句的作用將元素從文檔流中拖出來,然後使用left、right、top、bottom屬性相對於其最接近的一個具有定位屬性的父包含塊進行絕對定位。如果不存在這樣的包含塊,則相對於body元素,即相對於瀏覽器窗口

如下面代碼可以實現div元素相對於瀏覽器窗口向右移動100px,向下移動50px。

div{
    width:200px;
    height:200px;
    border:2px red solid;
    position:absolute;
    left:100px;
    top:50px;
}
<div id="div1"></div>

2、相對定位(position: relative)

相對定位完成的過程是首先按static(float)方式生成一個元素(並且元素像層一樣浮動了起來),然後相對於以前的位置移動,移動的方向和幅度由left、right、top、bottom屬性確定,偏移前的位置保留不動雖然div元素相對於以前的位置產生了偏移,但是div元素以前的位置還是保留着,所以後面的span元素是顯示在了div元素以前位置的後面。

3、固定定位(position: fixed)

fixed:表示固定定位,與absolute定位類型類似,但它的相對移動的座標是視圖(屏幕內的網頁窗口)本身。由於視圖本身是固定的,它不會隨瀏覽器窗口的滾動條滾動而變化,除非你在屏幕中移動瀏覽器窗口的屏幕位置,或改變瀏覽器窗口的顯示大小,因此固定定位的元素會始終位於瀏覽器窗口內視圖的某個位置,不會受文檔流動影響,這與background-attachment:fixed;屬性功能相同。


19 Relative與Absolute組合使用

這個比較難理解,簡單說就是子元素需要加入position:absolute和相對位置,而父元素(前輩元素)需要加入position:relative;這樣的話既是絕對位置也不是相對瀏覽器而言了,是相對父元素的位置而言。

規範如下:

1、參照定位的元素必須是相對定位元素的前輩元素:

<div id="box1"><!--參照定位的元素-->
    <div id="box2">相對參照元素進行定位</div><!--相對定位元素-->
</div>

從上面代碼可以看出box1是box2的父元素(父元素當然也是前輩元素了)。

2、參照定位的元素必須加入position:relative;

#box1{
    width:200px;
    height:200px;
    position:relative;        
}

3、定位元素加入position:absolute,便可以使用top、bottom、left、right來進行偏移定位了。

#box2{
    position:absolute;
    top:20px;
    left:30px;         
}

這樣box2就可以相對於父元素box1定位了(這裏注意參照物就可以不是瀏覽器了,而可以自由設置了)。


20 縮寫

外邊距(margin)、內邊距(padding)和邊框(border)設置上下左右四個方向的邊距是按照順時針方向設置的:上右下左。具體應用在margin和padding的例子如下:

margin:10px 15px 12px 14px;/*上設置爲10px、右設置爲15px、下設置爲12px、左設置爲14px*/

通常有下面三種縮寫方法:

1、如果top、right、bottom、left的值相同,如下面代碼:

margin:10px 10px 10px 10px;

可縮寫爲:

margin:10px;

2、如果top和bottom值相同、left和 right的值相同,如下面代碼:

margin:10px 20px 10px 20px;

可縮寫爲:

margin:10px 20px;

3、如果left和right的值相同,如下面代碼:

margin:10px 20px 30px 20px;

可縮寫爲:

margin:10px 20px 30px;

注意:padding、border的縮寫方法和margin是一致的。


關於顏色的css樣式也是可以縮寫的,當你設置的顏色是16進制的色彩值時,如果每兩位的值相同,可以縮寫一半。

例子1:

p{color:#000000;}

可以縮寫爲:

p{color: #000;}

例子2:

p{color: #336699;}

可以縮寫爲:

p{color: #369;}

還有關於字體的縮寫

body{
    font-style:italic;
    font-variant:small-caps; 
    font-weight:bold; 
    font-size:12px; 
    line-height:1.5em; 
    font-family:"宋體",sans-serif;
}

這麼多行的代碼其實可以縮寫爲一句:

body{
    font:italic  small-caps  bold  12px/1.5em  "宋體",sans-serif;
}

注意:

1、使用這一簡寫方式你至少要指定 font-size 和 font-family 屬性,其他的屬性(如 font-weight、font-style、font-varient、line-height)如未指定將自動使用默認值。

2、在縮寫時 font-size 與 line-height 中間要加入“/”斜扛。

一般情況下因爲對於中文網站,英文還是比較少的,所以下面縮寫代碼比較常用:

body{
    font:12px/1.5em  "宋體",sans-serif;
}

只是有字號、行間距、中文字體、英文字體設置。

21 顏色

1、英文命令顏色

前面幾個小節中經常用到的就是這種設置方法:

p{color:red;}

2、RGB顏色

這個與 photoshop 中的 RGB 顏色是一致的,由 R(red)、G(green)、B(blue) 三種顏色的比例來配色。

p{color:rgb(133,45,200);}

每一項的值可以是 0~255 之間的整數,也可以是 0%~100% 的百分數。如:

p{color:rgb(20%,33%,25%);}

3、十六進制顏色

這種顏色設置方法是現在比較普遍使用的方法,其原理其實也是 RGB 設置,但是其每一項的值由 0-255 變成了十六進制 00-ff。

p{color:#00ffff;}

22長度值

1、像素

像素爲什麼是相對單位呢?因爲像素指的是顯示器上的小點(CSS規範中假設“90像素=1英寸”)。實際情況是瀏覽器會使用顯示器的實際像素值有關,在目前大多數的設計者都傾向於使用像素(px)作爲單位。

2、em

就是本元素給定字體的 font-size 值,如果元素的 font-size 爲 14px ,那麼 1em = 14px;如果 font-size 爲 18px,那麼 1em = 18px。如下代碼:

p{font-size:12px;text-indent:2em;}

上面代碼就是可以實現段落首行縮進 24px(也就是兩個字體大小的距離)。

下面注意一個特殊情況:

但當給 font-size 設置單位爲 em 時,此時計算的標準以 p 的父元素的 font-size 爲基礎。如下代碼:

html:

<p>以這個<span>例子</span>爲例。</p>

css:

p{font-size:14px}
span{font-size:0.8em;}

結果 span 中的字體“例子”字體大小就爲 11.2px(14 * 0.8 = 11.2px)。

3、百分比

p{font-size:12px;line-height:130%}

設置行高(行間距)爲字體的130%(12 * 1.3 = 15.6px)。


23 水平居中設置

我們在實際工作中常會遇到需要設置水平居中的場景,比如爲了美觀,文章的標題一般都是水平居中顯示的。

這裏我們又得分兩種情況:行內元素 還是 塊狀元素 ,塊狀元素裏面又分爲定寬塊狀元素,以及不定寬塊狀元素。今天我們先來了解一下行內元素怎麼進行水平居中?

如果被設置元素爲文本、圖片等行內元素時,水平居中是通過給父元素設置 text-align:center 來實現的。(父元素和子元素:如下面的html代碼中,div是“我想要在父容器中水平居中顯示”這個文本的父元素。反之這個文本是div的子元素 )如下代碼:

html代碼:

<body>
  <div class="txtCenter">我想要在父容器中水平居中顯示。</div>
</body>

css代碼:

<style>
  .txtCenter{
    text-align:center;
  }
</style>

Ⅰ。定寬塊狀元素

滿足定寬塊狀兩個條件的元素是可以通過設置左右margin”值爲“auto”來實現居中的。我們來看個例子就是設置 div 這個塊狀元素水平居中:

html代碼:

<body>
  <div>我是定寬塊狀元素,哈哈,我要水平居中顯示。</div>
</body>

css代碼:

<style>
div{
    border:1px solid red;/*爲了顯示居中效果明顯爲 div 設置了邊框*/
    
    width:200px;/*定寬*/
    margin:20px auto;/* margin-left 與 margin-right 設置爲 auto */
}

</style>

也可以寫成:

margin-left:auto;
margin-right:auto;

注意:元素的“上下 margin” 是可以隨意設置的。

不定寬塊狀元素方法

不定寬度的塊狀元素有三種方法居中(這三種方法目前使用的都很多):

  1. 加入 table 標籤
  2. 設置 display: inline 方法:與第一種類似,顯示類型設爲 行內元素,進行不定寬元素的屬性設置
  3. 設置 position:relative 和 left:50%:利用 相對定位 的方式,將元素向左偏移 50% ,即達到居中的目的

這一小節我們來講一下第一種方法:

爲什麼選擇方法一加入table標籤? 是利用table標籤的長度自適應性---即不定義其長度也不默認父元素body的長度(table其長度根據其內文本長度決定),因此可以看做一個定寬度塊元素,然後再利用定寬度塊狀居中的margin的方法,使其水平居中。

第一步:爲需要設置的居中的元素外面加入一個 table 標籤 ( 包括 <tbody>、<tr>、<td> )。

第二步:爲這個 table 設置“左右 margin 居中”(這個和定寬塊狀元素的方法一樣)。

舉例如下:

html代碼:

<div>
 <table>
  <tbody>
    <tr><td>
    <ul>
        <li>我是第一行文本</li>
        <li>我是第二行文本</li>
        <li>我是第三行文本</li>
    </ul>
    </td></tr>
  </tbody>
 </table>
</div>

css代碼:

<style>
table{
    border:1px solid;
    margin:0 auto;
}
</style>

第二種方法:改變塊級元素的 display 爲 inline 類型(設置爲 行內元素 顯示),然後使用 text-align:center 來實現居中效果。如下例子:

html代碼:

<body>
<div class="container">
    <ul>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
    </ul>
</div>
</body>

css代碼:

<style>
.container{
    text-align:center;
}
/* margin:0;padding:0(消除文本與div邊框之間的間隙)*/
.container ul{
    list-style:none;
    margin:0;
    padding:0;
    display:inline;
}
/* margin-right:8px(設置li文本之間的間隔)*/
.container li{
    margin-right:8px;
    display:inline;
}
</style>

這種方法相比第一種方法的優勢是不用增加無語義標籤,但也存在着一些問題:它將塊狀元素的 display 類型改爲 inline,變成了行內元素,所以少了一些功能,比如設定長度值。

方法三:通過給父元素設置 float,然後給父元素設置 position:relative  left:50%,子元素設置 position:relative  left: -50% 來實現水平居中。

我們可以這樣理解:假想ul層的父層(即下面例子中的div層)中間有條平分線將ul層的父層div層)平均分爲兩份,ul層的css代碼是將ul層的最左端與ul層的父層div層)的平分線對齊;而li層的css代碼則是將li層的平分線與ul層的最左端(也是div層的平分線)對齊,從而實現li層的居中。

 

代碼如下:

<body>
<div class="container">
    <ul>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
    </ul>
</div>
</body>

css代碼:

<style>
.container{
    float:left;
    position:relative;
    left:50%
}

.container ul{
    list-style:none;
    margin:0;
    padding:0;
    
    position:relative;
    left:-50%;
}
.container li{float:left;display:inline;margin-right:8px;}
</style>

 

這三種方法使用得都非常廣泛,各有優缺點,具體選用哪種方法,可以視具體情況而定。


24 垂直居中

這裏我們又得分兩種情況:父元素高度確定的單行文本,以及父元素高度確定的多行文本

本節我們先來看第一種父元素高度確定的單行文本, 怎麼設置它爲垂直居中呢?

父元素高度確定的單行文本的豎直居中的方法是通過設置父元素的 height 和 line-height 高度一致來實現的。(height: 該元素的高度,line-height: 顧名思義,行高(行間距),指在文本中,行與行之間的 基線間的距離 )

line-height 與 font-size 的計算值之差,在 CSS 中成爲行間距。分爲兩半,分別加到一個文本行內容的頂部和底部。

這種文字行高與塊高一致帶來了一個弊端:當文字內容的長度大於塊的寬時,就有內容脫離了塊。

如下代碼:

<div class="container">
    hi,imooc!
</div>

css代碼:

<style>
.container{
    height:100px;
    line-height:100px;
    background:#999;
}
</style>

父元素高度確定的多行文本圖片等的豎直居中的方法有兩種:

方法一:使用插入 table  (包括tbodytrtd)標籤,同時設置 vertical-alignmiddle

css 中有一個用於豎直居中的屬性 vertical-align在父元素設置此樣式時,會對inline-block類型的子元素都有用下面看一下例子:

html代碼:

<body>
<table><tbody><tr><td class="wrap">
<div>
    <p>看我是否可以居中。</p>
</div>
</td></tr></tbody></table>
</body>

css代碼:

table td{height:500px;background:#ccc}

因爲 td 標籤默認情況下就默認設置了 vertical-align  middle,所以我們不需要顯式地設置了。

方法二:

 chromefirefox  IE8 以上的瀏覽器下可以設置塊級元素的 display  table-cell(設置爲表格單元顯示),激活 vertical-align屬性,但注意 IE6並不支持這個樣式兼容性比較差

html代碼:

<div class="container">
    <div>
        <p>看我是否可以居中。</p>
        <p>看我是否可以居中。</p>
        <p>看我是否可以居中。</p>
    </div>
</div>

css代碼:

<style>
.container{
    height:300px;
    background:#ccc;
    display:table-cell;/*IE8以上及Chrome、Firefox*/
    vertical-align:middle;/*IE8以上及Chrome、Firefox*/
}
</style>

這種方法的好處是不用添加多餘的無意義的標籤,但缺點也很明顯,它的兼容性不是很好,不兼容 IE67而且這樣修改displayblock變成了table-cell,破壞了原有的塊狀元素的性質


25隱性改變display類型

有一個有趣的現象就是當爲元素(不論之前是什麼類型元素,display:none 除外)設置以下 2 個句之一:

 1. position : absolute 

 2. float : left 或 float:right 

簡單來說,只要html代碼中出現以上兩句之一,元素的display顯示類型就會自動變爲以 display:inline-block塊狀元素的方式顯示,當然就可以設置元素的 width  height 了,且默認寬度不佔滿父元素。

如下面的代碼,小夥伴們都知道 a 標籤是 行內元素 ,所以設置它的width 是 沒有效果的,但是設置爲 position:absolute 以後,就可以了。

<div class="container">
    <a href="#" title="">進入課程請單擊這裏</a>
</div>

css代碼

<style>
.container a{
    position:absolute;
    width:200px;
    background:#ccc;
}
</style>
實際效果就是變成塊狀元素之後可以改變背景的大小了,之前是行內元素時是跟文字變化而變化的,不能調整大小。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章