CSS-изображение изменяет размер в процентах от себя?
Я пытаюсь изменить размер img с процентом от себя. Например, я просто хочу уменьшить изображение наполовину, изменив его размер до 50%. Но применяя width: 50%; изменит размер изображения на 50% от элемента контейнера (родительский элемент, который может быть <body> например).
вопрос в том, Могу ли я изменить размер изображения с процентом без использования JavaScript или серверный? (У меня нет прямой информации о размере изображения)
Я уверен, что вы не могу этого сделать, но я просто хочу посмотреть, есть ли интеллектуальное решение только для CSS. Спасибо!
9 ответов:
у меня есть 2 способа для вас.
Способ 1. демо на jsFiddle
этот метод изменяет размер изображения только визуально, а не фактические размеры в DOM, и визуальное состояние после изменения размера по центру в середине исходного размера.
html:
<img class="fake" src="example.png" />css:
img { -webkit-transform: scale(0.5); /* Saf3.1+, Chrome */ -moz-transform: scale(0.5); /* FF3.5+ */ -ms-transform: scale(0.5); /* IE9 */ -o-transform: scale(0.5); /* Opera 10.5+ */ transform: scale(0.5); /* IE6–IE9 */ filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.9999619230641713, M12=-0.008726535498373935, M21=0.008726535498373935, M22=0.9999619230641713,SizingMethod='auto expand'); }поддержка браузера Примечание: статистика браузеров показала встроенный
css.Способ 2. демо на jsFiddle
html:
<div id="wrap"> <img class="fake" src="example.png" /> <div id="img_wrap"> <img class="normal" src="example.png" /> </div> </div>css:
#wrap { overflow: hidden; position: relative; float: left; } #wrap img.fake { float: left; visibility: hidden; width: auto; } #img_wrap { position: absolute; top: 0; right: 0; bottom: 0; left: 0; } #img_wrap img.normal { width: 50%; }Примечание:
img.normalиimg.fakeто же самое изображение.
поддержка браузера Примечание: этот метод будет работать во всех браузерах, потому что все браузеры поддерживаютcssсвойства, используемые в методе.метод работает в этом образом:
- ' # wrap 'и' #wrap img.поддельные ' есть
flow#wrapиoverflow: hiddenустановить#wrapразмеры идентичны внутреннему изображению (img.fake)img.fakeэто только один элемент безabsoluteилиfixв должности#wrapчтобы не нарушить результат второго шага.#img_wrapиabsoluteустановки внутри#wrapи расширен по размеру до всего элемента (#wrap)- результат четвертого шага
#wrap_imgте же размеры, что и изображение.- используя
responsive imagesметод setwidth: 50%;наimg.normalи теперь вы получили ваш результат.
HTML:
<span> <img src="example.png"/> </span>CSS:
span { display: inline-block; } img { width: 50%; }это должно быть одним из самых простых решений с использованием подхода контейнерных элементов.
при использовании подхода элемента контейнера этот вопрос является вариацией этот вопрос. Хитрость заключается в том, чтобы позволить контейнерному элементу сжимать дочернее изображение, поэтому он будет иметь размер, равный размеру некрупного изображения. Таким образом, при установке
widthсвойство изображения в процентах, изображение масштабируется относительно исходного масштаба.некоторые другие свойства и значения свойств, разрешающие термоусадочную упаковку:
float: left/right,position: fixedиmin/max-width, как уже упоминалось в связанном вопросе. Каждый из них имеет свои побочные эффекты, ноdisplay: inline-blockбыло бы более безопасным выбором. Мэтт упомянулfloat: left/rightв своем ответе, но он ошибочно приписал этоoverflow: hidden.
Edit: как упоминалось троян, вы также можете воспользоваться недавно введенным CSS3 внутренний и внешний модуль калибровки:
HTML:
<figure> <img src="example.png"/> </figure>CSS:
, не все популярные версии браузеров поддерживают его на момент написания статьи.figure { width: intrinsic; } img { width: 50%; }
попробовать
zoomсвойства<img src="..." style="zoom: 0.5" />Edit: по-видимому, FireFox не поддерживает
zoomсобственность. Вы должны использовать;-moz-transform: scale(0.5);для FireFox.
это на самом деле возможно, и я обнаружил, как совершенно случайно при разработке моего первого крупномасштабного адаптивного дизайна сайта.
<div class="wrapper"> <div class="box"> <img src="/logo.png" alt=""> </div> </div> .wrapper { position:relative; overflow:hidden; } .box { float:left; } //Note: 'float:right' would work too .box > img { width:50%; }переполнение: скрытый дает высоту и ширину обертки, несмотря на плавающее содержимое, без использования взлома clearfix. Затем вы можете разместить свой контент с помощью полей. Вы даже можете сделать оболочку div встроенным блоком.
другое решение заключается в использовании:
<img srcset="example.png 2x">Он не будет проверять, потому что
srcатрибут является обязательным, но он работает (за исключением любой версии IE, потому чтоsrcsetне поддерживается).
Я думаю, что вы правы, это просто невозможно с чистым CSS, насколько я знаю (не кросс-браузер я имею в виду).
Edit:
хорошо, мне не очень понравился мой ответ, поэтому я немного озадачился. Возможно, я нашел интересную идею, которая могла бы помочь.. может быть, это возможно в конце концов (хотя и не самая красивая вещь когда-либо):
изменить: Протестировано и работает в Chrome, FF и IE 8&9. . Он не работает в IE7.
html:
<div id="img_wrap"> <img id="original_img" src="http://upload.wikimedia.org/wikipedia/en/8/81/Mdna-standard-edition-cover.jpg"/> <div id="rescaled_img_wrap"> <img id="rescaled_img" src="http://upload.wikimedia.org/wikipedia/en/8/81/Mdna-standard-edition-cover.jpg"/> </div> </div>css:
#img_wrap { display: inline-block; position:relative; } #rescaled_img_wrap { width: 50%; } #original_img { display: none; } #rescaled_img { width: 100%; height: 100%; }
function shrinkImage(idOrClass, className, percentShrinkage){ 'use strict'; $(idOrClass+className).each(function(){ var shrunkenWidth=this.naturalWidth; var shrunkenHeight=this.naturalHeight; $(this).height(shrunkenWidth*percentShrinkage); $(this).height(shrunkenHeight*percentShrinkage); }); }; $(document).ready(function(){ 'use strict'; shrinkImage(".","anyClass",.5); //CHANGE THE VALUES HERE ONLY. });это решение использует js и jquery и изменяет размер только на основе свойств изображения, а не на родительском. Он может изменить размер одного изображения или группы на основе параметров класса и идентификатора.
для получения дополнительной информации, перейдите сюда:https://gist.github.com/jennyvallon/eca68dc78c3f257c5df5
Это очень старый поток, но я нашел его во время поиска простого решения для отображения retina (high res) Screen capture на стандартном дисплее разрешения.
Так что есть только HTML решение для современных браузеров :
<img srcset="image.jpg 100w" sizes="50px" src="image.jpg"/>это говорит браузеру, что изображение в два раза больше размера его предполагаемого размера дисплея. Значения пропорциональны и не должны отражать фактический размер изображения. Можно также использовать 2w 1px для достижения того же эффекта. Атрибут src используется только устаревшими браузерами.
хороший эффект заключается в том, что он отображает тот же размер на сетчатке или стандартном дисплее, сокращаясь на последнем.
это не трудный подход:
<div> <img src="sample.jpg" /> </div> then in css: div { position: absolute; } img, div { width: ##%; height: ##%; }
Comments