HTML+CSS基礎(CSS篇下)

CSS格式化排版

1、字體

我們可以使用css樣式為網頁中的文字設置字體、字號、顏色等樣式屬性。下面我們來看一個例子,下面代碼實現:為網頁中的文字設置字體為宋體。

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

這里注意不要設置不常用的字體,因為如果用戶本地電腦上如果沒有安裝你設置的字體,就會顯示瀏覽器默認的字體。(因為用戶是否可以看到你設置的字體樣式取決于用戶本地電腦上是否安裝你設置的字體。)
現在一般網頁喜歡設置“微軟雅黑”,如下代碼:
body{font-family:"Microsoft Yahei";}

body{font-family:"微軟雅黑";}
注意:第一種方法比第二種方法兼容性更好一些。
因為這種字體即美觀又可以在客戶端安全的顯示出來(用戶本地一般都是默認安裝的)。

2、字號、顏色

可以使用下面代碼設置網頁中文字的字號為12像素,并把字體顏色設置為#666(灰色):
body{font-size:12px;color:#666}
拓展:
font-family:設置字體;
font-size:字體大小;
font-weight:bold:設置為粗體樣式;
font-style:italic:設置為斜體樣式;
text-decoration:underline:文字設置下劃線;
text-decoration:line-through:刪除線;
text-indent:2em:縮進;(注意:2em的意思就是文字的2倍大小。)
line-height:2em:行高;
word-spacing:50px:單詞間距;
letter-spacing:20px:字母間距;
text-align:center:水平居中對齊;

3、粗體

我們還可以使用css樣式來改變文字的樣式:粗體、斜體、下劃線、刪除線,可以使用下面代碼實現設置文字以粗體樣式顯示出來。
p span{font-weight:bold;}
在這里大家可以看到,如果想為文字設置粗體是有單獨的css樣式來實現的,再不用為了實現粗體樣式而使用h1-h6或strong標簽了。

4、斜體

以下代碼可以實現文字以斜體樣式在瀏覽器中顯示:
p a{font-style:italic;}
<p>三年級時,我還是一個<a>膽小如鼠</a>的小女孩。</p>

5、下劃線

有些情況下想為文字設置為下劃線樣式,這樣可以在視覺上強調文字,可以使用下面代碼來實現:
p a{text-decoration:underline;}
<p>三年級時,我還是一個<a>膽小如鼠</a>的小女孩。</p>

6、刪除線

如果想在網頁上設置刪除線怎么辦,這個樣式在電商網站上常會見到:


上圖中的原價上的刪除線使用下面代碼就可以實現:
.oldPrice{text-decoration:line-through;}

文本修飾拓展:
h1{text-decoration:overline}
underline 定義文本下的一條線。
overline 定義文本上的一條線。
line-through 定義穿過文本下的一條線。
blink 定義閃爍的文本。

7、段落排版--縮進

中文文字中的段前習慣空兩個文字的空白,這個特殊的樣式可以用下面代碼來實現p標簽的縮進:
p{text-indent:2em;}
注意:2em的意思就是文字的2倍大小。

8、行間距(行高)

學習一下另一個在段落排版中起重要作用的行間距(行高)屬性(line-height),如下代碼實現設置段落行間距為1.5倍。
p{line-height:1.5em;}

9、中文字間距、字母間距

中文字間隔、字母間隔設置:
如果想在網頁排版中設置文字間隔或者字母間隔就可以使用 letter-spacing 來實現,如下面代碼:

h1{
    letter-spacing:50px;
}

注意:這個樣式使用在英文單詞時,是設置字母與字母之間的間距。

單詞間距設置:
如果我想設置英文單詞之間的間距呢?可以使用 word-spacing 來實現。如下代碼:

h1{
    word-spacing:50px;
}

10 -對齊

想為塊狀元素中的文本、圖片設置居中樣式嗎?可以使用text-align樣式代碼,如下代碼可實現文本居中顯示。

h1{
    text-align:center;
}

CSS盒模型

1、元素分類

在講解CSS布局之前,我們需要提前知道一些知識,在CSS中,html中的標簽元素大體被分為三種不同的類型:塊狀元素、內聯元素(又叫行內元素)和內聯塊狀元素。
常用的塊狀元素有:

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

常用的內聯元素有:

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

常用的內聯塊狀元素有:
<img>、<input>

2、塊級元素

什么是塊級元素?在html中<div>、 <p>、<h1>、<form>、<ul> 和 <li>就是塊級元素。設置display:block就是將元素顯示為塊級元素。如下代碼就是將內聯元素a轉換為塊狀元素,從而使a元素具有塊狀元素特點。
a{display:block;}
塊級元素特點:
1、每個塊級元素都從新的一行開始,并且其后的元素也另起一行。(真霸道,一個塊級元素獨占一行)
2、元素的高度、寬度、行高以及頂和底邊距都可設置。
3、元素寬度在不設置的情況下,是它本身父容器的100%(和父元素的寬度一致),除非設定一個寬度。

3.內聯元素

在html中,<span>、<a>、<label>、 <strong> 和<em>就是典型的內聯元素(行內元素)(inline)元素。當然塊狀元素也可以通過代碼display:inline將元素設置為內聯元素。如下代碼就是將塊狀元素div轉換為內聯元素,從而使 div 元素具有內聯元素特點。

 div{
     display:inline;
 }

內聯元素特點:
1、和其他元素都在一行上;
2、元素的高度、寬度及頂部和底部邊距不可設置;
3、元素的寬度就是它包含的文字或圖片的寬度,不可改變。

4.內聯塊狀元素

內聯塊狀元素(inline-block)就是同時具備內聯元素、塊狀元素的特點,代碼display:inline-block就是將元素設置為內聯塊狀元素。(css2.1新增),<img>、<input>標簽就是這種內聯塊狀標簽。
inline-block 元素特點:
1、和其他元素都在一行上;
2、元素的高度、寬度、行高以及頂和底邊距都可設置。

5、盒模型中的邊框

盒子模型的邊框就是圍繞著內容及補白的線,這條線你可以設置它的粗細、樣式和顏色(邊框三個屬性)。

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

div{
    border:2px  solid  red;
}

上面是 border 代碼的縮寫形式,可以分開寫:

div{
    border-width:2px;
    border-style:solid;
    border-color:red;
}

注意:
1、border-style(邊框樣式)常見樣式有:
dashed(虛線)| dotted(點線)| solid(實線)。
2、border-color(邊框顏色)中的顏色可設置為十六進制顏色,如:
border-color:#888;//前面的井號不要忘掉。
3、border-width(邊框寬度)中的寬度也可以設置為:
thin | medium | thick(但不是很常用),最常還是用象素(px)。

現在有一個問題,如果有想為 p 標簽單獨設置下邊框,而其它三邊都不設置邊框樣式怎么辦呢?css 樣式中允許只為一個方向的邊框設置樣式:
div{border-bottom:1px solid red;}
同樣可以使用下面代碼實現其它三邊(上、右、左)邊框的設置:
border-top:1px solid red;
border-right:1px solid red;
border-left:1px solid red;

6盒模型--寬度和高度

盒模型寬度和高度和我們平常所說的物體的寬度和高度理解是不一樣的,css內定義的寬(width)和高(height),指的是填充以里的內容范圍。
因此一個元素實際寬度(盒子的寬度)=左邊界+左邊框+左填充+內容寬度+右填充+右邊框+右邊界。


元素的高度也是同理。

7、盒模型--填充(padding)

元素內容與邊框之間是可以設置距離的,稱之為“填充”。填充也可分為上、右、下、左(順時針)。如下代碼:
div{padding:20px 10px 15px 30px;}
如果上、右、下、左的填充都為10px;可以這么寫
div{padding:10px;}
如果上下填充一樣為10px,左右一樣為20px,可以這么寫:
div{padding:10px 20px;}

8、盒模型--邊界(margin)

元素與其它元素之間的距離可以使用邊界(margin)來設置。邊界也是可分為上、右、下、左。如下代碼:
div{margin:20px 10px 15px 30px;}

css布局模型

清楚了CSS 盒模型的基本概念、 盒模型類型, 我們就可以深入探討網頁布局的基本模型了。布局模型與盒模型一樣都是 CSS 最基本、 最核心的概念。 但布局模型是建立在盒模型基礎之上,又不同于我們常說的 CSS 布局樣式或 CSS 布局模板。如果說布局模型是本,那么 CSS 布局模板就是末了,是外在的表現形式。
CSS包含3種基本的布局模型,用英文概括為:Flow、Layer 和 Float。
在網頁中,元素有三種布局模型:
1、流動模型(Flow)
2、浮動模型 (Float)
3、層模型(Layer)

1.流動模型

先來說一說流動模型,流動(Flow)是默認的網頁布局模式。也就是說網頁在默認狀態下的 HTML 網頁元素都是根據流動模型來分布網頁內容的。
流動布局模型具有2個比較典型的特征:
第一點,塊狀元素都會在所處的包含元素內自上而下按順序垂直延伸分布,因為在默認狀態下,塊狀元素的寬度都為100%。實際上,塊狀元素都會以行的形式占據位置。
第二點,在流動模型下,內聯元素都會在所處的包含元素內從左到右水平分布顯示。(內聯元素可不像塊狀元素這么霸道獨占一行)
右側代碼編輯器中內聯元素標簽a、span、em、strong都是內聯元素。

2.浮動模型

塊狀元素這么霸道都是獨占一行,如果現在我們想讓兩個塊狀元素并排顯示,怎么辦呢?不要著急,設置元素浮動就可以實現這一愿望。
任何元素在默認情況下是不能浮動的,但可以用 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; float:right;}
效果圖

