這個問題我很久以前思考過。水平置中當然沒問題, text-align : center 就好了。在 Firefox 和 Chrome 垂直置中也沒啥問題,因為 CSS 支援完整,可以動手腳的地方多。難的是在 IE 垂直置中。之前我想不到好的純 CSS 解法,所以最後我在 img onload 上註冊一個 handler ,動態算出 margin-top ,讓圖片垂直置中。
現在工作上又碰到這個問題,又開始苦思有沒有好的純 CSS 解法。結果在大陸找到這個網頁 - 圖片垂直居中的使用技巧。只能說太神了 m(__ __)m,這種解法我應該一輩子也想不出來吧。老實講我只約略知道為什麼可以這樣解,實際上的原理還是不太懂。
他的方式是抓出特定字型在 IE font-size 和所產生行高的比例,然後就以此比例來算出要垂直置中 font-size 該設多少。他算出來字型 Arial 的比例是 0.873 ,但我算出來約是 0.9 左右。所以要讓一張圖在 IE 高度 200px 的 DIV 中垂直置中就要把 font-family 設為 Arial 、 font-size 設為 200px * 0.9 = 180px 。
再來講講大陸網頁的 Firefox 部份,他用 display : table-cell 讓圖片在 Firefox 垂直置中,我不太喜歡 :p ,因為這樣 DIV 就不能 float : left 或 float : right 了。所以我用 line-height 兜出了一樣的效果。
下面是我整理出的在 IE 、 Firefox 、 Chrome 都可以跑的範例︰
Demo
HTML
<div><img src="demo.jpg" />div>
CSS
div { background-color : #EEE; height : 200px; width : 200px; text-align : center; /* Firefox, Chrome */ line-height : 200px; /* IE */ *font-size : 180px; /* 200px * 0.9 = 180px */ *font-family : Arial; } div img { vertical-align : middle; }
下面是和 float : left 搭配的 Demo ︰
如果你的網頁的 DOCTYPE 不是 Standards 模式,或是沒有寫 DOCTYPE ,那會麻煩些,要多寫些 CSS :
div { background-color : #EEE; height : 200px; width : 200px; text-align : center; /* Firefox, Chrome */ line-height : 200px; white-space : nowrap; /* IE */ *font-size : 180px; /* 200px * 0.9 = 180px */ *font-family : Arial; } div:after { content : "."; font-size : 0; -webkit-text-size-adjust : none; } div img { vertical-align : middle; }
div:after -webkit-text-size-adjust : none 是為了讓 Chrome 支援 font-size : 0 。
沒有留言:
張貼留言