如何设置图像的宽度和高度而不拉伸它?

Pau*_*jan 69 html css

如果我有:

#logo {
    width: 400px;
    height: 200px;
}
Run Code Online (Sandbox Code Playgroud)

然后

<img id="logo" src="logo.jpg"/>
Run Code Online (Sandbox Code Playgroud)

将拉伸以填补该空间.我希望图像保持相同的大小,但是它要占用DOM中的那么多空间.我是否需要添加封装<div><span>?我讨厌为样式添加标记.

cle*_*tus 98

是的,你需要一个封装div:

<div id="logo"><img src="logo.jpg"></div>
Run Code Online (Sandbox Code Playgroud)

有类似的东西:

#logo { height: 100px; width: 200px; overflow: hidden; }
Run Code Online (Sandbox Code Playgroud)

其他解决方案(填充,边距)更繁琐(因为您需要根据图像的尺寸计算正确的值),但也不能有效地允许容器小于图像.

而且,对于不同的布局,上述内容可以更容易地进行调整.例如,如果您想要右下方的图像:

#logo { position: relative; height: 100px; width: 200px; }
#logo img { position: absolute; right: 0; bottom: 0; }
Run Code Online (Sandbox Code Playgroud)

  • 您可以用<figure>替换<div>标签:添加语义,如果需要,您可以为其添加标题(<figcaption>).https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure (4认同)
  • 我不知道Cletus是一名网络开发人员.惊人 (3认同)

小智 37

您可以添加img到您的CSS,它将自动裁剪图像

  • 你应该提一下它的工作原理. (2认同)
  • 检查此链接以了解浏览器兼容性:https://caniuse.com/#search=object-fit (2认同)

Sam*_*ody 28

加载图像作为div的背景.

代替:

<img id='logo' src='picture.jpg'>
Run Code Online (Sandbox Code Playgroud)

<div id='logo' style='background:url(picture.jpg)'></div>
Run Code Online (Sandbox Code Playgroud)

所有浏览器都会裁剪掉不适合的图像部分.
这有几个优点,包括一个隐藏溢出的元素:

  1. 没有额外的标记.div只是取代了img.
  2. 轻松居中或将图像设置为另一个偏移.例如.url(pic) center top;
  3. 当足够小时重复图像.(好吧,不知道为什么你会想要那个)
  4. 在同一语句中设置bg颜色,轻松将同一图像应用于多个元素,以及适用于bg图像的所有内容.

  • 这在语义上不正确.如果这很有用,为什么HTML5会放置更多与图像相关的标签,以优化语义,用figcaption,picture?使用img标签设计并停止用<div> s替换所有内容. (5认同)
  • 给出-1的人应该为其​​他用户的利益解释.就个人而言,即使在iOS上的IE6和Safari上也取得了优异的成绩. (4认同)
  • 默认情况下,某些浏览器将不打印背景图像,因此如果要让用户打印该页面,这可能不是一个好方法。 (2认同)

小智 23

CSS3对象适合

我不确定webkit,IE和firefox实现了多远.但是Opera就像魔术一样

object-fit使用SVG内容,但通过preserveAspectRatio=""在SVG本身中设置属性也可以实现相同的效果.

img {
  height: 100px;
  width: 100px;
  -o-object-fit: contain;
}
Run Code Online (Sandbox Code Playgroud)

克里斯·米尔斯演示了它http://dev.opera.com/articles/view/css3-object-fit-object-position/

  • 1+这真的很酷.太糟糕了[支持有限..](http://caniuse.com/object-fit)看起来Chrome 32是第一个支持它而没有供应商前缀的人. (2认同)

Man*_*vin 8

#logo {
    width: 400px;
    height: 200px;

    /*Scale down will take the necessary specified space that is 400px x 200px without stretching the image*/
    object-fit:scale-down;
}
Run Code Online (Sandbox Code Playgroud)


Sav*_*lon 7

<img style="object-fit: contain" src="...">
Run Code Online (Sandbox Code Playgroud)

非常适合我。


Sab*_*jad 6

做一个div并给它一个班级.然后在其中放一个img.

<div class="mydiv">

<img src="location/of/your/image" ></img>

</div>
Run Code Online (Sandbox Code Playgroud)

设置div的大小并使其相对.

    .mydiv {
        position: relative;
        height:300px;
        width: 100%;
        overflow: hidden;
    }
Run Code Online (Sandbox Code Playgroud)

然后设计你的形象

img {
    width: 100%;
    height: auto;
    overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助