1. 程式人生 > >HTML+CSS之CSS盒模型 (8)

HTML+CSS之CSS盒模型 (8)

2015-03-10 wcdj

摘要:本文學習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%(和父元素的寬度一致),除非設定一個寬度。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>內聯塊狀元素</title>
<style type="text/css">
div,p,h1{background:pink;}
</style>
</head>
<body>
<h1>this is h1</h1>
<h1>this is h1, too</h1>
<div>div1</div>
<div>div2</div>
<p>段落1段落1段落1段落1段落1</p>
</body>
</html>

3 元素分類--內聯元素

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

內聯元素特點:

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

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

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

注意:內聯元素之間有一個間距問題,當行內元素之間有“回車”、“tab”、“空格”時就會出現間隙。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>行內元素標籤</title>
<style type="text/css">
a,span,em{
	background:pink;/*設定a、span、em標籤背景顏色都為粉色*/
}
</style>
</head>
<body>
<a href="http://www.baidu.com">百度</a>
<a href="http://www.imooc.com">慕課網</a>
<span>33333</span>
<span>44444</span><em>555555</em>
</body>
</html>

4 元素分類--內聯塊狀元素

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

inline-block元素特點:

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

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

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>內聯塊狀元素</title>
<style type="text/css">
a{
    display:inline-block;
	width:20px;/*在預設情況下寬度不起作用*/
	height:20px;/*在預設情況下高度不起作用*/
	background:pink;/*設定背景顏色為粉色*/
	text-align:center; /*設定文字居中顯示*/
}
</style>
</head>
<body>
<a>1</a>
<a>2</a>
<a>3</a>
<a>4</a>
</body>
</html>

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)。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>邊框</title>
<style type="text/css">
p{border:2px dotted #ccc;}
</style>
</head>
<body>
    <h1>勇氣</h1>
    <p>三年級時,我還是一個膽小如鼠的小女孩,上課從來不敢回答老師提出的問題,生怕回答錯了老師會批評我。就一直沒有這個勇氣來回答老師提出的問題。學校舉辦的活動我也沒勇氣參加。</p>
    <p>到了三年級下學期時,我們班上了一節公開課,老師提出了一個很簡單的問題,班裡很多同學都舉手了,甚至成績比我差很多的,也舉手了,還說著:"我來,我來。"我環顧了四周,就我沒有舉手。</p>   
</body>
</html>

6 盒模型--邊框(二)

現在有一個問題,如果有想為p標籤單獨設定下邊框,而其它三邊都不設定邊框樣式怎麼辦呢?css樣式中允許只為一個方向的邊框設定樣式:

div{border-bottom:1px solid red;}

同樣可以使用下面程式碼實現其它三邊上、右、左邊框的設定:

border-top:1px solid red;
border-right:1px solid red; 
border-left:1px solid red;

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>邊框</title>
<style type="text/css">
li{
    border-bottom:1px dotted #ccc;
}
</style>
</head>
<body>
<ul>
    <li>別讓不會說話害了你</li>
    <li>二十七八歲就應該有的見識</li>
    <li>別讓不好意思害了你</li>
</ul>
</body>
</html>

7 盒模型--寬度和高度

盒模型寬度和高度和我們平常所說的物體的寬度和高度理解是不一樣的,css內定義的寬(width)和高(height),指的是填充以裡的內容範圍

因此一個元素實際寬度(盒子的寬度)=左邊界+左邊框+左填充+內容寬度+右填充+右邊框+右邊界。

元素的高度也是同理。

比如:

css程式碼:

div{
    width:200px;
    padding:20px;
    border:1px solid red;
    margin:10px;    
}

html程式碼:

<body>
   <div>文字內容</div>
</body>

元素的實際長度為:10px+1px+20px+200px+20px+1px+10px=262px。在chrome瀏覽器下可檢視元素盒模型,如下圖:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>寬度和高度</title>
<style type="text/css">
li{
    border-bottom:1px dotted #ccc;
    width:200px;height:30px;
}
</style>
</head>
<body>
<ul>
    <li>別讓不會說話害了你</li>
    <li>二十七八歲就應該有的見識</li>
    <li>別讓不好意思害了你</li>
</ul>
</body>
</html>

注意:上一節中的列表項長度為什麼這麼長啊,不明白同學是不是應該看一看標籤分類那一小節,li是塊狀元素,塊狀元素有一個特點之一:在不設定寬度的情況下,顯示為父容器的100%

8 盒模型--填充

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

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;}
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>填充</title>
<style type="text/css">
#box1{
    width:100px;
    height:100px;
    padding:10px;
    border:1px solid red;
}
</style>
</head>
<body>
<div id="box1">盒子1</div>
</body>
</html>

9 盒模型--邊界

元素與其它元素之間的距離可以使用邊界(margin)來設定。邊界也是可分為上、右、下、左。如下程式碼:

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

也可以分開寫:

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

如果上右下左的邊界都為10px;可以這麼寫:

div{ margin:10px;}

如果上下邊界一樣為10px,左右一樣為20px,可以這麼寫:

div{ margin:10px 20px;}

總結一下:padding和margin的區別,padding在邊框裡,margin在邊框外。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>邊距</title>
<style type="text/css">
div{
    width:300px;
    height:300px;
    border:1px solid red;	
}
#box1{margin-bottom:30px;}
</style>
</head>
<body>
    <div id="box1">box1</div>
    <div id="box2">box2</div>   
</body>
</html>