信ID:WEB_wysj(點擊關(guān)注) ◎ ◎ ◎ ◎ ◎◎◎◎◎一┳═┻︻▄
(頁底留言開放,歡迎來吐槽)
● ● ●
在網(wǎng)頁上使 HTML 元素居中看似一件很簡單的事情. 至少在某些情況下是這樣的,但是復(fù)雜的布局往往使一些解決方案不能很好的發(fā)揮作用。
在網(wǎng)頁布局中元素水平居中比元素垂直居中要簡單不少,同時實現(xiàn)水平居中和垂直居中往往是最難的。現(xiàn)在是響應(yīng)式設(shè)計的時代,我們很難確切的知道元素的準(zhǔn)確高度和寬度,所以一些方案不大適用。據(jù)我所知, 在CSS中至少有六種實現(xiàn)居中的方法。我將使用下面的HTML結(jié)構(gòu)從簡單到復(fù)雜開始講解:
1 2 3 |
|
鞋子圖片會改變,但是他們都會保持500pxX500px的大小。 HSL colors 用于使背景顏色保持一致。
使用text-align水平居中
有時顯而易見的方案是最佳的選擇:
1 2 3 4 5 6 7 8 |
|
這種方案沒有使圖片垂直居中:你需要給<div> 添加 padding 或者給內(nèi)容添加 margin-top和 margin-bottom使容器與內(nèi)容之間有一定的距離。
使用 margin: auto 居中
這種方式實現(xiàn)水平居中和上面使用text-align的方法有相同局限性。
1 2 3 4 5 6 7 8 9 |
|
注意: 必須使用display: block使 margin: 0 auto對img元素生效。
使用table-cell居中
使用 display: table-cell, 而不是使用table標(biāo)簽; 可以實現(xiàn)水平居中和垂直居中,但是這種方法需要添加額外的元素作為外部容器。
1 2 3 4 5 |
|
CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
注意:為了使div 不折疊必須加上 width: 100%,外部容器元素也需要加上一定高度使得內(nèi)容垂直居中。給html和body設(shè)置高度后,也可以使元素在body垂直居中。此方法在IE8+瀏覽器上生效。
使用absolute定位居中
這種 方案 有非常好的跨瀏覽器支持。有一個缺點就是必須顯式聲明外部容器元素的height:
.absolute-aligned { position: relative; min-height: 500px; background: hsl(200, 100%, 97%);
}
.absolute-aligned img { width: 50%; min-width: 200px; height: auto; overflow: auto; margin: auto; position: absolute; top: 0; left: 0; bottom: 0; right: 0;
}
Stephen在他的 博客 中演示了這種方案的幾種變化。
使用translate居中
Chris Coiyer 提出了一個使用 CSS transforms 的新方案。 同樣支持水平居中和垂直居中:
1 2 3 4 5 6 7 8 9 10 11 |
|
但是有以下幾種缺點:
CSS transform 在部分就瀏覽器上需要使用 前綴。
不支持 IE9 以下的瀏覽器。
外部容器需要設(shè)置height (或者用其他方式設(shè)置),因為不能獲取 絕對定位 的內(nèi)容的高度。
如果內(nèi)容包含文字,現(xiàn)在的瀏覽器合成技術(shù)會使文字模糊不清。
使用Flexbox居中
當(dāng)新舊語法差異和瀏覽器前綴消失時,這種方法會成為主流的居中方案。
1 2 3 4 5 6 7 8 9 |
|
在很多方面 flexbox 是一種簡單的方案, 但是它有新舊兩種語法以及早期版本的IE缺乏支持 (盡管可以使用 display: table-cell作為降級方案)。
現(xiàn)在規(guī)范已經(jīng)最終確定,現(xiàn)代瀏覽器也大都支持,我寫了一篇詳細(xì)的教程 教程。
使用calc居中
在某些情況下比flexbox更全面:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
很簡單,calc 允許你基于當(dāng)前的頁面布局計算尺寸。在上面的簡單計算中, 50% 是容器元素的中心點,但是如果只設(shè)置50%會使圖片的左上角對齊div的中心位置。 我們需要把圖片向左和向上各移動圖片寬高的一半。計算公式為:
1 2 |
|
在現(xiàn)在的瀏覽其中你會發(fā)現(xiàn),這種方法更適用于當(dāng)內(nèi)容的寬高為固定尺寸:
1 2 3 4 5 6 |
|
我在 這篇文章 中詳細(xì)講解了calc。
這種方案和flex一樣有許多相同的缺點: 雖然在現(xiàn)代瀏覽器中有良好的支持,但是在較早的版本中仍然需要瀏覽器前綴,并且不支持IE8。
1 2 3 4 5 6 |
|
當(dāng)然還有 其他更多的方案。理解這七種方案之后,web開發(fā)人員在面對元素居中的時候會有更多的選擇。
干貨!免費領(lǐng)取騰訊高級講師網(wǎng)頁設(shè)計教程
點我領(lǐng)取
點擊下方“閱讀原文”結(jié)交更多有才華的設(shè)計師!
↓↓↓
者|顏海鏡
編輯|覃云
出處丨前端之巔
本文已獲作者授權(quán),轉(zhuǎn)載來源:
https://segmentfault.com/a/1190000016389031
劃重點,這是一道面試必考題,很多面試官都喜歡問這個問題,我就被問過好幾次了。
要實現(xiàn)上圖的效果看似很簡單,實則暗藏玄機,本文總結(jié)了一下 CSS 實現(xiàn)水平垂直居中的方式大概有下面這些,本文將逐一介紹一下,我將本文整理成了一個 github 倉庫在:https://github.com/yanhaijing/vertical-center
歡迎大家 star。
僅居中元素定寬高適用:
居中元素不定寬高:
為了實現(xiàn)上面的效果先來做些準(zhǔn)備工作,假設(shè) HTML 代碼如下,總共兩個元素,父元素和子元素:
<div class="wp"> <div class="box size">123123</div> </div>
wp 是父元素的類名,box 是子元素的類名,因為有定寬和不定寬的區(qū)別,size 用來表示指定寬度,下面是所有效果都要用到的公共代碼,主要是設(shè)置顏色和寬高。
注意:后面不在重復(fù)這段公共代碼,只會給出相應(yīng)提示。
/* 公共代碼 */ .wp { border: 1px solid red; width: 300px; height: 300px; } .box { background: green; } .box.size{ width: 100px; height: 100px; } /* 公共代碼 */
絕對定位的百分比是相對于父元素的寬高,通過這個特性可以讓子元素的居中顯示,但絕對定位是基于子元素的左上角,期望的效果是子元素的中心居中顯示。
為了修正這個問題,可以借助外邊距的負(fù)值,負(fù)的外邊距可以讓元素向相反方向定位,通過指定子元素的外邊距為子元素寬度一半的負(fù)值,就可以讓子元素居中了,css 代碼如下。
/* 此處引用上面的公共代碼 */ /* 此處引用上面的公共代碼 */ /* 定位代碼 */ .wp { position: relative; } .box { position: absolute;; top: 50%; left: 50%; margin-left: -50px; margin-top: -50px; }
這是我比較常用的方式,這種方式比較好理解,兼容性也很好,缺點是需要知道子元素的寬高。
點擊查看完整 DEMO:
http://yanhaijing.com/vertical-center/absolute1.html
這種方式也要求居中元素的寬高必須固定,HTML 代碼如下:
<div class="wp"> <div class="box size">123123</div> </div>
這種方式通過設(shè)置各個方向的距離都是 0,此時再講 margin 設(shè)為 auto,就可以在各個方向上居中了。
/* 此處引用上面的公共代碼 */ /* 此處引用上面的公共代碼 */ /* 定位代碼 */ .wp { position: relative; } .box { position: absolute;; top: 0; left: 0; right: 0; bottom: 0; margin: auto; }
這種方法兼容性也很好,缺點是需要知道子元素的寬高。
點擊查看完整 DEMO:
http://yanhaijing.com/vertical-center/absolute2.html
這種方式也要求居中元素的寬高必須固定,所以我們?yōu)?box 增加 size 類,HTML 代碼如下:
<div class="wp"> <div class="box size">123123</div> </div>
感謝 css3 帶來了計算屬性,既然 top 的百分比是基于元素的左上角,那么在減去寬度的一半就好了,代碼如下
/* 此處引用上面的公共代碼 */ /* 此處引用上面的公共代碼 */ /* 定位代碼 */ .wp { position: relative; } .box { position: absolute;; top: calc(50% - 50px); left: calc(50% - 50px); }
這種方法兼容性依賴 calc 的兼容性,缺點是需要知道子元素的寬高。
點擊查看完整 DEMO:
http://yanhaijing.com/vertical-center/absolute3.html
還是絕對定位,但這個方法不需要子元素固定寬高,所以不再需要 size 類了,HTML 代碼如下:
<div class="wp"> <div class="box">123123</div> </div>
修復(fù)絕對定位的問題,還可以使用 css3 新增的 transform,transform 的 translate 屬性也可以設(shè)置百分比,其是相對于自身的寬和高,所以可以講 translate 設(shè)置為 -50%,就可以做到居中了,代碼如下:
/* 此處引用上面的公共代碼 */ /* 此處引用上面的公共代碼 */ /* 定位代碼 */ .wp { position: relative; } .box { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
這種方法兼容性依賴 translate2d 的兼容性。
點擊查看完整 DEMO:
http://yanhaijing.com/vertical-center/absolute4.html
利用行內(nèi)元素居中屬性也可以做到水平垂直居中,HTML 代碼如下:
<div class="wp"> <div class="box">123123</div> </div>
把 box 設(shè)置為行內(nèi)元素,通過 text-align 就可以做到水平居中,但很多同學(xué)可能不知道通過通過 vertical-align 也可以在垂直方向做到居中,代碼如下:
/* 此處引用上面的公共代碼 */ /* 此處引用上面的公共代碼 */ /* 定位代碼 */ .wp { line-height: 300px; text-align: center; font-size: 0px; } .box { font-size: 16px; display: inline-block; vertical-align: middle; line-height: initial; text-align: left; /* 修正文字 */ }
這種方法需要在子元素中將文字顯示重置為想要的效果。
點擊查看完整 DEMO:
http://yanhaijing.com/vertical-center/lineheight.html
很多同學(xué)一定和我一樣不知道 writing-mode 屬性,感謝 @張鑫旭老師的反饋,簡單來說 writing-mode 可以改變文字的顯示方向,比如可以通過 writing-mode 讓文字的顯示變?yōu)榇怪狈较颉?/p>
<div class="div1">水平方向</div> <div class="div2">垂直方向</div> .div2 { writing-mode: vertical-lr; }
顯示效果如下:
水平方向 垂 直 方 向
更神奇的是所有水平方向上的 css 屬性,都會變?yōu)榇怪狈较蛏系膶傩裕热?text-align,通過 writing-mode 和 text-align 就可以做到水平和垂直方向的居中了,只不過要稍微麻煩一點:
<div class="wp"> <div class="wp-inner"> <div class="box">123123</div> </div> </div> /* 此處引用上面的公共代碼 */ /* 此處引用上面的公共代碼 */ /* 定位代碼 */ .wp { writing-mode: vertical-lr; text-align: center; } .wp-inner { writing-mode: horizontal-tb; display: inline-block; text-align: center; width: 100%; } .box { display: inline-block; margin: auto; text-align: left; }
這種方法實現(xiàn)起來和理解起來都稍微有些復(fù)雜。
點擊查看完整 DEMO:
http://yanhaijing.com/vertical-center/writing-mode.html
曾經(jīng) table 被用來做頁面布局,現(xiàn)在沒人這么做了,但 table 也能夠?qū)崿F(xiàn)水平垂直居中,但是會增加很多冗余代碼:
<table> <tbody> <tr> <td class="wp"> <div class="box">123123</div> </td> </tr> </tbody> </table>
tabel 單元格中的內(nèi)容天然就是垂直居中的,只要添加一個水平居中屬性就好了。
.wp { text-align: center; } .box { display: inline-block; }
這種方法就是代碼太冗余,而且也不是 table 的正確用法。
點擊查看完整 DEMO:
http://yanhaijing.com/vertical-center/table.html
css 新增的 table 屬性,可以讓我們把普通元素,變?yōu)?table 元素的現(xiàn)實效果,通過這個特性也可以實現(xiàn)水平垂直居中。
<div class="wp"> <div class="box">123123</div> </div>
下面通過 css 屬性,可以讓 div 顯示的和 table 一樣:
.wp { display: table-cell; text-align: center; vertical-align: middle; } .box { display: inline-block; }
這種方法和 table 一樣的原理,但卻沒有那么多冗余代碼,兼容性也還不錯。
點擊查看完整 DEMO:
http://yanhaijing.com/vertical-center/css-table.html
flex 作為現(xiàn)代的布局方案,顛覆了過去的經(jīng)驗,只需幾行代碼就可以優(yōu)雅的做到水平垂直居中。
<div class="wp"> <div class="box">123123</div> </div> .wp { display: flex; justify-content: center; align-items: center; }
目前在移動端已經(jīng)完全可以使用 flex 了,PC 端需要看自己業(yè)務(wù)的兼容性情況。
點擊查看完整 DEMO:
http://yanhaijing.com/vertical-center/flex.html
感謝 @一絲姐 反饋的這個方案,css 新出的網(wǎng)格布局,由于兼容性不太好,一直沒太關(guān)注,通過 grid 也可以實現(xiàn)水平垂直居中。
<div class="wp"> <div class="box">123123</div> </div> .wp { display: grid; } .box { align-self: center; justify-self: center; }
代碼量也很少,但兼容性不如 flex,不推薦使用。
點擊查看完整 DEMO:
http://yanhaijing.com/vertical-center/grid.html
下面對比下各個方式的優(yōu)缺點,肯定又雙叒叕該有同學(xué)說回字的寫法了,簡單總結(jié)下:
小貼士:關(guān)于 flex 的兼容性決方案,請看這里:
https://yanhaijing.com/css/2016/08/21/flex-practice-on-mobile/
最近發(fā)現(xiàn)很多同學(xué)都對 css 不夠重視,這其實是不正確的,比如下面的這么簡單的問題都有那么多同學(xué)不會,我也是很無語:
<div class="red blue">123</div> <div class="blue red">123</div> .red { color: red } .blue { color: blue }
問兩個 div 的顏色分別是什么,竟然只有 40% 的同學(xué)能夠答對,這 40% 中還有很多同學(xué)不知道為什么,希望這些同學(xué)好好補習(xí)下 CSS 基礎(chǔ)。
素分類
在講解CSS布局之前,我們需要提前知道一些知識,在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)元素特點。
div{display:inline}
內(nèi)聯(lián)元素(行內(nèi))特點:
1、和其他元素都在一行上;
2、元素的高度、寬度、行高及頂部和底部邊距不可設(shè)置;(padding可以設(shè)置)
3、元素的寬度就是它包含的文字或圖片的寬度,不可改變。
塊級元素
什么是塊級元素?在html中<div>、<p>、<h1>、<form>、<ul> 和 <li>就是塊級元素。
設(shè)置display:block就是將元素顯示為塊級元素。如下代碼就是將內(nèi)聯(lián)元素a轉(zhuǎn)換為塊狀元素,從而使a元素具有塊狀元素特點。
a{display:block;}
塊級元素特點:
1、每個塊級元素都從新的一行開始,并且其后的元素也另起一行。(真霸道,一個塊級元素獨占一行)
2、元素的高度、寬度、行高以及頂和底邊距都可設(shè)置。
3、元素寬度在不設(shè)置的情況下,是它本身父容器的100%(和父元素的寬度一致),除非設(shè)定一個寬度。
內(nèi)聯(lián)塊狀元素(行內(nèi)塊)
內(nèi)聯(lián)塊狀元素(inline-block)就是同時具備內(nèi)聯(lián)元素、塊狀元素的特點,
代碼display:inline-block就是將元素設(shè)置為內(nèi)聯(lián)塊狀元素。(css2.1新增),<img>、<input>標(biāo)簽就是這種內(nèi)聯(lián)塊狀標(biāo)簽。
inline-block元素特點:
1、和其他元素都在一行上;
2、元素的高度、寬度、行高以及頂和底邊距都可設(shè)置。
提示:下一小節(jié)是用視頻動畫來講解css中的盒模型。
塊元素盡量采用div嵌套, 行內(nèi)元素盡量采用span嵌套
顯示模式的轉(zhuǎn)換
塊級、行內(nèi) 、行內(nèi)塊元素三者是可以相互轉(zhuǎn)換的。
display 顯示 的意思
block 塊
inline 行內(nèi)
塊級 → 行內(nèi)元素 display: inline;
<style>
div{
width:100px;
height:100px;
background-color:#036;
display:inline;
}
</style>
行內(nèi)元素 → 塊級元素 display: block;
<style>
a{
width:100px;
height:100px;
background-color:#960;
display:block
}
</style>
行內(nèi)和塊級 → 行內(nèi)塊 display:inline-block;
span{
width:100px;
height:100px;
background-color:#960;
didplay:inline-block;
}
水平居中設(shè)置-行內(nèi)元素
如果被設(shè)置元素為文本、圖片等行內(nèi)元素時,水平居中是通過給父元素設(shè)置text-align:center來實現(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è)置元素為塊狀元素時用text-align:center就不起作用了,這時也分兩種情況:定寬塊狀元素和不定寬塊狀元素。
滿足定寬和塊狀兩個條件的元素是可以通過設(shè)置"左右margin"值為"auto"來實現(xiàn)居中的。我們來看個例子就是設(shè)置div這個塊狀元素水平居中:
第一種方法
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è)置的。這種水平居中的方法兩個2個條件缺一不可
第二種方法
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è)置居中,比如網(wǎng)頁上的分頁導(dǎo)航,因為分頁的數(shù)量是不確定的,所以我們不能通過設(shè)置寬度來限制它的彈性。
不定寬度的塊狀元素有三種方法居中(這三種方法目前使用的都比多):
加入table標(biāo)簽
設(shè)置display;inline方法
設(shè)置position:relative和left:50%;
(1)第一種方法:
第一步:為需要設(shè)置的居中的元素外面加入一個table標(biāo)簽(包括<tbody>、<tr>、<td>)。
第二步:為這個table設(shè)置"左右margin auto"(這個和定寬塊狀元素的方法一樣)。舉例如下:
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)第二種方法:
改變塊級元素的dispaly為inline類型,然后使用text-align:center來實現(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)勢是不用增加無語義標(biāo)簽,簡化了標(biāo)簽的嵌套深度,
但也存在著一些問題:它將塊狀元素的display類型改為inline,變成了行內(nèi)元素,所以少了一些功能,比如設(shè)定長度值。
(2)第三種方法:
通過給父元素設(shè)置float,然后給父元素設(shè)置position:relative和left:50%,子元素設(shè)置position:relative和left:-50%來實現(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)點不添加無語議表標(biāo)簽,不增加嵌套深度,
但它的缺點是設(shè)置了position:relative,帶來了一定的副作用。
這三種方法使用得都非常廣泛,各有優(yōu)缺點,具體選用哪種方法,可以視具體情況而定。
隱性改變display類型
有一個有趣的現(xiàn)象就是當(dāng)為元素(不論之前是什么類型元素,display:none除外)設(shè)置以下2個句之一:
position:absolute
float:left或float:right
元素會自動變?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="">進入課程請單擊這里</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; /*文字水平居中對齊*/
line-height: 200px; /*設(shè)置文字行距等于div的高度*/
overflow:hidden;
}
text-align 和margin auto 區(qū)別
text-align 可以讓塊級元素里面的文字內(nèi)容居中對齊.
文字內(nèi)容 == (圖片 input 行內(nèi)元素 行內(nèi)塊元素)
但是對于里面的塊級元素?zé)o效
讓一個塊級元素居中對齊 : margin:0 auto;
【實例】
<!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="請輸入電子郵箱"/></label><br/>
<label>密碼: <input type="password" name="password"/></label><br/>
<label for="address">地址</label>
<input type="text" name="address" id="address" placeholder="請輸入地址" />
</form>
</div>
<div class="img3">
<img src="../../photo/趙麗穎.jpeg" />
</div>
</body>
</html>
CSS布局水平居中實戰(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>
說明:這個水平居中方法, 我們最熟悉了, 也是最常用的, 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>
說明:絕對定位脫離文檔流, 不會對后續(xù)元素的布局造成影響。transform為 CSS3 屬性, 有兼容性問題
方法六:flex + justify-content
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。