Responsively change div size keeping aspect ratio
当我给一个图像一个百分比的宽度或高度时,它只会增长/收缩,保持其纵横比,但是如果我希望与另一个元素具有相同的效果,是否可以使用百分比将宽度和高度绑定在一起?
你可以使用纯CSS,JavaScript的;好的员工。本utilizes(somewhat counterintuitive)的事实,这是相对的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | .wrapper { width: 50%; /* whatever width you want */ display: inline-block; position: relative; } .wrapper:after { padding-top: 56.25%; /* 16:9 ratio */ display: block; content: ''; } .main { position: absolute; top: 0; bottom: 0; right: 0; left: 0; /* fill parent */ background-color: deepskyblue; /* let's see it! */ color: white; } |
1 | This is your div with the specified aspect ratio. |
bumming了克里斯"的理念,另一个选项是使用伪元素,所以你不需要使用一个内部的元素总是对的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <style> .square { /* width within the parent. can be any percentage. */ width: 100%; } .square:before { content:""; float: left; /* essentially the aspect ratio. 100% means the div will remain 100% as tall as it is wide, or square in other words. */ padding-bottom: 100%; } /* this is a clearfix. you can use whatever clearfix you usually use, add overflow:hidden to the parent element, or simply float the parent container. */ .square:after { content:""; display: table; clear: both; } </style> Square <p> This div will maintain its aspect ratio. </p> |
我已经把这里和演示:/ / / / / iqndr codepen.io tcmulder笔
编辑:
现在,bumming"艾萨克"的理念,它的正常使用,这在现代browsers说这是大众的单位力比值(虽然我不会因为他也使用VH的比值的变化将意味着或说基于窗口的高度)。
所以,本simplifies的东西:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <style> .square { /* width within the parent (could use vw instead of course) */ width: 50%; /* set aspect ratio */ height: 50vw; } </style> Square <p> This div will maintain its aspect ratio. </p> |
我已经把这里:修改的演示和codepen.io https:/ / / / / / mdojrg tcmulder笔吗?editors = 1100
另外,你可以设置最大高度、最大宽度,和/或最小高度,最小宽度,如果你不想要它,它ridiculously变大的或小的,因为它是基于浏览器的,现在的位置和宽度将变的很干净,但shrink indefinitely /集装箱。
注意你的员工也可以量表内容的元素,如果你设置字体大小,和所有的这innards大众测量电磁测量和演示,和这里的*,codepen.io:https:/ / / / / vbjqlv tcmulder笔吗?editors = 1100
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <style> #aspectRatio { position:fixed; left:0px; top:0px; width:60vw; height:40vw; border:1px solid; font-size:10vw; } </style> <body> Aspect Ratio? </body> |
这件事值得注意的是,这里的关键
这是我们的解决方案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | .main { width: 100%; } .container { width: 30%; float: right; position: relative; } .sizing { width: 100%; padding-bottom: 50%; visibility: hidden; } .content { width: 100%; height: 100%; background-color: red; position: absolute; margin-top: -50%; } |
http:/ / / / / 3 jsfiddle.net ag4fs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | (function( $ ) { $.fn.keepRatio = function(which) { var $this = $(this); var w = $this.width(); var h = $this.height(); var ratio = w/h; $(window).resize(function() { switch(which) { case 'width': var nh = $this.width() / ratio; $this.css('height', nh + 'px'); break; case 'height': var nw = $this.height() * ratio; $this.css('width', nw + 'px'); break; } }); } })( jQuery ); $(document).ready(function(){ $('#foo').keepRatio('width'); }); |
工作领域:/ / / / / 1 jsfiddle.net qtftx