Мне нужно, чтобы это изображение растянулось до максимально возможного размера без переполнения. <div>
и не искажая изображение.
Я не могу предсказать соотношение сторон изображения, поэтому нет способа узнать, использовать ли:
<img src="url" style="width: 100%;">
или
<img src="url" style="height: 100%;">
Я не могу использовать оба (то есть style = "width: 100%; height: 100%;"), потому что это растянет изображение, чтобы соответствовать <div>
.
<div>
Имеет набор размер, процент экрана, который также непредсказуема.
Ответы:
Обновление 2016:
Современный браузер ведет себя намного лучше. Все, что вам нужно сделать, это установить ширину изображения на 100% ( демо )
Поскольку вы не знаете соотношение сторон, вам придется использовать некоторые сценарии. Вот как я мог бы сделать это с помощью jQuery ( демо ):
CSS
HTML
скрипт
источник
width:auto
илиheight:auto
свойства не влияет на отображение ваших изображений. На самом деле, из всех свойств, которые вы применяете к изображению, онmax-width: 100%
имеет только какой-либо эффект и влияет только на ландшафтное изображение. Но самое главное, ваш ответ не помогает растянуть маленькое изображение, чтобы заполнить большую емкость.Существует гораздо более простой способ сделать это , используя только
CSS
иHTML
:HTML:
CSS:
Это поместит ваше изображение в качестве фона, и растянет его, чтобы соответствовать
div
размеру без искажений.источник
background-size: cover;
Здесь есть настоящее волшебство, и это CSS3, но он имеет разумную поддержку браузера в самых последних версиях (см. w3schools.com/cssref/css3_pr_background-size.asp )<div style="background-image: url('path/to/image.jpg');" class="fill"></div>
background-size: cover
не поддерживает соотношение сторон, части изображения, которые не пропорциональны элементу, обрезаются. Смотрите здесьНе идеальное решение, но этот CSS может помочь. Масштабирование - это то, что заставляет этот код работать, и теоретически этот коэффициент должен быть бесконечным, чтобы идеально работать для небольших изображений - но 2, 4 или 8 работают нормально в большинстве случаев.
источник
zoom
любви от Firefox !?zoom
реализован, но вот ссылка на ошибку для дальнейшего использования: bugzilla.mozilla.org/show_bug.cgi?id=390936Если можете, используйте фоновые изображения и установите
background-size: cover
. Это сделает фон покрывающим весь элемент.CSS
Если вы застряли с использованием встроенных изображений, есть несколько вариантов. Во-первых, есть
Объект посадки
Это свойство действует на изображения, видео и другие объекты, похожие на
background-size: cover
.CSS
К сожалению, поддержка браузера не так хороша, поскольку IE до версии 11 вообще не поддерживает ее. Следующая опция использует jQuery
CSS + jQuery
HTML
CSS
Пользовательский плагин jQuery
Используйте плагин, как это
Это возьмет изображение, установит его как фоновое изображение на элементе обертки изображения и удалит
img
тег из документа. Наконец, вы могли бы использоватьЧистый CSS
Вы можете использовать это как запасной вариант. Изображение будет увеличиваться, чтобы покрыть его контейнер, но не будет уменьшаться.
CSS
Надеюсь, это может кому-то помочь, счастливое кодирование!
источник
min-
и изменил наwidth: 100%; height: 100%;
и работаю! отличное решение! +1 Спасибо!background-size: contain
также полезно, если вы не хотите, чтобы изображение было обрезано.zoom:0.001
в решение Pure CSS, чтобы уменьшить масштаб.Благодаря CSS3
https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit
IE и EDGE как всегда аутсайдеры: http://caniuse.com/#feat=object-fit
источник
Обновление 2019.
Теперь вы можете использовать
object-fit
свойство css, которое принимает следующие значения:fill | contain | cover | none | scale-down
https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit
Например, у вас может быть контейнер с изображением.
источник
Это невозможно только с помощью HTML и CSS, или, по крайней мере, дико экзотично и сложно. Если вы готовы добавить немного javascript, вот решение с использованием jQuery:
Это изменит размер изображения так, чтобы оно всегда помещалось внутри родительского элемента, независимо от его размера. И как это связано с
$(window).resize()
событием, когда пользователь изменяет размер окна, изображение будет корректироваться.Это не пытается центрировать изображение в контейнере, это было бы возможно, но я думаю, это не то, что вам нужно.
источник
Установите ширину и высоту внешнего
container
div. Затем используйте стиль ниже на img:Это поможет вам сохранить соотношение сторон вашего img
источник
Если вы хотите установить максимальную ширину или высоту (чтобы она не была очень большой) при сохранении соотношения сторон изображения, вы можете сделать это:
источник
Я сталкивался с этим вопросом в поисках проблемы симуляции. Я делаю веб-страницу с адаптивным дизайном, и ширина элементов, размещенных на странице, установлена в процентах от ширины экрана. Высота задается значением vw.
Так как я добавляю посты с помощью PHP и базы данных, чистый CSS не может быть и речи. Однако я нашел решение jQuery / javascript немного сложным, поэтому я придумал аккуратное (по крайней мере, я так думаю) решение.
HTML (или PHP)
При использовании style = "" можно сделать так, чтобы PHP динамически обновлял мою страницу, а CSS-стиль вместе со style = "" в конечном итоге получился бы идеально покрытым изображением, масштабируемым для покрытия динамического тега div.
источник
Вы можете использовать
object-fit: cover;
на родительском div.https://css-tricks.com/almanac/properties/o/object-fit/
источник
Чтобы растянуть это изображение до максимально возможного размера, не переполняя его или не смещая изображение.
Подать заявление...
стили к изображению.
источник
Используя этот метод, вы можете заполнить ваш div с изменяющимся соотношением изображений и div.
JQuery:
HTML:
CSS:
источник
Это помогло мне
источник
если вы работаете с тегом IMG, это легко.
Я сделал это:
но я не нашел, как заставить это работать с #pic {background: url (img / menu.png)} Enyone? Спасибо
источник
У меня была похожая проблема. Я решил это только с помощью CSS .
В основном
Object-fit: cover
помогает вам решить задачу поддержания соотношения сторон при размещении изображения внутри div.Но проблема была
Object-fit: cover
том, что в IE не работало, и оно занимало 100% ширины и 100% высоты, а соотношение сторон было искажено. Другими словами, эффекта увеличения изображения не было, что я видел в Chrome.Подход, который я выбрал, состоял в том, чтобы расположить изображение внутри контейнера с абсолютным, а затем поместить его прямо в центр, используя комбинацию:
Как только он в центре, я даю изображение,
Это заставляет изображение получить эффект Object-fit: cover.
Вот демонстрация вышеуказанной логики.
https://jsfiddle.net/furqan_694/s3xLe1gp/
Эта логика работает во всех браузерах.
источник
HTML:
JSFiddle
... И если вы хотите установить или изменить изображение (на примере #foo):
JQuery:
JavaScript:
источник
Многие решения, найденные здесь, имеют некоторые ограничения: некоторые не работают в IE (объектно-ориентированный) или более старых браузерах, другие решения не масштабируют изображения (только уменьшают его), многие решения не поддерживают изменение размера окна, и многие не универсальный, ожидайте фиксированного разрешения или макета (книжная или альбомная)
Если использование javascript и jquery не является проблемой, у меня есть это решение на основе кода @Tatu Ulmanen. Я исправил некоторые проблемы и добавил код на случай, если изображение загружено динамически и недоступно в начале. По сути, идея состоит в том, чтобы иметь два разных правила CSS и применять их при необходимости: одно, когда ограничение является высотой, поэтому нам нужно показать черные полосы по бокам, и другое правило CSS, когда ограничение является шириной, поэтому нам нужно показать черные полосы сверху / снизу.
Для такого элемента HTML, как:
источник