Отладка мобильных сайтов в Webkit. Инспектор кода на мобильных устройствах Как отключить javascript в Google Chrome
На главную Наверх

28 октября 2012

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

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

Итак, задача: перечеркнуть слово или блок текста или картинку диагональными линиями крест-накрест. Нам поможет SVG.

Демка

Напишем стили для строчного тега del и подготовим класс для перечёркивания блочных элементов .del-cross.

del.cross {
    display:inline-block; /* запрещает перенос текста на следующую строку */
    text-decoration:none;
    position:relative;
}

.del-cross {
    display:block;
    position:relative;
    overflow:hidden; /* запрещает обтекать другие блоки */
}

del.cross:before,
.del-cross:before {
    content:'';
    position:absolute;
    display:block;
    width:auto;
    height:auto;
    left:0;
    top:0;
    right:0;
    bottom:0;
    background: rgba(0,0,0,0) url(cross.svg) no-repeat;
    background-size:100% 100%; /* растягивает фон на всю ширину и высоту блока */
}

Примечание: лучше использовать :before, так как на :after может быть clearfix.

Пример:

See the Pen 2012-crosswise-demo by Paul Radzkov (@paulradzkov) on CodePen.

Для картинок класс .del-cross нужно ставить на их обёртку. Тег img не имеет псевдокласса :before.

А теперь посмотрим, что внутри SVG-файла, и как настроить цвет и толщину линий.

cross_old.svg:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="none" style="stroke: rgba(255,0,0,0.9); stroke-width: 1.5" >
    <line x1="0" y1="0"   x2="100" y2="100" vector-effect="non-scaling-stroke" />
    <line x1="0" y1="100" x2="100" y2="0"   vector-effect="non-scaling-stroke" />
</svg>

viewBox="0 0 100 100" — задает виртуальный размер картинки 100×100 безразмерных единиц. Формат записи: x1 y1 x2 y2.

preserveAspectRatio="none" — отключает сохранение пропорций при масштабировании.

vector-effect="non-scaling-stroke" — чтобы толщина линий не зависела от размеров картинки. К сожалению, не работает в IE9 и IE10.

style="stroke: rgba(255,0,0,0.9); stroke-width: 1.5" — цвет линий можно задавать как в hex, так и в rgba с прозрачностью, а толщину линий делать дробной.

Поддержка браузерами

SVG не поддерживается IE8 и ниже. Да и в IE9-IE10 толщина линий изменяется пропорционально размерам перечёркиваемого блока, что есть баг. Есть решение.

Для браузеров, не поддерживающих SVG, можно сделать деградацию с помощью условных комментариев или наоборот, используя Modernizer, сделать прогрессивное улучшение только для тех, кто умеет отображать SVG.

Обновлено 9 апреля 2013

В комментариях GreLI подсказал, что SVG-файл можно сократить до такого вида (cross.svg):

<svg xmlns="http://www.w3.org/2000/svg" style="stroke: rgba(255,0,0,0.9); stroke-width: 1.5" >
    <line x1="0" y1="0"    x2="100%" y2="100%" />
    <line x1="0" y1="100%" x2="100%" y2="0"    />
</svg>

Задавая координаты линий в процентах, мы избавляемся от необходимости применять vector-effect="non-scaling-stroke", который не работает в IE9 и IE10.

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

Поделиться
Твитнуть
Плюсануть
Поделиться
Телеграфировать
  • 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