又有小伙伴問了,設置兩個元素一左一右可以實現一行顯示嗎?當然可以:

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

3.層模型

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

層模型有三種形式:
1、絕對定位(position: absolute)
2、相對定位(position: relative)
3、固定定位(position: fixed)

絕對定位
如果想為元素設置層模型中的絕對定位,需要設置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>
效果如下:


相對定位
如果想為元素設置層模型中的相對定位,需要設置position:relative(表示相對定位),它通過left、right、top、bottom屬性確定元素在正常文檔流中的偏移位置。相對定位完成的過程是首先按static(float)方式生成一個元素(并且元素像層一樣浮動了起來),然后相對于以前的位置移動,移動的方向和幅度由left、right、top、bottom屬性確定,偏移前的位置保留不動。
如下代碼實現相對于以前位置向下移動50px,向右移動100px;

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

效果圖:



什么叫做“偏移前的位置保留不動”呢?
大家可以做一個實驗,在右側代碼編輯器的19行div標簽的后面加入一個span標簽,在標并在span標簽中寫入一些文字。如下代碼:

<body> <div id="div1"></div>
<span>偏移前的位置還保留不動,覆蓋不了前面的div沒有偏移前的位置</span></body>

效果圖:


從效果圖中可以明顯的看出,雖然div元素相對于以前的位置產生了偏移,但是div元素以前的位置還是保留著,所以后面的span元素是顯示在了div元素以前位置的后面。

