日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

谈谈 css 的各种居中——读编写高质量代码有感

發(fā)布時(shí)間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谈谈 css 的各种居中——读编写高质量代码有感 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

css 的居中有水平居中和垂直居中,這兩種居中又分為行內(nèi)元素居中和塊級(jí)元素居中,不同的居中用不同方法。

水平居中

1、行內(nèi)元素水平居中(文本,圖片)

給父層設(shè)置 text-align:center; 可以實(shí)現(xiàn)行內(nèi)元素水平居中。

<!DOCTYPE HTML> <html lang="en-US"> <head><meta charset="UTF-8"><title></title><style type="text/css">.center{text-align:center;}</style> </head> <body><div class="center"><a href="http://www.google.com.hk/">谷歌搜索</a><br/><br/><img src="cat.jpg" width="248" height="162" alt=""/></div> </body> </html>

2、確定寬度塊級(jí)元素水平居中

確定寬度的塊級(jí)元素水平居中,常用的有 margin:0 auto;?相信很多開(kāi)發(fā)人員都用的是這個(gè),不過(guò)本人認(rèn)為還有更好的寫(xiě)法:margin-left:auto;margin-right:auto; 因?yàn)?margin-top 和 margin-bottom 在重置 css 時(shí)就已經(jīng)寫(xiě)了為 0 了。

<!DOCTYPE HTML> <html lang="en-US"> <head><meta charset="UTF-8"><title></title><style type="text/css">.center{width:100px;height:100px;margin-left:auto;margin-right:auto;background:green;}</style> </head> <body><div class="center"></div> </body> </html>

3、不確定寬度的塊級(jí)元素水平居中

不確定寬度的塊級(jí)元素有三種方法實(shí)現(xiàn)。

方法一:

