Содержание

11. Скругления и тени · Неожиданный HTML

В 2008 году, чтобы сделать скругленный прямоугольник, приходилось рисовать в графическом редакторе четыре накладки на каждый угол прямоугольника и потом позиционированием накладывать их на каждый из углов. Не проходило и пол часа как Ваша кнопочка со скругленными краями была готова. Теперь нужно было отключить ложные клики по краям, и да: всё это можно было сделать только на однотонном фоне, иначе накладки были видны. А потом появилось свойство border-radius.

border-radius – задает радиус скругления

Представим что у нас есть прямоугольник. Например

.block {
     width:100px;
     height:100px;
     background:purple;
}

Добавим к нему скругление в 10px по краям

border-radius:10px;

Получим фиолетовый квадрат со скруглениями по краям

.block {
     width:100px;
     height:100px;
     background:purple;
     border-radius:10px;
}

Можно задавать скругление отдельно по углам

border-radius:5px 10px 15px 20px;

Если хотим получить круг ставим border-radius:50% у квадрата

Можно задавать скругление ввиде эллипса

border-radius: 10px/20px;

10px — горизонтальный радиус 20px — вертикальный радиус

Если поиграться с настройками, то можно получить даже полукруг.

.semi_circle {
     width:200px;
     height:100px;
     border-radius:50% 50% 50% 50% / 0% 0% 100% 100%;
}

Полезное чтиво:

  1. CSS-tricks о border-radius https://css-tricks.com/almanac/properties/b/border-radius/
  2. Очень подробно разобрано, что мы можем сделать, используя border-radius https://m.habr.com/company/ruvds/blog/426731/ оригинальная статья https://9elements.com/io/css-border-radius/

  3. О свойстве box-decoration-break https://developer.mozilla.org/en-US/docs/Web/CSS/box-decoration-break

  4. Генератор border-radius’ов https://9elements.github.io/fancy-border-radius/#0.49.0.51—.

box-shadow — задает тень у объекта

Логика этого свойства следующая: представим, что у под каждым объектом находится тень. Она по размерам ровно соотвествует размерам блока, поэтому её не видно. Свойство box-shadow занимается тем, что может сместить тень относительно объекта(первые два свойства), размыть её(при этом тень увеличится, но края будут нерезкими), а также сделать тень больше(или меньше, если значения отрицательные), чем сам объект.

box-shadow: 1px 2px 3px 4px #ccc;

1px – смещение слева
2px – смещение сверху
3px – радиус размытия
4px – увеличение размеров тени (padding для тени)

Цвет тени лучше делать полупрозрачным через rgba

Множественные тени

Можем сделать несколько теней и сымитировать несколько границ у объекта.

box-shadow: 0px 0px 0px 10px #c00,
            0px 0px 0px 20px #00c;

Внутренняя тень

Добавление параметра inset создает внутреннюю тень. Позволяет сгенерировать эффект вдавленности.

box-shadow: inset 0 0 10px #000000;

Подробнее:
https://css-tricks.com/almanac/properties/b/box-shadow/

http://www.w3schools.com/css/css3_shadows.asp

text-shadow

Мы можем задать тень для текста

text-shadow: 0 0 3px #FF0000;

Полезное чтиво:

  1. Эффекты для текста: http://enjoycss.com/gallery/text_effects/ec

  2. Пример с вдавленным текстом https://wp-lessons.com/vnutrennyaya-ten-teksta-v-css

  3. Пример с внутренней тенью для текста https://codepen.io/adambundy/pen/HtmaK

  4. Дизайн-тренды, которые уже не в моде http://designshack.net/articles/graphics/5-former-design-trends-that-arent-cool-anymore-so-stop-using-them/

  5. О применении свойства background-clip:text https://webplatform.news/issues/2018-11-02

Практика:

  1. Выводим круглый аватар с двумя каемочками
  2. Сделать ghost-button
  3. Сделать «простроченный» элемент
  4. Верстаем страницу «профиль пользователя» в стиле iOS (круглый аватар, ссылка в прозрачном блоке)
  5. Делаем фотографию с внутренней тенью https://habrahabr.ru/post/154211/
  6. Делаем retro-эффект для текста http://enjoycss.com/gallery/text_effects/ec

  7. Делаем текст с эффектом вдавленности text-shadow (вариант с background-clip:text)

  8. Верстаем шаблон
  9. Верстаем шаблон формы залогинивания сервиса Zeplin. input’ы заменяем на div’ы