固定定位
fixed:表示固定定位,與absolute定位類型類似,但它的相對移動的坐標是視圖(屏幕內的網頁窗口)本身。由于視圖本身是固定的,它不會隨瀏覽器窗口的滾動條滾動而變化,除非你在屏幕中移動瀏覽器窗口的屏幕位置,或改變瀏覽器窗口的顯示大小,因此固定定位的元素會始終位于瀏覽器窗口內視圖的某個位置,不會受文檔流動影響,這與background-attachment:fixed?屬性功能相同。以下代碼可以實現相對于瀏覽器視圖向右移動100px,向下移動50px。并且拖動滾動條時位置固定不變。

#div1{
    width:200px;
    height:200px;
    border:2px red solid;
    position:fixed;
    left:100px;
    top:50px;
}
<p>
文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。
</p>

Relative與Absolute組合使用
小伙伴們學習了12-6小節的絕對定位的方法:使用position:absolute可以實現被設置元素相對于瀏覽器(body)設置定位以后,大家有沒有想過可不可以相對于其它元素進行定位呢?答案是肯定的,當然可以。使用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定位了(這里注意參照物就可以不是瀏覽器了,而可以自由設置了)。

CSS代碼縮寫,占用更少的帶寬

1.盒模型代碼簡寫

還記得在講盒模型時外邊距(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是一致的。

2.顏色值縮寫

關于顏色的css樣式也是可以縮寫的,當你設置的顏色是16進制的色彩值時,如果每兩位的值相同,可以縮寫一半。
例子1:
p{color:#000000;}
可以縮寫為:
p{color: #000;}
例子2:
p{color: #336699;}
可以縮寫為:
p{color: #369;}

3.字體縮寫

網頁中的字體css樣式代碼也有他自己的縮寫方式,下面是給網頁設置字體的代碼:

body{

   font-style:italic;  //設置字體為斜體
   font-variant:small-caps; //區分大小寫,瀏覽器會顯示小型大寫字母的字體
   font-weight:bold; //設置粗體
   font-size:12px;  //字號是12像素
   line-height:1.5em;  //行間距(行高)1.5個行倍
   font-family:"宋體",sans-serif;//設置中文字體為宋體,英文字體為sans-serif}
}

這么多行的代碼其實可以縮寫為一句:

body{
    font:italic  small-caps  bold  12px/1.5em  "宋體",sans-serif;
    /*前三個順序沒影響可無,后兩個順序固定且必須有*/
}

注意:
1、使用這一簡寫方式你至少要指定 font-size 和 font-family 屬性,其他的屬性(如 font-weight、font-style、font-variant、line-height)如未指定將自動使用默認值。
2、在縮寫時 font-size 與 line-height 中間要加入“/”斜扛。
一般情況下因為對于中文網站,英文還是比較少的,所以下面縮寫代碼比較常用:

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

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

單位和值

1.顏色值

在網頁中的顏色設置是非常重要,有字體顏色(color)、背景顏色(background-color)、邊框顏色(border)等,設置顏色的方法也有很多種:
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;}
配色表:

2.長度值

長度單位總結一下,目前比較常用到px(像素)、em、% 百分比,要注意其實這三種單位都是相對單位。
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)。

css樣式設置小技巧

1.水平居中設置-行內元素

我們在實際工作中常會遇到需要設置水平居中的場景,比如為了美觀,文章的標題一般都是水平居中顯示的。
這里我們又得分兩種情況:行內元素 還是 塊狀元素 ,塊狀元素里面又分為定寬塊狀元素,以及不定寬塊狀元素。今天我們先來了解一下行內元素怎么進行水平居中?
如果被設置元素為文本、圖片等行內元素時,水平居中是通過給父元素設置text-align:center來實現的。(父元素和子元素:如下面的html代碼中,div是“我想要在父容器中水平居中顯示”這個文本的父元素。反之這個文本是div的子元素 )如下代碼:
html代碼:
<body> <div class="txtCenter">我想要在父容器中水平居中顯示。</div></body>
css代碼:
<style> .txtCenter{ text-align:center; }</style>

2.水平居中設置-定寬塊狀元素

當被設置元素為 塊狀元素 時用 text-align:center 就不起作用了,這時也分兩種情況:定寬塊狀元素和不定寬塊狀元素。
滿足定寬和塊狀兩個條件的元素是可以通過設置“左右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” 是可以隨意設置的。

3 不定寬塊狀元素方法

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

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

3.1不定寬塊狀元素方法(一)

為什么選擇方法一加入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>

3.2不定寬塊狀元素方法(二)

除了上一節講到的插入table標簽,可以使不定寬塊狀元素水平居中之外,本節介紹第2種實現這種效果的方法,改變元素的display類型為行內元素,利用其屬性直接設置。
第二種方法:改變塊級元素的 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,變成了行內元素,所以少了一些功能,比如設定長度值。

3.3不定寬塊狀元素方法(三)

除了前兩節講到的插入table標簽,以及改變元素的display類型,可以使不定寬塊狀元素水平居中之外,本節介紹第3種實現這種效果的方法,設置浮動和相對定位來實現。

方法三:通過給父元素設置 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>

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

4 垂直居中-父元素高度確定的單行文本

我們在實際工作中也會遇到需要設置垂直居中的場景,比如好多報紙的文章標題在左右一側時,常常會設置為垂直居中,為了用戶體驗性好。
這里我們又得分兩種情況:父元素高度確定的單行文本,以及父元素高度確定的多行文本。
本節我們先來看第一種父元素高度確定的單行文本, 怎么設置它為垂直居中呢?
父元素高度確定的單行文本的豎直居中的方法是通過設置父元素的 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>

5父元素高度確定的多行文本(方法一)

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

方法一:使用插入 table (包括tbody、tr、td)標簽,同時設置 vertical-align:middle。

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,所以我們不需要顯式地設置了。

6父元素高度確定的多行文本(方法二)

除了上一節講到的插入table標簽,可以使父元素高度確定的多行文本垂直居中之外,本節介紹另外一種實現這種效果的方法。但這種方法兼容性比較差,只是提供大家學習參考。

在 chrome、firefox 及 IE8 以上的瀏覽器下可以設置塊級元素的 display 為 table-cell(設置為表格單元顯示),激活 vertical-align 屬性,但注意 IE6、7 并不支持這個樣式, 兼容性比較差。
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>

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

7 .隱性改變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>

想不起 display:inline-block 是做什么的小伙伴們,單擊“元素分類--內聯塊狀元素”可返回到前面小節進行復習。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,774評論 1 92
  • 本文主要是起筆記的作用,內容來自慕課網. 認識CSS樣式 CSS全稱為“層疊樣式表 (Cascading Styl...
    0o凍僵的企鵝o0閱讀 2,656評論 0 30
  • 本課來自http://www.imooc.com/learn/9請不要用作商業用途。 HTML5 HTML介紹 H...
    PYLON閱讀 3,272評論 0 5
  • 一 外部式css樣式 (也可稱為外聯式)就是把css代碼寫一個單獨的外部文件中,這個css樣式文件以“.css...
    KunMitnic閱讀 950評論 0 1
  • 我要怎樣優秀,才能碰觸到你
    愚笨的鳥閱讀 202評論 0 0