如何缩小图像以适合固定位置的柔韧性盒模式?
在尝试以下操作时,图像与页眉/页脚重叠。它需要适用于IE中的高大图像或宽大图像。
.modal-dialog {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.modal-content {
display: flex;
flex-direction: column;
height: 100%;
}
.modal-header {
background: red;
margin: 20px;
}
.modal-body {
background: green;
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin: 0 20px;
}
.modal-footer {
background: blue;
margin: 20px;
}
<div class="modal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
header
</div>
<div class="modal-body">
<img src="https://via.placeholder.com/900x1200" />
</div>
<div class="modal-footer">
footer
</div>
</div>
</div>
</div>
请注意,这是一个简单的示例,我实际上使用的是复杂的SVG,而不是图像标签,所以我不能使用背景图像。
答案 0 :(得分:0)
使用图像作为背景:
.modal-dialog {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.modal-content {
display: flex;
flex-direction: column;
height: 100%;
}
.modal-header {
background: red;
margin: 20px;
}
.modal-body {
background: green;
flex: 1;
/*display: flex;
flex-direction: column;
align-items: center;
justify-content: center;*/
margin: 0 20px;
background-size:contain;
background-position:center;
background-repeat:no-repeat;
}
.modal-footer {
background: blue;
margin: 20px;
}
<div class="modal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
header
</div>
<div class="modal-body" style="background-image:url(https://via.placeholder.com/900x1200)">
</div>
<div class="modal-footer">
footer
</div>
</div>
</div>
</div>
还是考虑因素max-width:100%;max-height:100%
.modal-dialog {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.modal-content {
display: flex;
flex-direction: column;
height: 100%;
}
.modal-header {
background: red;
margin: 20px;
}
.modal-body {
background: green;
flex: 1;
height:100%; /*to be able to use max-height*/
min-height:0; /*to allow the shrink*/
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin: 0 20px;
}
.modal-footer {
background: blue;
margin: 20px;
}
img {
max-width:100%;
max-height:100%;
min-width:0;
min-height:0;
}
<div class="modal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
header
</div>
<div class="modal-body" >
<img src="https://via.placeholder.com/900x1200)">
</div>
<div class="modal-footer">
footer
</div>
</div>
</div>
</div>
答案 1 :(得分:0)
您可以使用具有最大宽度和position: absolute
的旧式max-height
:
/* for demonstration I have replaced all irrelavant styles with this */
.modal-body {
width: 80vw;
height: 60vh;
margin: 10% auto 0;
background: green;
}
/* parent must be positioned */
.modal-body {
position: relative;
}
/* size and center */
.modal-body img {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
max-width: 100%;
max-height: 100%;
margin: auto;
}
<div class="modal-body">
<img src="https://via.placeholder.com/900x1200" />
</div>
答案 2 :(得分:0)
仅是提醒,但默认情况下图像会尝试保持其长宽比,因此只需设置百分比宽度即可使内联图像增长到适当的高度 OR 设置只有高度保持一定百分比才能保持宽度。
关键是只设置一个维度,让浏览器找出其余的维度。
如果您使用适当的HTML结构设置 Inline 大小,则尤其如此。
<div class="modal-body">
<img src="https://via.placeholder.com/900x1200" width="100%" />
</div>
现在,您只需使用CSS设置容器的最大宽度,一切都会很愉快。对于img
标签的任何使用都应该如此。意思是,如果在img src属性中使用SVG,它将像图像一样起作用。就是说,我相信如果您这样做,就会失去SVG互动。
因此,假设您要实际将SVG放入代码中,则需要对SVG进行一些工作。
请注意大多数SVG如何在标头中具有硬编码的高度和宽度,只需删除硬编码的高度/宽度即可,因为view-box
可以保持SVG的正确缩放图像的比例。
<svg width="299px" height="138px" viewBox="0 0 299 138" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="example">
<rect id="Rectangle" fill="#D8D8D8" x="0" y="0" width="299" height="138"></rect>
<circle id="Oval" fill="#46BEC6" cx="53" cy="50" r="26"></circle>
<circle id="Oval-Copy" fill="#46BEC6" cx="105" cy="76" r="26"></circle>
<circle id="Oval-Copy-2" fill="#46BEC6" cx="165" cy="95" r="26"></circle>
<circle id="Oval-Copy-3" fill="#46BEC6" cx="217" cy="63" r="26"></circle>
<circle id="Oval-Copy-4" fill="#46BEC6" cx="269" cy="32" r="26"></circle>
</g>
</g>
</svg>
<svg viewBox="0 0 299 138" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="example">
<rect id="Rectangle" fill="#D8D8D8" x="0" y="0" width="299" height="138"></rect>
<circle id="Oval" fill="#46BEC6" cx="53" cy="50" r="26"></circle>
<circle id="Oval-Copy" fill="#46BEC6" cx="105" cy="76" r="26"></circle>
<circle id="Oval-Copy-2" fill="#46BEC6" cx="165" cy="95" r="26"></circle>
<circle id="Oval-Copy-3" fill="#46BEC6" cx="217" cy="63" r="26"></circle>
<circle id="Oval-Copy-4" fill="#46BEC6" cx="269" cy="32" r="26"></circle>
</g>
</g>
</svg>
如果您不知道需要设置哪一个(例如动态图像),则需要先使用javascript对其进行测量,然后再应用正确的度量。遵循以下原则:
fixImage(){
var img = findTheImageInTheDom;
if (img.width > img.height){
img.width = "100%";
} else {
img.height = "100%";
}