CSS里的各種水平垂直居中基礎寫法心得總結
發(fā)布時間:2013-05-06 08:52:29 作者:佚名
我要評論

介紹一下行內(nèi)元素和塊級元素,這個很重要,因為有的屬性只能用于塊元素,而有的正好相反,在一定的情況下,它們也可以相互轉換,比如用display來進行設置,感興趣的朋友可以參考下哈
http://www.dbjr.com.cn/w3school/htmldom/prop_style_verticalalign.htm(W3C標準,概念不清的看手冊很重要哦)
--------------------------------------------------------------------------------
首先,依舊是概念。介紹一下行內(nèi)元素和塊級元素,這個很重要,因為有的屬性只能用于塊元素,而有的正好相反,在一定的情況下,它們也可以相互轉換,比如用display來進行設置。
行內(nèi)元素(又叫內(nèi)聯(lián)元素inline element):
①不占據(jù)一整行,隨內(nèi)容而定,有以下特點:
②不可以設置寬高,也不可以設置行高,其寬度隨著內(nèi)容增加,高度隨字體大小而改變。
③內(nèi)聯(lián)元素可以設置外邊界,但是外邊界不對上下起作用,只能對左右起作用。
④也可以設置內(nèi)邊界,但是內(nèi)邊界在ie6中不對上下起作用,只能對左右起作用。
常用的內(nèi)聯(lián)元素有:
a - 錨點,b - 粗體(不推薦),br - 換行,em - 強調(diào),font - 字體設定(不推薦),i - 斜體,img - 圖片,input - 輸入框,label - 表格標簽,select - 項目選擇,small - 小字體文本,span - 常用內(nèi)聯(lián)容器,定義文本內(nèi)區(qū)塊,strike - 中劃線,strong - 粗體強調(diào)
塊級元素block element:
①總是在新行上開始,占據(jù)一整行;
②高度,行高以及外邊距和內(nèi)邊距都可控制;
③寬帶始終是與瀏覽器寬度一樣,與內(nèi)容無關;
④它可以容納內(nèi)聯(lián)元素和其他塊元素。
常用的塊級元素有:
div -最常用的塊級元素,dl - 和dt dd搭配使用的塊級元素,form - 交互表單,h1 - 大標題,hr - 水平分隔線,ol - 排序表單,p - 段落,ul - 非排序列表
互相轉換:使用display設置可以使得行內(nèi)元素擁有塊級元素的特性,反之也可以。
如:
<p style="display:inline; text-align:center">我是被設置了內(nèi)聯(lián)的塊元素p,我現(xiàn)在的表現(xiàn)形式和內(nèi)聯(lián)元素一樣啦</p>
<span style="display:block; text-align:center">我是被設置了塊級元素的span,我現(xiàn)在可以獨占一行并且可以設置寬高</span>
display: table-cell ,能把元素當作表格單元來顯示,這個非常實用,顯示效果也很好,只可惜某些瀏覽器不夠兼容。要注意,和一個合法的<td>元素必須在<table>里一樣,
display: table-cell 元素必須作為 display: table 的元素的子元素出現(xiàn)。
--------------------------------------------------------------------------------
現(xiàn)在開始說一下簡單的幾種基礎的居中方式:
1.塊中文字水平居中:text-align 用于塊級元素,作用在使用它的塊元素中的文字或者圖片上。使得它們在水平方向上居中。
這個屬性只能作用于塊元素(或者被CSS控制為塊元素的內(nèi)聯(lián)元素,但是被控制為內(nèi)聯(lián)元素的塊元素是不行的)。一句話來說,就是要擁有塊元素的特點的那些元素。這個很好理解,居中,肯定是行居中,如果使用它的元素本身不擁有完整的在寬度上的獨立空間,它當然沒有能力讓它內(nèi)部的文字或者圖片居中。(難道要占用別人的地盤里居中,豈不混亂啦)
例子:
<p style="text-align:center">我是正常p,我設置了居中</p>
<span style="display:block; text-align:center">我其實是一個行內(nèi)元素span哦,我設置了居中,可以居中并且獨占一行</span>
<p style="display:inline; text-align:center">能不能再同一行,我是被inline了的p,我設置了居中可是不能居中!</p>
父元素的這個屬性對它下面的子元素也起作用,比如一個div設置了text-align居中,則它內(nèi)部的文字可以居中,它的子div內(nèi)部的文字也可以居中。但是子元素中文字的居中,是在子div中居中,而不是對于父div居中。也就是,它里面所有的文字,都會相對于最靠近自己的一層div來實現(xiàn)居中。所以,這個屬性不能用于div在父div中的整體居中。(不僅僅是div,所有的表現(xiàn)為塊元素的元素)。
下面的這段代碼,外面一個大的藍色的div,里面一個小的紅色的div。外部的div設置了水平居中,按說里面的圖片肯定會居中(運行時確實顯示居中),
而內(nèi)部的div只設置了vertical-align,垂直居中(先不管它)。可是因為它父層的text-align對它也有影響,所以運行時,里面的文字會相對于內(nèi)部div而居中(注意!不是相對于最外面的div)
<div style="width:500px; height:200px; background-color:#39F; text-align:center">
<img src="dog/134906m121hqwumyw3uudc.jpg" width="96" height="80" />
<div style="width:100px; height:50px; background-color:#F69; display: table-cell;vertical-align:middle">啦啦啦</div>
</div>
運行截圖:

這個是塊元素對內(nèi)處理的一個屬性,不能把這個塊自己在它的父容器中居中,若要實現(xiàn)塊在父元素中的居中,可以使用:
2 塊元素自身水平居中(確定設置了寬度的塊):margin。這個肯定是接觸CSS一開始就知道的了。
一般情況下,可以設置margin:0 auto;這會使這個塊級元素在它的父級元素中居中,上下左右都會居中。
如果只要水平居中的話,就設置margin-left:auto;margin-right:auto;
3 塊元素自身水平居中(不確定寬度的塊):
在其他的一些文章中,看到有不少方法來介紹不確定寬度的塊的居中的。
其實簡單點說,不需要這么麻煩。我們可以這樣來理解,沒有明確設定寬度的block,根據(jù)塊級元素的性質(zhì),它默認是獨占一行的,所以這個時候block本身就是瀏覽器窗口的寬度,就不必要來設置水平居中了。
若是此時對塊中的內(nèi)容進行居中的話:
如果塊元素的子元素也為塊元素,就對子元素使用margin auto一類的方式就好啦;
如果塊級元素的子元素為行內(nèi)元素,就用我們一開始介紹的text-align也就可以解決;
對于子元素為塊元素的,也可以用display設置為inline然后再用text-align。
(這些在本文其他地方也都說過了)
4 vertical-align用于行內(nèi)元素中的垂直居中
vertical-align,這個可以用的很復雜??戳艘恍┪恼潞屠樱约阂灿悬c小混亂,只說一下最簡單的用法:
這個屬性用于
1、內(nèi)聯(lián)元素(以及被轉化為內(nèi)聯(lián)元素的塊元素)
2 、display設置為table-cell的元素,
在 firefox 和 ie8 下,可以設置塊級元素的 display 值為 table-cell,來激活 vertical-align 屬性,顯示效果和就和表格中的 valign="center" 一樣了。但 ie6,7 并不支持。
3、<td><tr>這樣的元素
這樣的寫法:vertical-align:middle;就可以設置文字或者圖片的垂直居中。只要具有行內(nèi)元素的特性的元素使用這個屬性,對它的子元素中的文字和圖片也是起作用的。但是作用效果為使得文字或者圖片相對于緊靠著它們的父元素來進行居中。這個和text-align上面說過的部分是類似的。
5 塊級元素中的文字圖片垂直居中(針對塊的高度確定的,這個是從另一個博客上看到的,真的很實用哦,如果塊內(nèi)只有這些文字的話)
文字在層(塊級元素)中垂直居中vertical-align 屬性是做不到的.我們這里有個比較巧妙的方法就是:設置height的高度與line-height的高度相同!
<div style="line-height:500px;height:500;"></div>
6 塊級元素中的文字圖片垂直居中(塊的高度不確定的)
在塊的高度不確定的情況下,其實它的高度就是取決于里面內(nèi)容的高度。如果內(nèi)部只有文字或者圖片的話,那就自然垂直居中了,其實就不必特意要設置。
如果非要設置什么的話,比如希望塊大一些,文字在塊中垂直居中好看一點,可以設置內(nèi)邊距,如padding-top:20px;padding-bottom:20px;
當然,如果上下內(nèi)邊距設置的不一樣,就自然不居中了。
7 塊級元素自身的垂直居中
設置塊級元素自身在父元素中的垂直居中,可以參照塊級元素的水平居中的方法(上面說過),設置外邊距即可。如果不想設置水平居中,只要設置上下外邊距為auto就好。
也可以采用vertical-align:middle;的方式,但是前提是把display設置為table-cell。這樣的話要注意瀏覽器兼容性問題。
--------------------------------------------------------------------------------
評論中有朋友希望能貼參考文章的地址,現(xiàn)在找了當時看的一些來貼一下,只有一部分,很多是隨機看的。是疏忽了,應該當時記下來才是~
http://www.blueidea.com/tech/web/2006/3231.asp 【CSS實現(xiàn)完美垂直居中】
http://www.cnblogs.com/asqq/archive/2012/04/09/2438745.html 【CSS各種居中方法】
http://www.php100.com/html/webkaifa/DIV_CSS/2010/0826/5303.html 【完美解決CSS網(wǎng)頁水平居中】
http://www.dbjr.com.cn/css/66071.html 【CSS的各種居中——如何書寫高質(zhì)量代碼】
還有很多“百度知道”.....
有的比較復雜的靈活用法就沒有寫上去,只能保證總結的這些都是用過和試過的,比較常用和基礎的,應該是沒有問題的。也請大家多多指教吶~
還有利用position的這部分,過幾天,再試一試之后再繼續(xù)做一下筆記~
--------------------------------------------------------------------------------
首先,依舊是概念。介紹一下行內(nèi)元素和塊級元素,這個很重要,因為有的屬性只能用于塊元素,而有的正好相反,在一定的情況下,它們也可以相互轉換,比如用display來進行設置。
行內(nèi)元素(又叫內(nèi)聯(lián)元素inline element):
①不占據(jù)一整行,隨內(nèi)容而定,有以下特點:
②不可以設置寬高,也不可以設置行高,其寬度隨著內(nèi)容增加,高度隨字體大小而改變。
③內(nèi)聯(lián)元素可以設置外邊界,但是外邊界不對上下起作用,只能對左右起作用。
④也可以設置內(nèi)邊界,但是內(nèi)邊界在ie6中不對上下起作用,只能對左右起作用。
常用的內(nèi)聯(lián)元素有:
a - 錨點,b - 粗體(不推薦),br - 換行,em - 強調(diào),font - 字體設定(不推薦),i - 斜體,img - 圖片,input - 輸入框,label - 表格標簽,select - 項目選擇,small - 小字體文本,span - 常用內(nèi)聯(lián)容器,定義文本內(nèi)區(qū)塊,strike - 中劃線,strong - 粗體強調(diào)
塊級元素block element:
①總是在新行上開始,占據(jù)一整行;
②高度,行高以及外邊距和內(nèi)邊距都可控制;
③寬帶始終是與瀏覽器寬度一樣,與內(nèi)容無關;
④它可以容納內(nèi)聯(lián)元素和其他塊元素。
常用的塊級元素有:
div -最常用的塊級元素,dl - 和dt dd搭配使用的塊級元素,form - 交互表單,h1 - 大標題,hr - 水平分隔線,ol - 排序表單,p - 段落,ul - 非排序列表
互相轉換:使用display設置可以使得行內(nèi)元素擁有塊級元素的特性,反之也可以。
如:
<p style="display:inline; text-align:center">我是被設置了內(nèi)聯(lián)的塊元素p,我現(xiàn)在的表現(xiàn)形式和內(nèi)聯(lián)元素一樣啦</p>
<span style="display:block; text-align:center">我是被設置了塊級元素的span,我現(xiàn)在可以獨占一行并且可以設置寬高</span>
display: table-cell ,能把元素當作表格單元來顯示,這個非常實用,顯示效果也很好,只可惜某些瀏覽器不夠兼容。要注意,和一個合法的<td>元素必須在<table>里一樣,
display: table-cell 元素必須作為 display: table 的元素的子元素出現(xiàn)。
--------------------------------------------------------------------------------
現(xiàn)在開始說一下簡單的幾種基礎的居中方式:
1.塊中文字水平居中:text-align 用于塊級元素,作用在使用它的塊元素中的文字或者圖片上。使得它們在水平方向上居中。
這個屬性只能作用于塊元素(或者被CSS控制為塊元素的內(nèi)聯(lián)元素,但是被控制為內(nèi)聯(lián)元素的塊元素是不行的)。一句話來說,就是要擁有塊元素的特點的那些元素。這個很好理解,居中,肯定是行居中,如果使用它的元素本身不擁有完整的在寬度上的獨立空間,它當然沒有能力讓它內(nèi)部的文字或者圖片居中。(難道要占用別人的地盤里居中,豈不混亂啦)
例子:
<p style="text-align:center">我是正常p,我設置了居中</p>
<span style="display:block; text-align:center">我其實是一個行內(nèi)元素span哦,我設置了居中,可以居中并且獨占一行</span>
<p style="display:inline; text-align:center">能不能再同一行,我是被inline了的p,我設置了居中可是不能居中!</p>
父元素的這個屬性對它下面的子元素也起作用,比如一個div設置了text-align居中,則它內(nèi)部的文字可以居中,它的子div內(nèi)部的文字也可以居中。但是子元素中文字的居中,是在子div中居中,而不是對于父div居中。也就是,它里面所有的文字,都會相對于最靠近自己的一層div來實現(xiàn)居中。所以,這個屬性不能用于div在父div中的整體居中。(不僅僅是div,所有的表現(xiàn)為塊元素的元素)。
下面的這段代碼,外面一個大的藍色的div,里面一個小的紅色的div。外部的div設置了水平居中,按說里面的圖片肯定會居中(運行時確實顯示居中),
而內(nèi)部的div只設置了vertical-align,垂直居中(先不管它)。可是因為它父層的text-align對它也有影響,所以運行時,里面的文字會相對于內(nèi)部div而居中(注意!不是相對于最外面的div)
復制代碼
代碼如下:<div style="width:500px; height:200px; background-color:#39F; text-align:center">
<img src="dog/134906m121hqwumyw3uudc.jpg" width="96" height="80" />
<div style="width:100px; height:50px; background-color:#F69; display: table-cell;vertical-align:middle">啦啦啦</div>
</div>
運行截圖:

