Как стать автором
Обновить

Скруглы — border-radius inset для картинок

Время на прочтение2 мин
Количество просмотров20K


Некоторое время назад появилась задача для дизайнера сделать стилизованный под дикий запад сайт. Мне, как верстальщику, пришла задача от дизайнера сделать картинки и некоторые бэкграунды, стилизованные под дикозападские вывески. На каждой странице в неизвестном количестве и неизвестных размеров. Задача усугублялась сложным фоном и необходимостью прозрачных дырок в изображениях. Т.е. нужно было использовать border-radius:inset, которого, как оказалось, не существует… Нарезать кучу картинок под каждую страницу и случай, само-собой, нереально и бессмысленно. Заказчик не был одним из «адептов explorer 6», поэтому я решил упростить себе жизнь связкой jQuery и HTML5.

Что получилось




Получился маленький jQuery плагинчик. Принцип предельно прост: по селектору находим нужные картинки, прячем, создаем рядом канвас с такими-же размерами, в который дублируется исходная картинка, дырявим. Плагин опционально принимает три параметра: массив радиусов скруглов (в пикселях), толщину бордюра и его цвет (если он нужен, конечно).

Пример:

	$(".block-4 img").borderRadiusInset({
		radius: [30,60,0,20],
		width: 10,
		color: "#00719e"
	});

В массив радиусов можно передать от одного до четырех значений, которые работают по тому же принципу, что и радиусы в css для border-radius:

  1. все радиусы одинаковы;
  2. первое значение — радиус левого верхнего и правого нижнего скругла, второе — оставшиеся;
  3. первое — левый верхий, второе — правый верхний и левый нижний, третье — правый нижний;
  4. каждому скруглу присвоен свой радиус, начиная с левого верхнего и дальше по часовой стрелке.

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

Почему для дырявого канваса ctx.globalCompositeOperation лучше, чем ctx.clip()




Собственно, и из картинки все понятно. Везде скруглы как скруглы, но в хроме при использовании ctx.clip() дырки в канвасе получаются со ступенчатыми рваными краями (в других браузерах все нормально). Решение нашлось тут. На этом ад перфекциониста закончился.

Ссылки


Пощупать пример: jsfiddle.net/53vq5pn1
Поковырять исходник: github.com/tegArt/border-radius-inset

Скруглы?*


* Последний абзац для передачи эмоций автора следует читать голосом Шелдона Купера и с соответствующей интонацией.

Да, скруглы. Круг плюс угол. Почему не кругл? Потомучто угол не кругл, а скруглен. «Кругл» — это прилагательное, и, в принципе, пончики тоже круглы. Но скругл — это новое слово в веб-разработке, облегчающее работу верстальщикам и дизайнерам, сокращая время донесения своих мыслей до коллег в среднем на 4 (четыре!) секунды в неделю. Я серьезен как никогда. Ребята, это прорыв.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какую формулировку вы будете использовать после прочтения статьи?
19.13% скругленный угол101
34.47% скругл!182
46.4% что тут вообще происходит?245
Проголосовали 528 пользователей. Воздержались 107 пользователей.
Теги:
Хабы:
+13
Комментарии20

Публикации

Истории

Работа

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн