1 回答
TA贡献1847条经验 获得超7个赞
您应该确保您的 div 只是假定内容的大小,img在这种情况下。所以不要使用绝对值。您提到使用grid,因此下面的示例将生成一个网格,其主要部分由20px填充包裹。然后只需使用maximg 上的值来确保它确实超出了网格框的大小。然后在网格框内居中:
const width = document.querySelector( '[name=width]' );
const height = document.querySelector( '[name=height]' );
const image = document.querySelector( 'img' );
function onchange(){
image.src = `http://placehold.it/${width.value}x${height.value}`;
image.style = '';
}
width.addEventListener( 'change', onchange );
height.addEventListener( 'change', onchange );
window.addEventListener( 'DOMContentLoaded', () => setTimeout( onchange, 100 ) );
body, html { height: 100%; }
body { padding: 0; margin: 0; }
main {
display: grid;
grid-template: "left top right" 20px "left main right" 1fr "left bottom right" 20px / 20px 1fr 20px;
height: 100%;
}
main div {
grid-area: main;
border: 1px solid red;
display: inline;
align-self: center;
justify-self: center;
}
main div img {
max-width: 100%;
max-height: 100%;
display: block;
}
#inputs {
position: absolute;
top: 0;
left: 0;
transform: translateY(-100%);
transition: transform .4s;
width: 100%;
padding: 10px;
background: black;
color: white;
}
body:hover #inputs {
transform: translateY(0);
}
<main>
<div>
<img />
</div>
</main>
<div id="inputs">
<label>Width: <input name="width" value="200" type="number" /></label>
<label>Height: <input name="height" value="200" type="number" /></label>
</div>
我已经包含了一些 javascript 以便您可以测试不同大小的图像。我添加了img.style = ''一个在添加新图像后触发 CSS 重新计算,否则加载时其大小将不正确。
添加回答
举报