HTML(谢谢Rory)
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="Sandbox for Stack Overflow question https://dev59.com/8Ggv5IYBdhLWcg3wZ_--" />
<meta charset=utf-8 />
<title>Sandbox for SO question about scaling an element both visually and dimensionally</title>
</head>
<body>
<div id="wrapper">
<div class="surrounding-content">
before
</div>
<div id="content-to-scale">
<div>something inside</div>
<div><img src="http://placekitten.com/g/150/100"></div>
<div>another something</div>
</div>
<div class="surrounding-content">
after
</div>
</div>
</body>
</html>
CSS代码(仍基于Rory的基础)
body {
font-size: 13px;
background-color: #fff;
}
#wrapper {
width: 50%;
margin-left: auto;
margin-right: auto;
border: 0.07692307692307693em solid #888;
padding: 1.1538461538461537em;
}
.surrounding-content {
border: 0.07692307692307693em solid #eee;
}
#content-to-scale {
border: 0.07692307692307693em solid #bbb;
width: 10em;
}
#content-to-scale {
font-size: 1.1em;
}
#content-to-scale img {
width: auto;
height: auto;
min-width: 100%;
max-width: 100%;
}
说明:
我正在使用字体大小和ems来“缩放”子元素的尺寸。
Ems是相对于当前上下文的字体大小的尺寸单位。
所以如果我说我有一个字体大小为13px和边框为1(所需像素边框宽度)除以13(当前上下文的字体大小也为像素)= 0.07692307692307693em,浏览器应该呈现1像素边框
为了模拟15px的填充,我使用相同的公式,(所需像素)/(当前上下文的像素字体大小)= 所需的ems。15/13 = 1.1538461538461537em
为了控制图像的缩放,我使用我最喜欢的一种方法:自然比例保持比例尺缩放,让我解释一下:
图像有自然的高度和宽度以及它们之间的比率。大多数浏览器将在宽度和高度都设置为自动的情况下保持这个比率。
然后,您可以通过min-width和max-width来控制所需的宽度,在这种情况下,使其始终缩放到父元素的完整宽度,即使它会超出其自然宽度。
(您还可以使用max-width和max-height 100%来防止图像突破父元素的边界,但永远不要超出它们的自然尺寸)
现在您可以通过调整#content-to-scale上的字体大小来控制缩放。 1.1em大约等于scale(1.1)
这确实有一些缺点:嵌套的ems字体大小将递归应用。也就是说,如果您有:
<style type="text/css">
div{
font-size: 16px;
}
span{
font-size: 0.5em;
}
</style>
<div>
<span>
<span>
Text
</span>
</span>
</div>
你最终会得到“Text”以4px的大小呈现,而不是你可能期望的8px。
transform
和transform-origin
属性的文档。 - Rory O'Kane