Нестандартные тени CSS | Vaden Pro

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

Сегодня мы рассмотрим несколько способов задания нетривиальной тени при помощи CSS3.

Да ну, может проще картинкой?

У Вас может возникнуть вопрос, зачем же играться с кодом, если даже начинающий пользователь Photoshop умеет создавать самые разнообразные эффекты тени? Запилить картинку, залить на сервер. Делов то…

С одной стороны оно конечно так, но, как говорит неевклидовая геометрия, прямолинейный путь не всегда самый короткий…

Применение картинок в качестве тенеобразующих элементов имеет ряд существенных недостатков:

  • Скорость. Дополнительные картинки негативно сказываются на скорости загрузки страниц и создают дополнительную нагрузку на сервер.
  • Резинка. Если Вы уже ознакомились с базовой версткой и переходите к решению реальных практических задач, у вас обязательно возникнет необходимость использовать «резиновую» верстку, и тут с картинками начинаются канители…
  • Прощай «чистый» код. Применение картинок-теней приводит нас к необходимости ввода дополнительных блоков и оберток, вследствие чего код становится нечитабельным.

Какой у нас план?

В основе нашего примера будет лежать свойство box-shadow, щедро дарованное CSS3.

box-shadow добавляет элементу тень (что примечательно, по умолчанию – наружную, с параметром inset – внутреннюю), позволяет одновременно применять несколько разных теневых следов, адекватно оттеняет border-radius

Ну, как Вы уже догадались, автор очень любит это свойство))).

Рассмотрим пример использования:

box-shadow: <offsetX> <offsetY> < blur radius > < spread radius > <shadow color>
  • offsetX – вертикальный сдвиг тени относительно блока
  • offsetY – горизонтальный сдвиг тени относительно блока
  • blur radius – радиус размытия тени
  • spread radius – протяженность тени
  • shadow color – цвет тени (черный по умолчанию)

Записав несколько теней через запятую – получим несколько теней на выхлопе.

Важно!!!

  • Устаревшие браузеры на web-kit движке поддерживают экспериментальное свойство -webkit-box-shadow (Sf до v5.1, Cr до v10.0, Andr до v4.0 и iOS Sf до v5.0).
  • IE до v9.0 не понимает box-shadow, по этому придется поиграться с фильтрами вида
    filter: progid:DXImageTransform.Microsoft.dropshadow(offsetX, offsetY, shadow color);
    .

Переходим к практике

Создадим страницу с базовым контейнером, к которому будем прикручивать тень.

HTML:

<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" media="all" type="text/css" href="./style.css">
        <title> Нестандартные тени </title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div>Нестандартные тени <span>CSS</span></div>
    </body>
</html>

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

CSS:

body {
    background: aqua; /*Задаем фон страницы*/
}
 
#blockd {/*Базовый контейнер*/
 position: relative; /*Позиционируем контейнер*/
 width: 50%; /*Ширина контейнера*/
 background: #f2ea09; /*Фон контейнера*/
 -moz-border-radius: 5px; /*Фаска для Мозюки*/
 border-radius: 5px;/*Фаска*/
 padding: 20px 20px; /*Внутренние отступы*/
 color: rgba(25,1,255, 0.7);/*Цвет текста*/
 text-shadow: 0 1px 0 #211e3c; /*Тень текста*/
 font-size: 45px;/*Размер шрифта*/
 font-weight: bold;
 margin: 120px auto;/*Внешние поля*/
}
#blockd span {
   color: rgba(252,47,0, .8); 
   font-weight: bolder;
   font-size: 50px;
}

Результатом наших стараний будет следующий пейзаж:

В создании обещанной не совсем стандартной тени нам помогут:

  • псевдоэлементы :before, :after, позволяющие выводить некий контент непосредственно перед и после родительским элементом.
  • CSS свойство transform, позволяющее трансформировать элемент, (вращать, наклонять в разных плоскостях, применять матрицу преобразований и многое другое).

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

CSS:

