Изображение Flex не будет уменьшаться с размером экрана, если контейнер является гиперссылкой - PullRequest
0 голосов
/ 26 мая 2018

Может кто-нибудь сообщить мне, если это недокументированная ошибка в flexbox, или я просто делаю это неправильно?У меня есть 3 изображения, выстроенные в ряд внутри контейнера Div.Это так же просто, как и все.

Без каких-либо гиперссылок все 3 изображения сжимаются идеально, как и должно быть.

<div style="width: 100%; margin: 0 auto; display: flex; justify-content: center;">
  <a href=""><img src="flash-tooltip.png"></a>
  <img src="html-tooltip.png">
  <img src="portables-tooltip.png">
</div>

Теперь только 2 из 3 изображений при просмотре навсе устройства корректно сжимаются в зависимости от максимального перетаскивания браузера в браузере или из окна просмотра.

Единственное изображение, которое не изменит форму или размер, - это изображение с гиперссылкой.Итак, я снял гиперссылку с первого изображения.И решил проверить это, поместив его на 2-е, теперь 1-е изображение и 3-е изображение хорошо сжимается.

Но, 2-е изображение остается точно такого же размера?Попытался затем добавить гиперссылки ко всем изображениям, и ни одно из них не изменилось в соответствии с шириной экрана?

Не ошибаюсь ли я, что сгибаемые элементы, если они являются изображениями, не будут сгибаться, если у них есть гиперссылка lol?Конечно, это не может быть так, верно?

Ответы [ 4 ]

0 голосов
/ 27 мая 2018

Я добавил свое полное рабочее решение.Благодаря многим людям здесь дают свои различные методы.Так что это для всех, кто может бороться.

Сначала давайте настроим стиль.

<style>

img {
max-width: 100%;
width: 100%;
min-width: 0;
min-height: 0;
}

</style>

добавление min-width: 0; | min-height: 0; кажется излишним, но с хромом он работает намного лучше, чем установка их на автоматический режим;

Поскольку он использует flexbox, мы не добавляем обычный ширина: 33,33%; , даже если есть 3 изображения.В flexbox это просто разнесет их далеко друг от друга в пределах 100% ширины.

Вот действительно важная часть, которую я нашел трудным путем.

Вы должны использовать width: 100% на изображениях или max-width:100%; в противном случае (в Chrome без добавления либо 100% ширины, либо максимальной ширины: 100%; он просто не будет сгибаться / сжиматься, когда вы свернете браузер для проверки его отзывчивости.)

Итак, чтобы сохранить каждое из 3 изображений в идеальном соотношении сторон, не забудьте включить каждое изображение в свой собственный контейнер div.В противном случае они сжимаются, но просто наклоняются друг к другу, как и они.

Как вы можете видеть, первое изображение даже обернуто в гиперссылку, но, поскольку оно находится внутри своего собственного div, оно будет уменьшаться и расти полностью на одном уровне с другими изображениями.Это позволяет сэкономить при использовании дополнительной разметки и сохранить добавление тега span, а затем сделать его гибким контейнером для гиперссылки.Я пробовал оба способа, это гораздо более простой метод.

Я использовал встроенные стили для контейнера flexbox. (вредная привычка.)

<div style="border: 2px solid red; margin: 0 auto; display: flex; justify-content: center;">

<div>
<a href=""><img src="flash-tooltip.png"></a>
</div>

<div>
<img src="html-tooltip.png">
</div>

<div>
<img src="portables-tooltip.png">
</div>
</div>

Не забудьте закрыть этот последний / div, это настоящий улов!

И вот как ямы сделали этоПротестировано во многих браузерах работает отлично.Даже на мобильных телефонах и планшетах.

Если вам не нравится flexbox?Вы можете сделать то же самое, используя обычные поплавки. Я включил тот же метод, что и выше, только на этот раз в float: version.

0 голосов
/ 26 мая 2018

Не знаю почему, но это решает проблему.Я хотел бы знать, почему, поскольку я не могу найти какую-либо информацию об этой проблеме ни в одном документе HTML / CSS.

Если добавить следующее.

<style>

    img {
    max-width: 100%;
    height: auto;
    }
</style>

Тогда все 3 изображения будут мигатьв совершенстве.Даже если у них есть гиперссылки.Забавно, если вы установите только ширину: 100%;тогда изображение с гиперссылкой остается точно такого же размера, как и изображение, а все остальные без гиперссылок увеличиваются до 100% размера контейнера.

Я не знал, что у flexbox были такие правила, которые требовали от вас установки максимальной ширины изображения, чтобы элементы реагировали / уменьшались, если к ним была прикреплена гиперссылка.

Итак, попробовал это в chrome: Только изображение теперь с якорем сжимается вниз, остальные 2 остаются прежнего размера.FireFox все 3 сжимается, но хром только сжимает изображение с гиперссылкой, обернутой вокруг него.

Попробовал обтекание гиперссылок вокруг каждого из двух других изображений и в хром, все они хорошо сжимаются.

Может кто-нибудь объяснить, что происходит?Как я могу установить максимальную ширину: и высоту: авто для гиперссылки?

0 голосов
/ 26 мая 2018

Проблема не имеет ничего общего с гиперссылками.Вы можете обернуть изображение в любой элемент (попробуйте span или div), и оно будет иметь тот же эффект, что и контейнер a.

Проблема заключается в иерархической структуре гибкого контейнера..

Когда вы устанавливаете элемент на display: flex (или inline-flex), вы устанавливаете гибкий контейнер.

Только дочерние элементы гибкого контейнера являются гибкими элементами. Потомки гибкого контейнера за пределами дочерних элементов не являются элементами сгибания и не принимают свойства сгиба.

Вот три элемента сгиба:

  • <a href=""><img src="flash-tooltip.png"></a>
  • <img src="html-tooltip.png">
  • <img src="portables-tooltip.png">

img в первом элементе не является гибким элементом.Он обернут элементом a и, следовательно, является дочерним элементом элемента flex.

Два элемента img могут сжаться из-за двух настроек по умолчанию для контейнера flex:

  1. flex-wrap: nowrap ~ гибкие элементы вынуждены оставаться на одной строке
  2. flex-shrink: 1 ~гибкие элементы могут сжиматься, чтобы не допустить их переполнения контейнера

При переключении на flex-wrap: wrap и / или flex-shrink: 0 элементы img больше не будут сжиматься.

Элемент a не сжимается из-за другой настройки по умолчанию: min-width: auto, что означает, что гибкие элементы не могут быть меньше размера их содержимого.В этом случае элемент a не может сжаться ниже ширины изображения.

Вы можете переопределить этот параметр, добавив min-width: 0 к своему коду.

#container {
  display: flex;
}

span {
  min-width: 0;
  display: flex;
}

img {
  min-width: 0;
}
<div id="container">
  <span><img src="http://i.imgur.com/60PVLis.png"></span>
  <img src="http://i.imgur.com/60PVLis.png">
  <img src="http://i.imgur.com/60PVLis.png">
</div>

Дополнительная информация:

0 голосов
/ 26 мая 2018

Трудно сказать, не видя свой CSS, но вы, вероятно, не выбираете изображения в тегах <a>.Если вы измените свой CSS, чтобы выбрать изображения, которые находятся внутри тегов <a>, он должен работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...