Pointer-events CSS-селектор :not. Полезные примеры
На главную Наверх

24 января 2013

Списки и картинки с флоатами

css typography Комментарии

Обновлено 12 декабря 2015. Спустя три года после написания этого поста в голову пришло более простое и стабильное решение.

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

демка

Если картинка обтекает список, маркеры списка налазят на картинку
Проблема: если картинка обтекает список, то маркеры списка налазят на картинку

Старое решение

Эту проблему можно решить, но придется переписать все отступы для тегов ul, ol и li. Так как ul > li могут использоваться не только для текста с маркерами, но и для менюшек, слайдеров, списков новостей и других семантических конструкций, задавать стили напрямую тегам ol, ul и li опасно. Иначе в дальнейшем придется слишком часто эти стили обнулять. Поэтому создадим отдельный класс .textlist, чтобы ставить его на наши ul и ol.

.textlist {
    margin: 0;
    padding: 0;
}
.textlist > li {
    margin: 0;
    padding-left: 2em;
    list-style-position: inside;
    text-indent:-1em;
    overflow: hidden;
}

overflow: hidden  тут нам нужен для того, чтобы запретить тексту обтекание картинки по строкам внутри li. Теперь каждая li обтекает картинку как прямоугольный блок.

list-style-position: inside  чтобы втянуть маркер списка внутрь блока.

А всё остальное, чтобы отступы выглядели как раньше.

Маркеры списка не налазят на картинку
Маркеры списка больше не налазят на картинку

Новое решение

Обновлено 11 июня 2017. Пофикшен баг с наплывом маркеров на картинку при первой загрузке или когда выключен кэш.

Для списков, у которых нет классов, перенесём дефолтный отступ 2.5em с левого края на правый, а сами li сдвинем на те же 2.5em вправо при помощи transform: translateX(2.5em).

ul:not([class]),
ol:not([class]) {
    padding-left: 0;
    padding-right: 2.5em;
}
ul:not([class]) li,
ol:not([class]) li {
    transform: translateX(2.5em);
    animation: fixlists 1s;
}

@keyframes fixlists {
    0% {
        text-indent: -0.001em;
    }
    100% {
        text-indent: 0;
    }
}

Списки, не имеющие класса, мы выбираем, чтобы не повредить меню, слайдеры и прочие конструкции, которые используют ul li в своей структуре. Подробнее про это в посте про селектор :not().

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

Чтобы починить баг в Хроме, Опере и других браузерах на движке Blink, пришлось добавить невидимую анимацию. Она заставляет браузер пересчитать размеры элементов списка и поставить маркеры на место.

Живой пример:

See the Pen 2013-lists-and-floats by Paul Radzkov (@paulradzkov) on CodePen.

© Павел Радьков 2013.

Поделиться
Твитнуть
Плюсануть
Поделиться
Телеграфировать
  • 04 июля 2017

Как правильно использовать переменные в препроцессорах Less и Sass

  • 13 февраля 2016

Как верстальщику получить код ревью

  • 02 мая 2014

Веб-лицензии для платных шрифтов могут стоить вам дорого

  • 01 мая 2014

Бесплатная замена платному Helvetica Neue

  • 25 апреля 2014

Деплой Docpad-сайта на GitHub Pages

  • 07 апреля 2014

Краткое руководство по Маркдауну

  • 10 февраля 2014

О каких дизайнерах мечтают верстальщики

  • 09 февраля 2014

Захват экрана в GIF

  • 06 февраля 2014

Font-weight: bolder для шрифтов со множеством начертаний

  • 04 февраля 2014

Параметры subject и body в mailto ссылках

  • 26 января 2014

Посещённая ссылка при наведении

  • 19 января 2014

CSS-селектор :not. Полезные примеры

  • 24 января 2013

Списки и картинки с флоатами

  • 09 декабря 2012

Pointer-events

  • 27 ноября 2012

Как отключить javascript в Google Chrome

  • 28 октября 2012

Перечёркивание крест-накрест

  • 08 апреля 2012

Отладка мобильных сайтов в Webkit. Инспектор кода на мобильных устройствах

  • 18 марта 2012

Горячие клавиши для выбора предыдущего и следующего слоя в Photoshop

  • 11 марта 2012

HTML-сущности и их UTF-коды

  • 22 февраля 2012

Нарезка в Photoshop — New Layer Based Slice

  • 12 февраля 2012

Как перекрасить поля с автозаполнением в Google Chrome