#blockd:before,/*Темизируем псевдоэлементы*/
#blockd:after {
 z-index: -1;/*Прячем псевдоэлементы за родителя*/
 position: absolute;/*Задаем позиционирование*/
 content: "";/*Намекаем, что нужно что-то вывести*/
 bottom: 16px;/*Уточняем абсолютное положение*/
 left: 9px;/*Уточняем абсолютное положение*/
 width: 50%;/*Задаем ширину*/
 top: 70%;/*Смещаем вниз*/
 max-width:350px;/*Ограничиваем ширину*/
 background: rgba(0, 0, 0, 0.8);/*Задаем фон псевдоэлемента*/
 -webkit-box-shadow: 0 20px 10px rgba(244,63,0, 0.7);/*тень для вэбкит-движков*/
 -moz-box-shadow: 0 20px 10px rgba(244,63,0, 0.7);/*Тень для Мозиллы*/
 box-shadow: 0 20px 10px rgba(244,63,0, 0.7);/*Тень для всех, кому CSS3 не чуждо*/
 -webkit-transform: rotate(-4deg);/*Вращаем на 4 градуса для вэбкит*/
 -moz-transform: rotate(-4deg);/*Вращаем на 4 градуса для Мозиллы*/
 -o-transform: rotate(-4deg);/*Вращаем на 4 градуса для Оперы*/
 -ms-transform: rotate(-4deg);/*Вращаем на 4 градуса для мелкософта*/
 transform: rotate(-4deg); /*Вращаем на 4 градуса для всех, кому CSS3 не чуждо*/
}
 
#blockd:after { /*Вращаем и размещаем тень «после» контейнера*/
    transform: rotate(4deg);
 -webkit-transform: rotate(4deg);
 -moz-transform: rotate(4deg);
 -o-transform: rotate(4deg);
 -ms-transform: rotate(4deg);
 
 right: 9px;
 left: auto;
}

Теперь взглянем на результат.

Как видно из примера, мы использовали красную (244,63,0) полупрозрачную (0.7) тень. Целью такого шага было продемонстрировать возможность применения любого элемента из RGB пространства в качестве тенеобразующей основы.

Разноцветные тени способны помочь Вам в создании оригинальных дизайнерских решений.

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

Важно!!!

  1. Кросс-браузерность. Рассмотренный метод построения нестандартных теней показал полную работоспособность в браузерах, начиная с Fx3.5, Op10.5, Sf, Cr, IE9.
  2. В отличии от метода картинок, скорость загрузки страниц не ухудшается, наличие тени не влияет на размер блока:

    Shadows do not influence layout and may overlap other boxes or their shadows.

Оценок: 8 (средняя 5 из 5)

Понравилась статья? Расскажите о ней друзьям:

Курсы по CSS (в открытом доступе)

Уровень сложности:

Средний

Еще интересное

CSS3 — Тень — CoderLessons.com

Поддерживается CSS3 для добавления тени к тексту или элементам. Свойство Shadow разделено следующим образом:

  • Тень текста
  • Box Shadow

Тень текста

Поддерживается CSS3 для добавления теневых эффектов в текст. Ниже приведен пример добавления эффектов тени к тексту:

Live Demo

<html>
   <head>
      <style>
         h2 {
            text-shadow: 2px 2px;
         }
         h3 {
            text-shadow: 2px 2px red;
         }
         h4 {
            text-shadow: 2px 2px 5px red;
         }
         h5 {
            color: white;
            text-shadow: 2px 2px 4px #000000;
         }
         h5 {
            text-shadow: 0 0 3px #FF0000;
         }
         h6 {
            text-shadow: 0 0 3px #FF0000, 0 0 5px #0000FF;
         }
         p {
            color: white;
            text-shadow: 1px 1px 2px black, 0 0 25px blue, 0 0 5px darkblue;
         }
      </style>
   </head>

   <body>
      <h2>Tutorialspoint.com</h2>
      <h3>Tutorialspoint.com</h3>
      <h4>Tutorialspoint.com</h4>
      <h5>Tutorialspoint.com</h5>
      <h5>Tutorialspoint.com</h5>
      <h6>Tutorialspoint.com</h6>
      <p>Tutorialspoint.com</p>
   </body>
</html>

Это даст следующий результат —

тень от коробки

Используется для добавления эффектов тени к элементам. Ниже приведен пример добавления эффектов тени к элементу.

Live Demo

<html>
   <head>
      <style>
         div {
            width: 300px;
            height: 100px;
            padding: 15px;
            background-color: red;
            box-shadow: 10px 10px;
         }
      </style>
   </head>

   <body>
      <div>This is a div element with a box-shadow</div>
   </body>
</html>

Это даст следующий результат —

Тень CSS для создания эффекта объема