您可以利用替换元素可能具有固有纵横比的事实。根据规范,
否则,如果 'height' 的计算值为 'auto',并且元素具有固有比率,则使用的 'height' 值为:
(使用宽度) / (内在比率)
因此,您可以
- 创建具有所需内在比率的替换元素,然后设置
width:100%
为它。
- 使用绝对定位从元素的正常流动中移除所有内容,以防止它们增加高度。然后,让它长到装满容器。
然后,容器容器将具有您想要的纵横比。
被替换的元素可以是图像。您可以在 PHP 中创建所需纵横比的图像,或使用第三方 Web 服务,如http://placehold.it/
在下面的代码片段中,我使用了2px 宽和 1px 高的图像 (
):
.container {
border: 3px solid blue;
position: relative;
}
.container > img {
width: 100%;
display: block;
visibility: hidden;
}
.container > .content {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
overflow: auto;
}
<div class="container">
<img src="http://i.stack.imgur.com/Lfmr6.png" />
<div class="content">
<p>01</p><p>02</p><p>03</p><p>04</p><p>05</p>
<p>06</p><p>07</p><p>08</p><p>09</p><p>10</p>
<p>11</p><p>12</p><p>13</p><p>14</p><p>15</p>
<p>16</p><p>17</p><p>18</p><p>19</p><p>20</p>
</div>
</div>
您还可以使用<canvas>
元素而不是图像。这样您就不需要创建图像,但它不适用于旧浏览器(如 IE 8 和更早版本):
<div class="container">
<canvas height="1" width="2"></canvas>
<div class="content">...</div>
</div>
.container {
border: 3px solid blue;
position: relative;
}
.container > canvas {
width: 100%;
display: block;
visibility: hidden;
}
.container > .content {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
overflow: auto;
}
<div class="container">
<canvas height="1" width="2"></canvas>
<div class="content">
<p>01</p><p>02</p><p>03</p><p>04</p><p>05</p>
<p>06</p><p>07</p><p>08</p><p>09</p><p>10</p>
<p>11</p><p>12</p><p>13</p><p>14</p><p>15</p>
<p>16</p><p>17</p><p>18</p><p>19</p><p>20</p>
</div>
</div>