这有点难以解释,但是:我想要一个响应高度的div(height: 100%
),它将宽度按比例缩放到高度(反之亦然)。
我知道this method使用了padding-top
的技巧来使高度与宽度成比例,但我需要它反过来工作。话虽如此,我并不非常热衷于在该方法中对内容的绝对定位元素的额外要求,所以我意识到我很可能在这里要求月亮。
为了帮助可视化,这里有一张图片:
这是一个jsFiddle,说明了几乎相同的事情。
值得注意的是,我已经使用:before
和:after
伪元素来垂直对齐我想要按比例缩放的框的内容。
我真的很喜欢不必恢复到jQuery,只是因为这将是一个对调整大小处理程序的内在要求,并且通常需要更多的调试......但如果这是我唯一的选择,那么 fiat。
8条答案
按热度按时间xmakbtuz1#
我一直在想用纯css解决这个问题,最后我想到了一个使用ems的解决方案,它可以使用vws来逐步增强:
有关完整的工作演示和解释,请参见codepen链接:
http://codepen.io/patrickkunka/pen/yxugb
简化版:
camsedfj2#
你可以用那个“垫顶”的把戏
http://absolide.tumblr.com/post/7317210512/full-css-fluid-squares
或者:
http://codeitdown.com/css-square-rectangle/
CSS中的垂直填充与元素的宽度有关,而不是高度。
ddrv8njm3#
字体解决方案要求高度是已知的。我已经找到了一个解决方案,可以在宽度和高度未知的父div中使元素成比例。Here is a demo。
我使用的技巧是将图像用作间隔符。代码解释如下:
因此,它不是最漂亮的两个额外的div和一个无用的图像。但它可能会更糟。图像元素需要具有所需尺寸的宽度和高度。宽度和高度需要与允许的最大尺寸一样大(一个功能!)。
CSS:
这个元素是用来限制高度的,但是水平扩展(
width: auto
),虽然永远不会超过父元素(max-width
)。溢出需要隐藏,因为一些子元素会突出到div之外。此图像不可见并与高度成比例缩放,而宽度将被调整并强制父对象的宽度也被调整。
这个元素是用一个绝对定位的容器填充空间所必需的。
在这里,我们的比例元素使用熟悉的padding-bottom技巧获得与宽度成比例的高度。
不幸的是,在Chrome和IE中有一个错误,所以如果你使用Javascript修改父元素,例如在我的演示中,尺寸将不会更新。有一个黑客可以应用于解决这个问题,如我的演示所示。
q0qdq0h24#
您可以使用view height(vh)作为width的单位。
这里是一个例子与20px保证金您要求的。
看小提琴:https://jsfiddle.net/svobczp4/
bqucvtff5#
基于@kunkalabs的回答(这真的很聪明),我提出了一个解决方案,可以让您保留继承的font-size。
HTML:
CSS:
所以基本上
#content
的字体大小是(100 / $rectFontSize)* 矩形的100%。如果你需要一个确定的矩形像素大小,你可以设置#rect
的父级的字体大小......否则只是调整字体大小,直到它在你想要的地方(在这个过程中激怒你的设计师)。u0sqgete6#
你可以通过使用SVG来实现这一点。
这取决于具体情况,但在某些情况下它确实很有用。举个例子-您可以设置
background-image
而不设置固定高度,或者使用它以16:9
和position:absolute
的比例嵌入<iframe>
。对于
3:2
比率设置viewBox="0 0 3 2"
等等。示例:
dhxwm5r47#
在较新的浏览器上,我们可以使用具有固定高度的
aspect-ratio
,并相应地计算宽度。但是浏览器对
aspect-ratio
的支持还不够好。我喜欢@Jakub Muda提出的SVG
解决方案,除了它需要修改标记的事实。我已经通过使用content
属性将SVG
移动到CSS中。在较新的浏览器上,它禁用SVG hack并切换到aspect-ratio
属性。kuhbmx9i8#
使父DIV表现得像一个表格单元格,并垂直对齐子元素。不需要做任何填充技巧。
HTML
CSS