這個是塊元素對內(nèi)處理的一個屬性,不能把這個塊自己在它的父容器中居中,若要實現(xiàn)塊在父元素中的居中,可以使用:
2 塊元素自身水平居中(確定設置了寬度的塊):margin。這個肯定是接觸CSS一開始就知道的了。
一般情況下,可以設置margin:0 auto;這會使這個塊級元素在它的父級元素中居中,上下左右都會居中。
如果只要水平居中的話,就設置margin-left:auto;margin-right:auto;
3 塊元素自身水平居中(不確定寬度的塊):
在其他的一些文章中,看到有不少方法來介紹不確定寬度的塊的居中的。
其實簡單點說,不需要這么麻煩。我們可以這樣來理解,沒有明確設定寬度的block,根據(jù)塊級元素的性質(zhì),它默認是獨占一行的,所以這個時候block本身就是瀏覽器窗口的寬度,就不必要來設置水平居中了。
若是此時對塊中的內(nèi)容進行居中的話:
如果塊元素的子元素也為塊元素,就對子元素使用margin auto一類的方式就好啦;
如果塊級元素的子元素為行內(nèi)元素,就用我們一開始介紹的text-align也就可以解決;
對于子元素為塊元素的,也可以用display設置為inline然后再用text-align。
(這些在本文其他地方也都說過了)
4 vertical-align用于行內(nèi)元素中的垂直居中
vertical-align,這個可以用的很復雜??戳艘恍┪恼潞屠樱约阂灿悬c小混亂,只說一下最簡單的用法:
這個屬性用于
1、內(nèi)聯(lián)元素(以及被轉化為內(nèi)聯(lián)元素的塊元素)
2 、display設置為table-cell的元素,
在 firefox 和 ie8 下,可以設置塊級元素的 display 值為 table-cell,來激活 vertical-align 屬性,顯示效果和就和表格中的 valign="center" 一樣了。但 ie6,7 并不支持。
3、<td><tr>這樣的元素
這樣的寫法:vertical-align:middle;就可以設置文字或者圖片的垂直居中。只要具有行內(nèi)元素的特性的元素使用這個屬性,對它的子元素中的文字和圖片也是起作用的。但是作用效果為使得文字或者圖片相對于緊靠著它們的父元素來進行居中。這個和text-align上面說過的部分是類似的。
5 塊級元素中的文字圖片垂直居中(針對塊的高度確定的,這個是從另一個博客上看到的,真的很實用哦,如果塊內(nèi)只有這些文字的話)
文字在層(塊級元素)中垂直居中vertical-align 屬性是做不到的.我們這里有個比較巧妙的方法就是:設置height的高度與line-height的高度相同!
復制代碼
代碼如下:<div style="line-height:500px;height:500;"></div>
6 塊級元素中的文字圖片垂直居中(塊的高度不確定的)
在塊的高度不確定的情況下,其實它的高度就是取決于里面內(nèi)容的高度。如果內(nèi)部只有文字或者圖片的話,那就自然垂直居中了,其實就不必特意要設置。
如果非要設置什么的話,比如希望塊大一些,文字在塊中垂直居中好看一點,可以設置內(nèi)邊距,如padding-top:20px;padding-bottom:20px;
當然,如果上下內(nèi)邊距設置的不一樣,就自然不居中了。
7 塊級元素自身的垂直居中
設置塊級元素自身在父元素中的垂直居中,可以參照塊級元素的水平居中的方法(上面說過),設置外邊距即可。如果不想設置水平居中,只要設置上下外邊距為auto就好。
也可以采用vertical-align:middle;的方式,但是前提是把display設置為table-cell。這樣的話要注意瀏覽器兼容性問題。
--------------------------------------------------------------------------------
評論中有朋友希望能貼參考文章的地址,現(xiàn)在找了當時看的一些來貼一下,只有一部分,很多是隨機看的。是疏忽了,應該當時記下來才是~
http://www.blueidea.com/tech/web/2006/3231.asp 【CSS實現(xiàn)完美垂直居中】
http://www.cnblogs.com/asqq/archive/2012/04/09/2438745.html 【CSS各種居中方法】
http://www.php100.com/html/webkaifa/DIV_CSS/2010/0826/5303.html 【完美解決CSS網(wǎng)頁水平居中】
http://www.dbjr.com.cn/css/66071.html 【CSS的各種居中——如何書寫高質(zhì)量代碼】
還有很多“百度知道”.....
有的比較復雜的靈活用法就沒有寫上去,只能保證總結的這些都是用過和試過的,比較常用和基礎的,應該是沒有問題的。也請大家多多指教吶~
還有利用position的這部分,過幾天,再試一試之后再繼續(xù)做一下筆記~
相關文章
- 2009-06-19
css圖片垂直居中 css中如何實現(xiàn)圖片垂直居中
使用純CSS實現(xiàn)未知尺寸的圖片(但高寬都小于200px)在200px的正方形容器中水平和垂直居中,下面是一個權衡的相對結構干凈,CSS簡單的解決方法2013-04-17css自適應寬度 多種方法實現(xiàn)寬度自適應的水平居中
寬度自適應達到水平居中在網(wǎng)頁制作中很常見而且很實用,本文整理搜集了一些實用的自適應寬度的水平居中技巧,感興趣前端工程師們可以借鑒一下,或許對你有所幫助2013-04-05關于圖片垂直居中的話題想必大家在論壇或者是百度搜索列表中看到了不少了吧,煩人的是沒有具體或者相當詳細的解決方法,希望本文所整理的知識點可以幫助到你2013-03-22在CSS中加了margin:0 auto;卻沒有效果,不能居中的問題;它的本意就是上下邊界為0,左右根據(jù)寬度自適應!其實就是~~水平居中的意思,接下來為大家介紹下兩個典型的錯誤引起2013-03-15div垂直居中的N種方法 單行/多行文字(未知高度/固定高度)
接下來將介紹下:div垂直居中的N種方法包括:單行垂直居中/多行未知高度文字的垂直居中/多行文本固定高度的居中/在InternetExplorer中的解決方案等等感興趣的你可不要錯過了2013-02-17單選框和復選框面積很小,不容易點擊,造成許多用戶的困擾,用戶體驗不佳,所以表單元素的垂直居中讓很多網(wǎng)頁布局師為之而困擾,想實現(xiàn)垂直居中效果還真需要一番功夫,還好2013-02-16元素及文本的居中包括(層的橫向居中/層的垂直居中/絕對居中)以及文本掙開div的題,也在這里給予了解決方法,感興趣的朋友可以了解下啊,希望本文可以幫助到你2013-01-18三種方式實現(xiàn)元素水平居中顯示與固定布局和流式布局概念理解
css中讓文本居中的屬性很簡單就可以實現(xiàn),那就是設置text-align:center即可,讓元素水平居中,相信對于許多網(wǎng)頁設計師而言都不會陌生,首先,要 讓元素水平居中,就必須得了2013-01-11簡單總結一下html中元素的 水平居中、垂直居中、絕對居中的實現(xiàn)方式,感興趣的朋友可以了解下哦2013-01-07最新評論