My heart will beat on! Сердце на CSS для неисправимых романтиков
Бьющееся сердце на CSS ко Дню святого Валентина или просто без повода. Простая открытка с глубоким смыслом на чистых и незамутненных стилях.
CSS – очень простой язык с большим потенциалом. Если вы хоть самую малость разбираетесь в геометрии, то легко сможете превратить окно браузера в холст для собственных шедевров.
Хватит применять CSS только для работы. Используйте его в личных целях без всякого смущения! Сделайте хотя бы простую, но симпатичную валентинку для дорогого человека.
Создаем
Как сделать сердце на CSS из простейших геометрических фигур? Очень просто: достаточно двух кругов и одного квадрата, повернутого на 45 градусов.
В CSS мы легко можем обойтись одним контейнером – привлечем к делу псевдоселекторы :before
и :after
. Это псевдоэлементы, которые вроде есть, но нет. В HTML и DOM вы их не найдете, но если добавить стили, то на странице они появятся. :before
вставляется перед контентом блока, а :after
– после.
Таким образом, в HTML мы имеем один элемент:
<div class="heart"></div>
А CSS вот такой:
.heart { display: inline-block; height: 50px; width: 50px; margin: 0 10px; position: absolute; left: 45%; top: 45%; background-color: red; transform: rotate(-45deg); } .heart:before, .heart:after { content: ""; position: absolute; height: 50px; width: 50px; background-color: red; border-radius: 50%; } .heart:before { top: -25px; left: 0; } .heart:after { left: 25px; top: 0; }
Сам блок с классом heart
– это квадрат, повернутый на 45 градусов против часовой стрелки с помощью свойства transform. Псевдоэлементы :before
и :after
– такие же квадраты, однако углы у них скруглены на 50%, поэтому выглядят они как круги. Взаиморасположение элементов обеспечивается с помощью абсолютного позиционирования.
Оживляем
Влюбленное сердце должно пылко биться, поэтому давайте добавим жизнь в наше творение.
На помощь спешит CSS-правило @keyframes
, в котором можно определить один цикл анимации.
Нужно разделить все действие на отдельные шаги (занимающие определенный процент общего времени) и для каждого описать необходимую трансформацию. У нас будет 3 шага.
@keyframes heartbeat { 0% { transform: scale( 1 ); } 20% { transform: scale( 1.25 ) translateX(5%) translateY(5%); } 40% { transform: scale( 1.5 ) translateX(9%) translateY(10%); } }
- Начинается все (0%) без трансформаций.
- На 20% от общего времени фигура достигает 125% от исходного размера.
- К 40% она увеличивается до 150%.
- Оставшиеся 60% времени происходит постепенное уменьшение до первоначального состояния.
Запустим наше сердце с помощью правила animation
:
.heart { animation: heartbeat 1s infinite; ... }
Это сердце на CSS будет биться вечно (infinite
) – или столько, сколько длится ваша любовь :)
See the Pen
Audio Element by @dkiriakakis
on CodePen.
Желаем вам прекрасного Дня святого Валентина!
Оригинал: How to create a beating heart with pure CSS for your valentine