做這樣的:
所以我們基本上前述需要設置一個高度上的包裝都沒有。如果在元素上沒有定義高度,則百分比基於DOM層次結構中具有定義寬度的最低元素,該元素是元素接收百分比的父元素。
所以在這種情況下,max-width: 85%
和max-height: 85%
將body
元素稱爲具有定義大小的最近的父元素。
HTML
<div id='wrap'>
<img src='https://placehold.it/1200x1400' />
<div id='leftArrow' style='position: absolute'></div>
<div id='rightArrow' style='position: absolute'></div>
<div id='thumbnails' style='position: absolute'></div>
</div>
CSS
html, body {
height: 100%;
margin: 0;
}
#wrap {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
#wrap img {
max-height: 85%;
max-width: 85%;
}
部分該解決方案的美的是,我們基本上告訴包裝元素本身推到頁面中心,然後使用CSS 3 transform
屬性,通過相對於其自身的偏移將其自身滑動到頁面中心height
/width
(這就是translate(-50%, -50%)
屬性所做的)。
這意味着無論圖像的大小如何,它都會一致地呈現在頁面的中心位置。如果填寫了leftArrow
,rightArrow
和thumbnails
部分,則#wrap
元素仍將呈現在頁面的中心位置。 transform
是CSS 3規範中引入的最有用的功能之一,也是其他原因之一。
編輯:
Updated fiddle
所以這裏的區別是,因爲我們需要的.wrap
元素這樣的緊密包裹,我們將使用一些措施鮮爲人知的單位設置圖片高度。
檢查這個改變CSS:
#wrap {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: #075883;
max-height: 85%;
max-width: 85%;
}
#wrap img {
max-height: 100%!important;
max-width: 100%;
}
重要的事情,這裏要注意
- 我們移動
max-width
和max-height
規則來包裝。這確保了它的適當縮放。
- 對
max-width
和max-height
規則的更改意味着我們需要以不同的方式約束圖片。你會認爲我們可以用max-width: 100%
或max-height: 100%
這樣做,但你不能。 max-height
在這種情況下不起作用,並且圖片滔滔不絕。但不用擔心,因爲我們有相對於確定我們可以回退。我們將max-width
設置爲85vw
(85/100視圖寬度)和max-height
至85vh
(85/100視圖高度)。
應該這樣做。
關鍵:你需要什麼樣的瀏覽器支持? – anandthakker 2014-12-04 23:05:32
正確的,如果我在這裏錯了,但我假設background-size:包含需要你設置包裝div的高度/寬度。由於圖像會根據客戶端上傳的內容更改尺寸,因此寬度/高度越短,空白區域越寬。 – Glyph 2014-12-04 23:08:24
我們希望一直支持IE8,但IE9 +可能已經足夠。 – Glyph 2014-12-04 23:08:57