Подтвердить что ты не робот

Как установить ширину и высоту изображения без растягивания?

Если у меня есть:

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

то

<img id="logo" src="logo.jpg"/>

будет растягиваться, чтобы заполнить это пространство. Я хочу, чтобы изображение оставалось одного и того же размера, но для этого занимало столько места в DOM. Нужно ли добавлять инкапсулирующие <div> или <span>? Ненавижу добавить разметку для стилизации.

4b9b3361

Ответ 1

Да вам нужен инкапсулирующий div:

<div id="logo"><img src="logo.jpg"></div>

с чем-то вроде:

#logo { height: 100px; width: 200px; overflow: hidden; }

Другие решения (padding, margin) более утомительны (в том, что вам нужно вычислить правильное значение на основе размеров изображения), но также не позволяют эффективно уменьшить размер контейнера по сравнению с изображением.

Кроме того, вышеизложенное может быть легко адаптировано для разных макетов. Например, если вы хотите изображение в правом нижнем углу:

#logo { position: relative; height: 100px; width: 200px; }
#logo img { position: absolute; right: 0; bottom: 0; }

Ответ 2

Загрузите изображение в качестве фона для div.

Вместо:

<img id='logo' src='picture.jpg'>

делать

<div id='logo' style='background:url(picture.jpg)'></div>

Все браузеры обрезают часть изображения, которое не подходит.
Это имеет несколько преимуществ overr, обертывающих его элементом, переполнение которого скрыто:

  • Никакой дополнительной разметки. Div просто заменяет img.
  • Легко центрируйте или установите изображение на другое смещение. например. url(pic) center top;
  • Повторите изображение, если оно достаточно мало. (ОК, не знаю почему вы хотели бы этого)
  • Установите цвет bg в том же самом операторе, легко примените одно и то же изображение к нескольким элементам и все, что относится к изображениям bg.

Ответ 3

Ответ 2017

Подгонка объекта CSS работает во всех современных браузерах. Это позволяет элементу img быть больше, не растягивая изображение.

Вы можете добавить object-fit: cover; на ваш CSS.

Ответ 4

CSS3 объектно-ориентированный

Не уверен, насколько это было реализовано webkit, IE и firefox. Но Opera работает как магия

object-fit работает с SVG-контентом, но такой же эффект можно достичь, установив атрибут preserveAspectRatio="" в самом SVG.

img {
  height: 100px;
  width: 100px;
  -o-object-fit: contain;
}

Chris Mills демо здесь http://dev.opera.com/articles/view/css3-object-fit-object-position/

Ответ 5

#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;
}

Ответ 6

Сделайте div и дайте ему класс. Тогда поместите IMG в это.

<div class="mydiv">

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

</div>

Установите размер вашего div и сделайте его относительным.

    .mydiv {
        position: relative;
        height:300px;
        width: 100%;
        overflow: hidden;
    }

тогда стиль вашего изображения

img {
    width: 100%;
    height: auto;
    overflow: hidden;
}

надеюсь, это поможет

Ответ 7

Нужно ли добавлять инкапсулирующий <div> или <span> ?

Думаю, что да. Единственное, что приходит на ум, это заполнить, но для этого вам нужно заранее знать размеры изображения.

Ответ 8

вы можете попробовать установить дополнение вместо высоты/ширины.

Ответ 9

Я могу думать о том, чтобы растянуть либо ширину, либо высоту, и позволить ей изменять размер в аспекте соотношения. По бокам будет пустое пространство. Что-то вроде того, как широкоэкранный дисплей отображает разрешение 1024x768.

Ответ 10

Все, что я сделал, это изменить таблицу стилей тега img. Но в моем случае я знал контейнер div и высоту. Также контейнер div с, высота была больше фактического размера изображения. Надеюсь, это поможет.

Работал для меня.

http://guntucomputerhacks.blogspot.com.au/2014/08/force-image-width-and-height-without.html

Ответ 11

Если использование flexbox является допустимым для вас вариантом (не нужно поддерживать старые браузеры), проверьте мой другой ответ здесь (который, возможно, является дубликатом этого):

В принципе, вам нужно будет обернуть тэг img в div, и ваш css будет выглядеть так:

.img__container {
    display: flex;
    padding: 15px 12px;
    box-sizing: border-box;
    width: 400px; height: 200px;

    img {
        margin: auto;
        max-width: 100%;
        max-height: 100%;
    }
}

Ответ 12

Вы можете использовать как ниже:

.width100 {
  max-width: 100px;
  height: 100px;
  width: auto;
  border: solid red;
}
<img src="https://www.gravatar.com/avatar/dc48e9b92e4210d7a3131b3ef46eb8b1?s=512&d=identicon&r=PG" class="width100" />