素分類
在講解CSS布局之前,我們需要提前知道一些知識(shí),在CSS中,html中的標(biāo)簽元素大體被分為三種不同的類型:
塊狀元素、內(nèi)聯(lián)元素(又叫行內(nèi)元素)和內(nèi)聯(lián)塊狀元素。
常用的內(nèi)聯(lián)元素有:
<a>、<span>、<br/>、<sub>、<sup>、<label>、<b>、<i>、<u>、<del>
常用的塊狀元素有:
<div>、<p>、<h1>...<h6>、<ol>、<ul>、<li>、<dl>、<dt>、<dl>、<table>、<marquee>、<form>、<pre>
常用的內(nèi)聯(lián)塊狀元素(又叫行內(nèi)塊元素)有:
<img>、<input>
內(nèi)聯(lián)元素(行內(nèi))
在html中,<span>、<a>、<label>、<input>、 <img>、 <strong> 和<em>就是典型的內(nèi)聯(lián)元素(行內(nèi)元素)(inline)元素。
當(dāng)然塊狀元素也可以通過代碼display:inline將元素設(shè)置為內(nèi)聯(lián)元素。如下代碼就是將塊狀元素div轉(zhuǎn)換為內(nèi)聯(lián)元素,從頁使用div元素具有內(nèi)聯(lián)元素特點(diǎn)。
div{display:inline}
內(nèi)聯(lián)元素(行內(nèi))特點(diǎn):
1、和其他元素都在一行上;
2、元素的高度、寬度、行高及頂部和底部邊距不可設(shè)置;(padding可以設(shè)置)
3、元素的寬度就是它包含的文字或圖片的寬度,不可改變。
塊級(jí)元素
什么是塊級(jí)元素?在html中<div>、<p>、<h1>、<form>、<ul> 和 <li>就是塊級(jí)元素。
設(shè)置display:block就是將元素顯示為塊級(jí)元素。如下代碼就是將內(nèi)聯(lián)元素a轉(zhuǎn)換為塊狀元素,從而使a元素具有塊狀元素特點(diǎn)。
a{display:block;}
塊級(jí)元素特點(diǎn):
1、每個(gè)塊級(jí)元素都從新的一行開始,并且其后的元素也另起一行。(真霸道,一個(gè)塊級(jí)元素獨(dú)占一行)
2、元素的高度、寬度、行高以及頂和底邊距都可設(shè)置。
3、元素寬度在不設(shè)置的情況下,是它本身父容器的100%(和父元素的寬度一致),除非設(shè)定一個(gè)寬度。
內(nèi)聯(lián)塊狀元素(行內(nèi)塊)
內(nèi)聯(lián)塊狀元素(inline-block)就是同時(shí)具備內(nèi)聯(lián)元素、塊狀元素的特點(diǎn),
代碼display:inline-block就是將元素設(shè)置為內(nèi)聯(lián)塊狀元素。(css2.1新增),<img>、<input>標(biāo)簽就是這種內(nèi)聯(lián)塊狀標(biāo)簽。
inline-block元素特點(diǎn):
1、和其他元素都在一行上;
2、元素的高度、寬度、行高以及頂和底邊距都可設(shè)置。
提示:下一小節(jié)是用視頻動(dòng)畫來講解css中的盒模型。
塊元素盡量采用div嵌套, 行內(nèi)元素盡量采用span嵌套
顯示模式的轉(zhuǎn)換
塊級(jí)、行內(nèi) 、行內(nèi)塊元素三者是可以相互轉(zhuǎn)換的。
display 顯示 的意思
block 塊
inline 行內(nèi)
塊級(jí) → 行內(nèi)元素 display: inline;
<style>
div{
width:100px;
height:100px;
background-color:#036;
display:inline;
}
</style>
行內(nèi)元素 → 塊級(jí)元素 display: block;
<style>
a{
width:100px;
height:100px;
background-color:#960;
display:block
}
</style>
行內(nèi)和塊級(jí) → 行內(nèi)塊 display:inline-block;
span{
width:100px;
height:100px;
background-color:#960;
didplay:inline-block;
}
水平居中設(shè)置-行內(nèi)元素
如果被設(shè)置元素為文本、圖片等行內(nèi)元素時(shí),水平居中是通過給父元素設(shè)置text-align:center來實(shí)現(xiàn)的。如下代碼:
html代碼:
<body>
<div class="txtCenter">我是文本,哈哈,我想要在父容器中水平居中顯示。</div>
<div class="imgCenter"><img src="http://img.mukewang.com/52da54ed0001ecfa04120172.jpg" /></div>
</body>
css代碼:
<style>
div.txtCenter{
text-align:center;
}
div.imgCenter{
text-align:center;
}
</style>
水平居中設(shè)置-定寬塊狀元素
當(dāng)被設(shè)置元素為塊狀元素時(shí)用text-align:center就不起作用了,這時(shí)也分兩種情況:定寬塊狀元素和不定寬塊狀元素。
滿足定寬和塊狀兩個(gè)條件的元素是可以通過設(shè)置"左右margin"值為"auto"來實(shí)現(xiàn)居中的。我們來看個(gè)例子就是設(shè)置div這個(gè)塊狀元素水平居中:
第一種方法
html代碼:
<body>
<div>我是定寬塊狀元素,哈哈,我要水平居中顯示。</div>
</body>
css代碼:
<style>
div{
border:1px solid red;/*為了顯示居中效果明顯為 div 設(shè)置了邊框*/
width:500px;/*定寬*/
margin:20px auto;/* margin-left 與 margin-right 設(shè)置為 auto */
}
</style>
也可以寫成:
margin-left:auto;
margin-right:auto;
注意:元素的"上下margin"是可以隨意設(shè)置的。這種水平居中的方法兩個(gè)2個(gè)條件缺一不可
第二種方法
html代碼:
<body>
<div>我是定寬塊狀元素,哈哈,我要水平居中顯示。</div>
</body>
css代碼:
<style>
div{
border:1px solid red;/*為了顯示居中效果明顯為 div 設(shè)置了邊框*/
width:500px;/*定寬*/
position:absoute;
left:50px;
margin-left:-25px;
}
</style>
水平居中設(shè)置-不定寬塊狀元素
在實(shí)際工作中我們會(huì)遇到需要為"不定寬度的塊狀元素"設(shè)置居中,比如網(wǎng)頁上的分頁導(dǎo)航,因?yàn)榉猪摰臄?shù)量是不確定的,所以我們不能通過設(shè)置寬度來限制它的彈性。
不定寬度的塊狀元素有三種方法居中(這三種方法目前使用的都比多):
加入table標(biāo)簽
設(shè)置display;inline方法
設(shè)置position:relative和left:50%;
(1)第一種方法:
第一步:為需要設(shè)置的居中的元素外面加入一個(gè)table標(biāo)簽(包括<tbody>、<tr>、<td>)。
第二步:為這個(gè)table設(shè)置"左右margin auto"(這個(gè)和定寬塊狀元素的方法一樣)。舉例如下:
html代碼:
<div>
<table>
<tbody>
<tr><td>
<ul>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
</ul>
</td></tr>
</tbody>
</table>
</div>
css代碼:
<style>
table{
margin:0 auto;
}
ul{list-style:none;margin:0;padding:0;}
li{float:left;display:inline;margin-right:8px;}
</style>
(2)第二種方法:
改變塊級(jí)元素的dispaly為inline類型,然后使用text-align:center來實(shí)現(xiàn)居中效果。如下例子:
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;
}
.container ul{
list-style:none;
margin:0;
padding:0;
display:inline;
}
.container li{
margin-right:8px;
display:inline;
}
</style>
這種方法相比第一種方法的優(yōu)勢(shì)是不用增加無語義標(biāo)簽,簡(jiǎn)化了標(biāo)簽的嵌套深度,
但也存在著一些問題:它將塊狀元素的display類型改為inline,變成了行內(nèi)元素,所以少了一些功能,比如設(shè)定長度值。
(2)第三種方法:
通過給父元素設(shè)置float,然后給父元素設(shè)置position:relative和left:50%,子元素設(shè)置position:relative和left:-50%來實(shí)現(xiàn)水平居中
代碼如下:
<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>
這種方法可以保留塊狀元素仍以display:block的形式顯示,優(yōu)點(diǎn)不添加無語議表標(biāo)簽,不增加嵌套深度,
但它的缺點(diǎn)是設(shè)置了position:relative,帶來了一定的副作用。
這三種方法使用得都非常廣泛,各有優(yōu)缺點(diǎn),具體選用哪種方法,可以視具體情況而定。
隱性改變display類型
有一個(gè)有趣的現(xiàn)象就是當(dāng)為元素(不論之前是什么類型元素,display:none除外)設(shè)置以下2個(gè)句之一:
position:absolute
float:left或float:right
元素會(huì)自動(dòng)變?yōu)橐詃isplay:inline-block的方式顯示,當(dāng)然就可以設(shè)置元素的width和height了且默認(rèn)寬度不占滿父元素。
如下面的代碼,小伙伴們都知道a標(biāo)簽是行內(nèi)元素,所以設(shè)置它的width是沒有效果的,但是設(shè)置為position:absolute以后,就可以了。
<div class="container">
<a href="#" title="">進(jìn)入課程請(qǐng)單擊這里</a>
</div>
css代碼
<style>
.container a{
position:absolute;
width:200px;
background:#ccc;
}
</style>
如何讓一段文字水平居中且垂直居中
<div>水平垂直居中</div>
div{
width:200px;height:200px; /*設(shè)置div的大小*/
border:1px solid green; /*邊框*/
text-align: center; /*文字水平居中對(duì)齊*/
line-height: 200px; /*設(shè)置文字行距等于div的高度*/
overflow:hidden;
}
text-align 和margin auto 區(qū)別
text-align 可以讓塊級(jí)元素里面的文字內(nèi)容居中對(duì)齊.
文字內(nèi)容==(圖片 input 行內(nèi)元素 行內(nèi)塊元素)
但是對(duì)于里面的塊級(jí)元素?zé)o效
讓一個(gè)塊級(jí)元素居中對(duì)齊 : margin:0 auto;
【實(shí)例】
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>趙麗穎的圖片</title>
<style type="text/css">
body{
text-align:center; /* 所有的元素居中 */
}
div{ /*塊元素的居中方法*/
width:600px;
margin:30px auto;
}
.img1{ /*行內(nèi)塊元素的居中方法 */
display:block;
width:600px;
margin:30px auto;
}
.img2{ /*行內(nèi)塊元素的居中方法 */
position:relative;
left:50%;
margin-left:-300px;
}
.form1 input{
width:200px; /*塊容器包裹下的行內(nèi)塊元素居中方法*/
margin:10px auto;
}
.img3{ /*塊容器包裹下的行內(nèi)塊元素居中方法*/
text-align:center;
}
</style>
</head>
<body>
<div><img src="../../photo/趙麗穎.jpeg" /></div>
<img class="img1" src="../../photo/趙麗穎.jpeg" />
<img class="img2" src="../../photo/趙麗穎.jpeg" />
<div class="form1">
<form action="" method="get" accept-charset="utf-8">
<label>電子郵箱: <input type="text" name="email" value="" placeholder="請(qǐng)輸入電子郵箱"/></label><br/>
<label>密碼: <input type="password" name="password"/></label><br/>
<label for="address">地址</label>
<input type="text" name="address" id="address" placeholder="請(qǐng)輸入地址" />
</form>
</div>
<div class="img3">
<img src="../../photo/趙麗穎.jpeg" />
</div>
</body>
</html>
CSS布局水平居中實(shí)戰(zhàn)
方法一:margin + width
<!Doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>css布局水平居中margin + width</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
.box {
width: 100px;
margin: 0 auto;
background: red;
}
</style>
</head>
<body>
<div class="box">Demo</div>
</body>
</html>
說明:這個(gè)水平居中方法, 我們最熟悉了, 也是最常用的, width可以固定px也可以使用百分比
方法二:table + margin
<!Doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>css布局水平居中table + margin</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
.box {
display: table;
margin: 0 auto;
background: red;
}
</style>
</head>
<body>
<div class="box">Demo</div>
</body>
</html>
說明:display: table在表現(xiàn)上類似block元素,但是寬度為內(nèi)容寬。無需設(shè)置父元素樣式 (支持 IE 8 及其以上版本) 兼容 IE 8 一下版本需要調(diào)整為<table>
方法三:inline-block + text-align
<!Doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>css布局水平居中inline-block + text-align</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
.content {
text-align: center;
}
.box {
display: inline-block;
background: red;
}
</style>
</head>
<body>
<div class="content">
<div class="box">Demo</div>
</div>
</body>
</html>
說明:兼容性佳(甚至可以兼容 IE 6 和 IE 7)
方法四:absolute + margin-left
<!Doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>css布局水平居中absolute + margin-left</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
.content {
position: relative;
}
.box {
position: absolute;
left: 50%;
width: 100px;
margin-left: -50px;
background: red;
}
</style>
</head>
<body>
<div class="content">
<div class="box">Demo</div>
</div>
</body>
</html>
說明:寬度固定相比于使用transform, 有兼容性更好
方法五:absolute + transform
<!Doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>css布局水平居中absolute + transform</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
.content {
position: relative;
}
.box {
position: absolute;
left: 50%;
transform: translateX(-50%);
background: red;
}
</style>
</head>
<body>
<div class="content">
<div class="box">Demo</div>
</div>
</body>
</html>
說明:絕對(duì)定位脫離文檔流, 不會(huì)對(duì)后續(xù)元素的布局造成影響。transform為 CSS3 屬性, 有兼容性問題
方法六:flex + justify-content
級(jí)元素:div , p , form, ul, li , ol, dl, form, address, fieldset, hr, menu, table
行內(nèi)元素:span, strong, em, br, img , input, label, select, textarea, cite,
內(nèi)聯(lián)元素(inline element)a - 超鏈接
b - 粗體(不推薦)br - 換行
em - 強(qiáng)調(diào)
font - 字體設(shè)定(不推薦)
i - 斜體
img - 圖片
input - 輸入框
label - 表格標(biāo)簽
select - 選擇框
small - 小字體文本
span - 常用內(nèi)聯(lián)容器,定義文本內(nèi)區(qū)塊
strong - 粗體強(qiáng)調(diào)
sub - 下標(biāo)
sup - 上標(biāo)
textarea - 多行文本輸入框
塊元素(block element)* blockquote - 塊引用
* center - 居中
* div - 常用塊級(jí)容易,也是css layout的主要標(biāo)簽
* dl - 定義列表
* form - 交互表單
* h1 - 大標(biāo)題
* h2 - 副標(biāo)題
* h3 - 3級(jí)標(biāo)題
* h4 - 4級(jí)標(biāo)題
* h5 - 5級(jí)標(biāo)題
* h6 - 6級(jí)標(biāo)題
* hr - 水平分隔線
* ol - 排序表單
* p - 段落
* pre - 格式化文本
* table - 表格
* ul - 無序列表
塊級(jí)元素和行內(nèi)元素的區(qū)別:
1)塊級(jí)元素會(huì)獨(dú)占一行,其寬度自動(dòng)填滿其父元素寬度
行內(nèi)元素不會(huì)獨(dú)占一行,相鄰的行內(nèi)元素會(huì)排列在同一行里,知道一行排不下,才會(huì)換行,其寬度隨元素的內(nèi)容 而變化
2) 塊級(jí)元素可以設(shè)置 width, height屬性,行內(nèi)元素設(shè)置width, height無效
3) 塊級(jí)元素可以設(shè)置margin 和 padding. 行內(nèi)元素的水平方向的padding-left,padding-right,margin-left,margin-right 都產(chǎn)生邊距效果,但是豎直方向的padding-top,padding-bottom,margin-top,margin-bottom都不會(huì)產(chǎn)生邊距效果。
文章自留地:
成笑笑博客_一個(gè).Net和安卓技術(shù)狂愛者博客。
主要以發(fā)布和分享.Net和安卓文章為主,爭(zhēng)做全棧開發(fā)工程師,愛學(xué)習(xí),愛挑戰(zhàn),愛編程。用技術(shù)改變生活。
歡迎關(guān)注,微信公眾號(hào):net知識(shí)分享(net4k8k)[做個(gè)12k的技術(shù)員].博客網(wǎng)址:www.chengxiaoxiao.com.
歡迎加入qq技術(shù)交流群:538742639.
們先分析一下整個(gè)網(wǎng)頁的結(jié)構(gòu),整體內(nèi)容采用的是一個(gè)兩列布局,導(dǎo)航無限延長的背景,并且添加了分割符號(hào)
素材:
第一步: 去掉默認(rèn)的HTML間距。
*{padding:0;margin:0;}
Ps(我們可以在后期進(jìn)行修改,根據(jù)網(wǎng)頁中使用的HTML元素的個(gè)數(shù)如body,h1,div等)
第二步:按效果圖頭部灰色背景但是無限延長
HTML代碼:
<div class="top">
<div id="top">
<p>讀書屋歡迎您!</p>
</div>
</div>
兩個(gè)DIV嵌套,<div class="top">這個(gè)需要100%添加背景,而內(nèi)側(cè)<div id="top"> 實(shí)現(xiàn)居中布局就可以了
.top{width:100%;background:#f5f5f5;height:35px;}
解釋:寬度100%,添加背景顏色,設(shè)定高度,這樣在縮放網(wǎng)頁,始終可以看到灰色的背景
#top {width:970px;margin:0 auto;}
解釋:網(wǎng)頁寬度970像素,使id=top的div元素進(jìn)行居中margin:0 auto;
#top p{font-size:13px;line-height:35px;}
解釋:改變文字大小,就一行宣傳文字,通過行高(和高度一樣時(shí)間)實(shí)現(xiàn)垂直居中l(wèi)ine-height:35px;
第三步:logo的實(shí)現(xiàn),采用典型的以圖換字的方式,有利于SEO
HTML代碼:
<div id="header">
<h1>
<a href="#">css教程</a>
</h1>
</div>
CSS編碼:
#header h1 a{
background:url(images/logo.png) no-repeat 0 50%;
display:block;
width:215px;height:60px;
text-indent:-9999px;
}
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。