<!DOCTYPE HTML> <html lang="en-US"> <head><meta charset="UTF-8"><title></title><style type="text/css">*{margin:0;padding:0;}ul{list-style:none;}table{margin-left:auto;margin-right:auto;}.demo li{float:left;display:inline;margin-right:5px;}.demo a{float:left;width:20px;height:20px;text-align:center;line-height:20px;background:#316ac5;color:white;border:1px solid #316ac5;text-decoration:none;}.demo a:hover{background:white;color:#316ac5;}</style> </head> <body><table><tbody><tr><td><ul class="demo"><li><a href="#">1</a></li></ul></td></tr></tbody></table><table><tbody><tr><td><ul class="demo"><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li></ul></td></tr></tbody></table><table><tbody><tr><td><ul class="demo"><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li><li><a href="#">4</a></li><li><a href="#">5</a></li></ul></td></tr></tbody></table> </body> </html>

這里用到了 table 標(biāo)簽來(lái)實(shí)現(xiàn)不確定寬度的塊級(jí)元素水平居中。table 本身不是塊級(jí)元素,如果不給它設(shè)定寬度的話,會(huì)由內(nèi)部元素的寬度“撐開(kāi)”,但即使不設(shè)定它的寬度,僅設(shè)置 margin-left:auto 和 margin-right:auto 就可以實(shí)現(xiàn)水平居中。

這種方法很巧妙,但是增加了無(wú)語(yǔ)義標(biāo)簽,加深了標(biāo)簽的嵌套層數(shù)。

方法二:

<!DOCTYPE HTML> <html lang="en-US"> <head><meta charset="UTF-8"><title></title><style type="text/css">*{margin:0;padding:0;}ul{list-style:none;}.wrapper{width:500px;height:100px;background:black;}.demo{text-align:center;padding:5px;}.demo li{display:inline;}.demo a{padding:2px 6px;background:#316ac5;color:white;border:1px solid #316ac5;text-decoration:none;}.demo a:hover{background:white;color:#316ac5;}</style> </head> <body><div class="wrapper"><ul class="demo"><li><a href="#">1</a></li></ul><ul class="demo"><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li></ul><ul class="demo"><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li><li><a href="#">4</a></li><li><a href="#">5</a></li></ul></div> </body> </html>

方法二是改變?cè)氐?display 值,使塊級(jí)元素變成行內(nèi)元素,然后使用 text-align:center 使其居中。相對(duì)于方法一,它不用增加無(wú)語(yǔ)義標(biāo)簽,簡(jiǎn)化了標(biāo)簽的嵌套深度,但它也存在一定的問(wèn)題:它將塊級(jí)元素變成了行內(nèi)元素,這樣就失去了一些塊級(jí)元素的功能,比如設(shè)置寬度,高度。

方法三:

<!DOCTYPE HTML> <html lang="en-US"> <head><meta charset="UTF-8"><title></title><style type="text/css">*{margin:0;padding:0;}ul{list-style:none;}.wrapper{width:500px;height:100px;background:black;}.demo{clear:both;padding-top:5px;float:left;position:relative;left:50%;}.demo li{display:inline;float:left;margin-right:5px;position:relative;left:-50%;}.demo a{float:left;width:20px;height:20px;text-align:center;line-height:20px;background:#316ac5;color:white;border:1px solid #316ac5;text-decoration:none;}.demo a:hover{background:white;color:#316ac5;}</style> </head> <body><div class="wrapper"><ul class="demo"><li><a href="#">1</a></li></ul><ul class="demo"><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li></ul><ul class="demo"><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li><li><a href="#">4</a></li><li><a href="#">5</a></li></ul></div> </body> </html>

方法三通過(guò)給父層設(shè)置浮動(dòng)和相對(duì)定位以及 left:50%,子元素設(shè)置相對(duì)定位和 left:-50% 來(lái)實(shí)現(xiàn)水平居中。它可以保留塊級(jí)元素的功能,而且不會(huì)添加無(wú)語(yǔ)義標(biāo)簽,不增加嵌套深度,但是設(shè)置了相對(duì)定位,會(huì)帶來(lái)一定的副作用。

這三種方法各有優(yōu)缺點(diǎn),具體使用哪種方法可以視具體情況而定。

垂直居中

1、父層高度不確定的垂直居中

通過(guò)給父層設(shè)置相同的上下內(nèi)邊距實(shí)現(xiàn)。

<!DOCTYPE HTML> <html lang="en-US"> <head><meta charset="UTF-8"><title></title><style type="text/css">*{margin:0;padding:0;}.demo{width:500px;color:white;margin-bottom:10px;padding-top:20px;padding-bottom:20px;background:black;}.content{width:200px;height:50px;background:red;}</style> </head> <body><div class="demo">hello world</div><div class="demo"><img src="cat.jpg" width="248" height="162" alt=""/></div><div class="demo"><div class="content"></div></div> </body> </html>

2、父層高度確定的單行文本垂直居中

通過(guò)給父層設(shè)置行高來(lái)實(shí)現(xiàn),行高和父層高度相同。

<!DOCTYPE HTML> <html lang="en-US"> <head><meta charset="UTF-8"><title></title><style type="text/css">*{margin:0;padding:0;}.demo{width:500px;color:white;background:black;height:100px;line-height:100px;}</style> </head> <body><div class="demo">hello world</div> </body> </html>

3、父層高度確定的多行文本、圖片、塊級(jí)元素垂直居中

方法一:

說(shuō)到垂直居中,css 中有個(gè)用于垂直居中的屬性 vertical-align,但只有在父層為 td 或者 th 時(shí),這個(gè)屬性才會(huì)生效,對(duì)于其他塊級(jí)元素,例如 div、p 等,默認(rèn)情況是不支持的。在 firefox 和 ie8 下,可以設(shè)置塊級(jí)元素的 display 值為 table-cell,來(lái)激活 vertical-align 屬性,但 ie6,7 并不支持,所以這種方法沒(méi)有辦法跨瀏覽器兼容。但是我們可以使用 table。

<!DOCTYPE HTML> <html lang="en-US"> <head><meta charset="UTF-8"><title></title><style type="text/css">*{margin:0;padding:0;}.wrapper{background:black;width:500px;color:white;height:100px;}.demo{width:200px;background:red;height:50px;}</style> </head> <body><table><tr><td class="wrapper">hellow world<br/>hellow world<br/>hellow world<br/></td></tr></table><table><tr><td class="wrapper"><img src="cat.jpg" alt=""/></td></tr></table><table><tr><td class="wrapper"><div class="demo"></div></td></tr></table> </body> </html>

table 可以很好的實(shí)現(xiàn)垂直居中效果,但是它添加了無(wú)語(yǔ)義標(biāo)簽,增加了嵌套深度。

方法二:

對(duì)支持 display:table-cell 的 ie8 和 firefox 用 display:table-cell 和 vertical-align:middle 來(lái)實(shí)現(xiàn)居中,對(duì)不支持 display:table-cell 的 ie6 和 ie7 使用 hack 寫(xiě)法。

<!DOCTYPE HTML> <html lang="en-US"> <head><meta charset="UTF-8"><title></title><style type="text/css">*{margin:0;padding:0;}.mb{margin-bottom:10px;}.wrapper{background:black;width:500px;color:white;height:100px;margin-bottom:10px;display:table-cell;vertical-align:middle;*position:relative;}.demo{width:200px;background:red;height:50px;}.vam{*position:absolute;*top:50%;}.va{*position:relative;*top:-50%;}</style> </head> <body><div class="mb10"><div class="wrapper"><div class="vam"><div class="va">hellow world<br/>hellow world<br/>hellow world</div></div></div></div><div class="mb10"><div class="wrapper"><div class="vam"><img src="cat.jpg" alt=""/></div></div></div><div class="mb10"><div class="wrapper"><div class="vam"><div class="va demo"></div></div></div></div> </body> </html>

利用 hack 技術(shù)區(qū)別對(duì)待 firefox、ie8 和 ie6、ie7,在不支持 display:table-cell 的 ie6 和 ie7 下,通過(guò)給父子兩層元素分別設(shè)置 top:50% 和 top:-50% 來(lái)實(shí)現(xiàn)居中。這種方法的好處是沒(méi)有增加額外的標(biāo)簽,但缺點(diǎn)也很明顯,一方面它使用了 hack,不利于維護(hù),另一方面,它設(shè)置了 position:relative 和 position:absolute,帶來(lái)了副作用。

轉(zhuǎn)載于:https://www.cnblogs.com/axl234/p/3867347.html

總結(jié)

以上是生活随笔為你收集整理的谈谈 css 的各种居中——读编写高质量代码有感的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。