Я пытаюсь изменить размер img в процентах от себя. Например, я просто хочу уменьшить изображение вдвое, изменив его размер до 50%. Но применение width: 50%;
приведет к изменению размера изображения до 50% элемента контейнера (например, родительского элемента <body>
).
Вопрос в том, могу ли я изменить размер изображения в процентах от самого себя без использования javascript или серверной части? (У меня нет прямой информации о размере изображения)
Я почти уверен, что вы не можете этого сделать, но я просто хочу посмотреть, есть ли интеллектуальное решение только для CSS. Спасибо!
width: <number>%
. Я не думаю, что есть способ сделать это!Ответы:
У меня для вас есть 2 метода.
Метод 1. демонстрация на jsFiddle
Этот метод изменяет размер изображения только визуально, а не его фактические размеры в DOM, а визуальное состояние после изменения размера центрируется в середине исходного размера.
html:
css:
Примечание о поддержке браузера : статистика браузеров отображается в формате
css
.Метод 2. демонстрация на jsFiddle
html:
css:
Примечание:
img.normal
иimg.fake
это то же изображение.Примечание о поддержке браузера: этот метод будет работать во всех браузерах, поскольку все браузеры поддерживают
css
свойства, используемые в методе.Метод работает так:
#wrap
и#wrap img.fake
есть поток#wrap
имеетoverflow: hidden
так, что его размеры идентичны внутреннему изображению (img.fake
)img.fake
единственный элемент внутри#wrap
безabsolute
позиционирования, чтобы он не нарушал второй шаг#img_wrap
имеетabsolute
позиционирование внутри#wrap
и распространяется по размеру на весь элемент (#wrap
)#img_wrap
же размер, что и изображение.width: 50%
наimg.normal
ее размер50%
из#img_wrap
, и , следовательно ,50%
от размера исходного изображения.источник
transform:scale()
решения есть большая проблема. Он плохо взаимодействует с блочной моделью CSS. Я имею в виду , что он не взаимодействует с ним на всех , так что вы получите макет , который выглядит все неправильно. См .: jsfiddle.net/kahen/sGEkt/8HTML:
CSS:
Это должно быть одно из самых простых решений с использованием подхода контейнерных элементов.
При использовании подхода контейнерных элементов этот вопрос является вариацией этого вопроса . Хитрость заключается в том, чтобы позволить элементу-контейнеру обернуть дочернее изображение таким образом, чтобы его размер был равен размеру изображения без размера. Таким образом, при установке
width
свойства изображения в виде процентного значения, изображение масштабируется относительно его исходного масштаба.Некоторые из других термоусадки включения свойств и значений свойств являются:
float: left/right
,position: fixed
иmin/max-width
, как уже упоминались в связанном вопросе. У каждого есть свои побочные эффекты, ноdisplay: inline-block
это более безопасный выбор. Мэтт упомянулfloat: left/right
в своем ответе, но он ошибочно приписал этоoverflow: hidden
.Демо на jsfiddle
Изменить: как упоминалось трояном , вы также можете воспользоваться недавно введенным модулем внутреннего и внешнего изменения размеров CSS3 :
HTML:
CSS:
Однако на момент написания не все популярные версии браузеров поддерживают его .
источник
<img src="https://www.google.com/images/srpr/logo11w.png"/>
CSS:img { display: inline-block; width: 15%; }
figure
этоwidth: fit-content;
как сейчас. Поддержка браузеров сегодня также намного лучше.Попробуйте
zoom
недвижимостьИзменить: по-видимому, FireFox не поддерживает
zoom
свойство. Вы должны использовать;для FireFox.
источник
Другое решение - использовать:
Он не будет проверяться, потому что
src
атрибут является обязательным, но он работает (за исключением любой версии IE, посколькуsrcset
он не поддерживается).источник
Это на самом деле возможно, и я обнаружил это совершенно случайно, когда разрабатывал свой первый крупномасштабный сайт с адаптивным дизайном.
Параметр overflow: hidden дает высоту и ширину оболочки, несмотря на плавающее содержимое, без использования взлома clearfix. Затем вы можете позиционировать свой контент, используя поля. Вы даже можете сделать div-обертку встроенным блоком.
источник
Это очень старый поток, но я нашел его, когда искал простое решение для отображения снимка экрана сетчатки (высокого разрешения) на дисплее со стандартным разрешением.
Итак, для современных браузеров существует решение только для HTML:
Это говорит браузеру, что размер изображения в два раза превышает предполагаемый размер экрана. Значения пропорциональны и не обязательно должны отражать фактический размер изображения. Можно также использовать 2w 1px для достижения того же эффекта. Атрибут src используется только устаревшими браузерами.
Приятным эффектом является то, что на сетчатке или стандартном дисплее отображается тот же размер, а на последнем он уменьшается.
источник
Это решение использует js и jquery и меняет размер только в зависимости от свойств изображения, а не от родителя. Он может изменять размер одного изображения или группы на основе параметров class и id.
для получения дополнительной информации перейдите сюда: https://gist.github.com/jennyvallon/eca68dc78c3f257c5df5
источник
Это несложный подход:
источник
На самом деле большинство ответов здесь на самом деле не масштабируют изображение по ширине самого себя .
Нам нужно иметь ширину и высоту auto для самого
img
элемента, чтобы мы могли начать с его исходного размера.После этого элемент контейнера может масштабировать изображение за нас.
Простой пример HTML:
А вот правила CSS. В этом случае я использую абсолютный контейнер:
Вы можете настроить расположение изображения с помощью таких правил, как
transform: translate(0%, -50%);
.источник
Я думаю, вы правы, насколько я знаю, это невозможно с чистым CSS (я имею в виду не кроссбраузерность).
Редактировать:
Хорошо, мне не очень понравился мой ответ, поэтому я немного озадачился. Я мог бы найти интересную идею, которая могла бы помочь ... может быть, это все-таки возможно (хотя и не самая красивая вещь на свете):
Изменить: протестировано и работает в Chrome, FF и IE 8 и 9. . Это не работает в IE7.
пример jsFiddle здесь
html:
css:
источник
inline-block
, поэтому ширина#img_wrap
зависит не только от внутренней ширины html, но и от ширины контекстного контейнера.