CSS强制调整图像大小并保持长宽比
我正在处理图片,我遇到了一个长宽比的问题。
<img src="big_image.jpg" width="900" height="600" alt="" />
如你所见,"高度 "和 "宽度 "已经被指定。我为图像添加了CSS规则。
img {
max-width:500px;
}
但是对于big_image.jpg
,我收到width=500
和height=600
。我怎样才能设置图片的大小,同时保持它们的长宽比。
497
18
<!--开始片段。 js hide.false --> -- begin snippet: js hide: false -->
<!--结束片段-->
这将使图像缩小,如果它对指定的区域来说太大了(作为缺点,它不会放大图像)。
[1]: http://i.stack.imgur.com/aEEkn.png
下面的解决方案将允许放大和缩小图像,这取决于父框的宽度。
所有图像都有一个固定宽度的父容器仅用于演示目的。 在生产中,这将是父框的宽度。
最佳实践(2018)。
这个解决方案告诉浏览器以最大可用宽度渲染图像,并以该宽度的百分比调整高度。
<!--开始片段。 js hide: false -->
<!--结束片段-->
Fancier Solution。
使用更高级的解决方案,你将能够裁剪图像,无论其大小,并添加背景色以补偿裁剪。
<!--开始片段。 js hide.false --> -- begin snippet: js hide: false -->
<!--结束片段-->
对于指定padding的那一行,你需要计算图像的长宽比,例如。
所以,顶部填充物=34.37%。
我'在这个问题上挣扎得相当辛苦,最终得出了这个简单的解决方案。
你可以根据自己的需要调整宽度和高度,object-fit属性会帮你做裁剪。
干杯。
背景尺寸属性只有ie>=9,但如果你觉得没问题,你可以使用一个带有
background-image
的div,并设置background-size: contain
。现在你可以将你的Div大小设置为你想要的大小,不仅图像将保持其长宽比,而且还将在Div的垂直和水平方向上集中。只是不要忘记在css上设置尺寸,因为div本身没有宽度/高度属性。
这种方法与setecs的答案不同,使用这种方法,图像区域将是恒定的,并由你来定义(根据div的大小和图像的长宽比,在水平或垂直方向上留下空位),而setecs的答案将为你提供一个与缩放后的图像大小完全相同的盒子(没有空位)。
编辑。 根据MDN background-size documentation,你可以使用一个专有的过滤器声明来模拟IE8中的背景尺寸属性。
与这里的一些答案非常相似,但在我的情况下,我的图像有时较高,有时较大。
这种风格就像一个魅力一样,确保所有的图片都使用所有的可用空间,保持比例而不是削减。
删除"高度"属性。
通过指定这两个属性,你就改变了图像的长宽比。只设置一个会调整大小,但保留长宽比。
可选的是,限制过大的尺寸。
只需将其添加到你的css中,它就会在保持原有比例的情况下自动收缩和展开。
没有标准的方法来保持图像的长宽比,同时指定 "宽度"、"高度 "和 "最大宽度"。
因此,我们不得不指定 "宽度 "和 "高度 "以防止在加载图像时出现页面 "跳跃",或者使用 "最大宽度 "而不指定图像的尺寸。
只指定 "width"(没有 "height")通常意义不大,但你可以尝试通过在样式表中添加 "IMG {height: auto; }"这样的规则来覆盖 "height "的HTML属性。
也请看相关的Firefox bug 392261。
将图片容器标签的CSS类设置为 "imag-class"。
并将其添加到你的CSS样式表中。
要在保持响应式图像的同时,仍然强制要求图像具有一定的纵横比,你可以做以下操作。
HTML。
而SCSS:
这可以用来强制执行一定的纵横比,不管作者上传的图片大小。
感谢 http://codepen.io/Kseso/pen/bfdhg 的 @Kseso。 更多的比例和工作实例请查看这个URL。
https://jsfiddle.net/sot2qgj6/3/
如果你想放置宽度固定百分比的图像,但宽度不是固定像素的图像,那么答案是这样的。
而在处理不同尺寸的屏幕时会很有用。
诀窍是
使用 "position.absolute "将图片放在padding空间。 绝对 "把图片放在padding空间。
使用
max-height和max-width
来确保图像不会超过父元素。使用
display:block 和 margin: auto
使图片居中。我也在fiddle里面注释了大部分的技巧。
我也找到一些其他的方法来实现。 在html中不会有真正的图片,所以当我需要"img"的时候,我个人更倾向于顶部的答案。 元素的时候。
通过使用背景简单的css。 http://jsfiddle.net/4660s79h/2/
背景图片,上面有文字。 http://jsfiddle.net/4660s79h/1/
使用绝对位置的概念来自这里 http://www.w3schools.com/howto/howto_css_aspect_ratio.asp
如果要强制要求图片符合一个精确的尺寸,你不需要写太多的代码。 它'如此简单
<!--开始片段。 js hide: false console: true babel.false --> -- begin snippet: js hide: false console: true false -->
<!--结束片段-->
你可以用这个。
你可以创建一个这样的div。
然后用这个css来做样式。
如果图像在指定的区域内太大,会使图像缩小(缺点是不能放大图像)。
setec的解决方案对于自动模式下的"Shrink to Fit" 自动模式下的解决方案。 但是,要想在'auto'.模式下达到最佳的EXPAND to fit效果,你需要先在'auto' 模式下,你需要先把接收到的图像放到一个临时ID中。 检查它是否可以在高度或宽度上展开(取决于它的纵横比与你的显示块的纵横比)。
当收到的图像小于显示框时,这种方法很有用。 您必须将它们以原始的小尺寸保存在服务器上,而不是以它们的扩展版本来填充您的大显示框,以节省大小和带宽。
全屏展示。
请记住,如果视口高度大于图像,图像自然会相对于差值降低。
<!--开始片段。 js hide.false --> -- begin snippet: js hide: false -->
<!--结束片段-->
使用伪元素进行垂直对齐怎么样? 这段较少的代码是针对一个旋转木马的,但我想它适用于每个固定尺寸的容器。 它将保持长宽比,并在顶部/底部或左/写插入@灰暗条,以获得最短的尺寸。 同时,图像通过文本对齐方式水平居中,通过伪元素垂直居中。