厲害了我的哥,css圖片居中原來有這么多種方法
圖片的居中顯示 css 有很多方法,但在很多情況下有的方法無效,這是件很頭疼的事情,比如
一般設置圖片屬性
?
text-align:center
?
水平居中,但這個方法經常無效,
很多前端工程師都有研究過或者說是搜索過CSS
圖片居中方法吧。但其實 CSS 圖片居中有多種不同的情況,也有多種不同的解決方法,具體方法如下所示:
圖片居中又分為水平居中和垂直居中
提示:在你開始閱讀以下內容之前,你可以先了解CSS圖片的基礎內容。
一、水平居中:
1、單獨文字垂直居中我們只需要設置 CSS 樣式line-height屬性即可。
2、文字與圖片同排,在設置div高度同時再對此 CSS 樣式的圖片“img”樣式設置?vertical-align:middle
?垂直居中屬性,如:?img{vertical-align:middle;}
? 。
3 不確定寬度的塊級元素設置水平居中的方法
(1)是使用?table
? 作為容器的方法來實現。當然不大推薦使用這種方法,因為添加了無意義的標簽。這里就稍微介紹一下吧。?Table
? 標簽本身并不是塊級元素,當我們不設置?table
?的寬度的話,他里面的寬度是由他內部元素的寬度撐起來的。但即使我們沒有設置?table
?的寬度,直接設置?table
?的外邊距?margin:0 auto;
?就可以實現水平居中了!這樣我們就可以通過設置?table
?水平居中,間接使里面的內容居中。
(2)相對于用?table
?的方法的好處是不用增加無語義標簽,簡化標簽嵌套深度。這個思路是這樣的,通過改變塊級元素的?display
?屬性值為?inline
?類型,然后設置?text-align:center
?來實現居中。這種方法也有一定不妥之處就是把塊級元素改為行內元素后,行內元素比塊元素少了一些功能。比如說設定長寬值等,在項目運用中可能會有一些限制,大家可以自行選擇。
(3)通過給父元素設置浮動?float
?,再設置父元素的?position
?屬性為?relative
?和?left:50%;
?子元素設置?position:relative
?和?left:-50%
?來實現水平居中。這個好處是可以保留塊級元素仍然是以?display:block
?的形式顯示,不會添加無意義的標簽,不添加嵌套深度。確點是設置了?position:relative;
?帶來了一些副作用。下面是第三種方法的實例代碼,放到?body
?標簽里面就可以了。
二、垂直居中:
對這個CSS居中問題,我們可以使用設置背景圖片的方法。舉例:
body {BACKGROUND: url(”圖片文件”) #FFF no-repeat center;}
關鍵就在于這個?center
?屬性,它表示讓該背景圖片在容器中居中。你也可以把?center
?換成?top left
?或者直接寫上數字來調整它的位置。
方法一:
實例
div {
width:500px;
height:500px;
border:1px solid #666;
overflow:hidden;
position:relative;
display:table-cell;
text-align:center;
vertical-align:middle;}
方法二:
實例
div p {
position:static;
+position:absolute;
top:50%
}
img {
position:static;
+position:relative;
top:-50%;left:-50%;
vertical-align:middle
}
方法三:
實例
img {
position:static;
+position:relative;
top:-50%;left:-50%;
vertical-align:middle; }
方法四:
實例
* {margin:0;padding:0;}
div {
width:500px;border:1px solid #666;
height:500px;
background:url("/statics/images/w3c/intro.png") center no-repeat;}
三、css圖片居中用text-align:center無效怎么回事?
實例
div{
border:1px solid red;
margin:20px;
text-align:center;
}
四、如何讓圖片在DIV中水平和垂直兩個方向都居中?
方法一:
思路:利用?text-align
?屬性將圖片水平居中,然后設置?padding-top
?的值使其垂直居中。
結構如下:
<div>
<img src="images/tt.gif" width="150" height="100" />
</div>
CSS樣式如下:
div {width:300px; height:150px; background-color:#CCC; border:#000 1px solid; text-align:center; padding-top:50px;}
運行結果如下:
釋義:
圖片的尺寸為150x100px,DIV的大小為300x200px;
background-color:#CCC; border:#000 1px solid;為DIV加個邊框和背景色,便于觀察效果。
?text-align:center
?,實現圖片的水平居中;?padding-top:50px
?,50px這個數值是經過計算得到的,?padding-top
?的值具體算法如下:(DIV的高度 – 圖片的高度)/2,但這里要注意,根據盒模型原理,我們還要將DIV原來的高度200減去?padding-top
?的值,這樣顯示的才是正確的,否則DIV會變高。
方法二:
思路:只用?padding
?屬性,通過計算求得居中
結構代碼同上;
CSS樣式如下:
div {width:225px; height:150px; background-color:#eee; border:#000 1px solid; padding-top:50px; padding-left:75px;}
備注:這里DIV的寬高計算都遵循盒模型原理,計算方法同上。
方法三:
思路:利用圖片的?margin
?屬性將圖片水平居中,利用DIV的?padding
?屬性將圖片垂直居中。
結構代碼同上;
CSS代碼如下:
div {width:300px; height:150px; background-color:#eee; padding-top:50px; border:#000 1px solid;}
img {display:block; margin:0 auto;}
備注:
?Img
?是內聯元素,要設置其?margin
?屬性使其居中,就要將其轉換為塊元素?display:block;
?然后利用?margin:0 auto;
?實現圖片的水平居中;(有的設計師為圖片再加個 div 標簽,然后通過 div 標簽的?margin
?實現居中,也可以,不過,在結構中就又多了對 div,相對麻煩點)至于垂直居中的方法和前面的都一樣,就不再重述。
以上方法都是有前提的,就是必須知道 DIV 與圖片的尺寸,否則無法完成垂直居中的效果。
用一行css居中并裁剪圖片的方法
設置圖片的裁剪尺寸非常簡單,你只需在 CSS 里使用這行代碼:
img {
object-fit: cover;
}
就是這樣。不需要語義、包裝 div 或者其他沒意義的代碼。
這種技術能很好地把大小不合適的頭像圖片裁剪為正方形或者圓形的圖片。以下面那只熊的寬圖片來舉例。一旦把 ?object-fit:cover
?技術應用在這種圖片上,并且設置好寬和高,圖片自己就會進行裁剪和居中。
?object-fit:cover
?的裁剪方式和?background-size:cover
?的完全相同,不過它是用來為 imgs、videos 和其他的媒體標簽設置樣式的,而不是給背景圖片設置樣式。
相當多的最新瀏覽器都支持 object-fit 技術,并且還有 polyfill 項目讓你能在更老的瀏覽器(IE8+)里使用該技術。