@leeroyjenkins176

Как решить проблему с узкой шириной текста возле float элементов?

Представьте - контент менеджер добавляет статью, в которой есть фото с float: left/right. Размер фото может быть любой. При определенной ширине контейнера возникнет ситуация, что сбоку от фото ширина текста будет в 1-2 слова, что смотрится плохо.
Я искал решение этой проблемы и нашел такой вариант https://css-tricks.com/minimum-paragraph-widths/. Но в нем есть два минуса: у следующего после фото элемента уже может быть свой псевдоэлемент; а также фото так и остается прижатым к краю. В идеале после переноса текста вниз его нужно центрировать.
У меня была идея сделать обертку вокруг фото и при определенных условиях применить ей ширину 100%, тем самым сдвинув текст вниз. При этот само фото можно отцентрировать с помощью text-align:center у обертки. Но как это сделать толкьо на css без js я так и не придумал. Была надежда на контейнерные запросы и какие-то современные свойства, но все без результатно.
Как вы решаете эту задачу?
Сразу скажу, что просто отменять float на определенных брейкпоинтах не вариант. Некоторые фото могут быть или очень маленькими, где это не нужно. Или очень большими, где даже без медиазапросов не должно быть обтекания. Вариант с js тоже не рассматриваю.
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
Aetae
@Aetae
Тлен
Накидал такую хрень, с использованием трюка с распоркой и тюка с translate:
(потыкай в 0.5x\1x)
Работает только если ширина контейнера известна(здесь 100vw).

Но хз, на самом деле, наверное на js будет проще.:)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
delphinpro
@delphinpro Куратор тега CSS
frontend developer
Как вы решаете эту задачу?


Вправляем мозги менеджеру-контентщику.

Если он видит, что картинка криво смотрится, то пусть будет любезен в редакторе админки выставить ей центрирование вместо обтекания.
Ответ написан
grantur5707
@grantur5707
Full Stack Web Developer
Можно попробовать использовать комбинацию float с псевдоклассом :has() для проверки ширины контейнера или текста, рядом с которым располагается изображение.

.container:has(.image) {
  display: block;
}

.container:has(.image:only-child) {
  text-align: center;
}

.container:has(.image) p {
  display: inline-block;
  min-width: 150px;
  width: calc(100% - 200px);
}

.image {
  float: left;
  max-width: 150px;
  margin: 0 10px 10px 0;
}

.container:has(.image) p:not(:only-child) {
  clear: both;
  display: block;
  text-align: center;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы