Разбираем по шагам симпатичный эффект появления текста при наведении на чистом CSS.

Итоговый результат будет выглядеть вот так:

See the Pen Untitled by Mohnatus (@mohnatus) on CodePen.

Шаг 1

Сначала создадим контейнер и зададим общие стили:

<div class="reveal">
  
</div>
body {
  display: flex;
  justify-content: center;
  font-family: sans-serif;
}

.reveal {
  position: relative; /* потребуется для позиционирования текста */
  width: 320px;
  height: 180px;
  border-radius: 4px;
  background: url(http://1.bp.blogspot.com/-4HzK341i6Q4/Vg1UtfXLw5I/AAAAAAAAJR0/DkEMpWrpBr0/s1600/Autumn-Leaves-in-sunshine.jpg) center / cover;
  text-transform: uppercase;
  cursor: pointer;
}

Мы получили симпатичный небольшой блок с красивым фоном.

Шаг 2

Теперь добавим текст. Изначально на блоке будет отображаться слово «Hello».

<div class="reveal">
  <div class="reveal__container">

    <div class="reveal__title">
      Hello
    </div>

  </div>
</div>

Разместим его по центру с помощью абсолютного позиционирования контейнера и флекс-свойств и добавим некоторые стили:

/* затемненный фон */
.reveal::before {
  content: '';
  position: absolute;
  left: 10px; right: 10px;
  top: 10px; bottom: 10px;
  background: black;
  opacity: 0.4;
  box-shadow: 0 0 12px 6px black;
}

.reveal__container {
  position: absolute;
  top: 0; left: 0;
  
  width: 100%;
  height: 100%;
  overflow: hidden;
  
  border-radius: 4px;
}

.reveal__title {
  position: absolute;
  top: 0; left: 0;
  width: 100%;
  height: 100%;
  
  display: flex;
  align-items: center;
  justify-content: center;
  
  font-size: 40px;
  color: white;
  font-weight: bold;
  z-index: 1;
}

Шаг 3

Теперь добавим слово «World», которое изначально скрыто. При наведении на блок, оно будет эффектно появляться с левой стороны.

<div class="reveal">
  <div class="reveal__container">
    <div class="reveal__title">
      Hello
    </div>
    
    <div class="reveal__title-overlay">
        <div class="reveal__title-overlay-text">
          World
        </div>
     </div> 
    
  </div>
</div>

Зачем нам такая сложная структура, будет понятно чуть позже.

Добавим стили:

.reveal__title,
.reveal__title-overlay {
  position: absolute;
  top: 0; left: 0;
  width: 100%;
  height: 100%;
  
  display: flex;
  align-items: center;
  justify-content: center;
  
  font-size: 40px;
  color: white;
  font-weight: bold;
  z-index: 1;
}

/* коричневый фон */
.reveal__title-overlay {
  overflow: hidden;
  
  top: calc(50% - 50px);
  left: 50%;
  z-index: 2;

  height: 100px;
  width: 405px;
  
  transform: translateX(-150%) skew(-30deg);
  transition: transform 0.4s cubic-bezier(0, 0, 0.3, 1);
  
  background: rgb(32, 6, 6);
  color: white;
  font-size: 50px;
}

/* слово World */
.reveal__title-overlay-text {
  width: 100%;
  text-align: center;
  transform: translateX(100%) skew(30deg);
  transition: transform 0.4s cubic-bezier(0, 0, 0.3, 1);
}

Свойство transition потребуется для плавного изменения свойств.

Для наглядности на скриншоте слово «Hello» скрыто, слово «World» видимо, а все свойства overflow: hidden закомментированы.

Шаг 4

При наведении курсора на блок позиция слова «World» плавно изменяется:

.reveal:hover .reveal__title-overlay {
  transform: translateX(-50%) skew(-30deg);
}

.reveal:hover .reveal__title-overlay-text {
  transform: skew(30deg);
}

Шаг 5

Для большего эффекта немного уменьшим блок и будем его увеличивать при наведении:

.reveal {
  /*...*/
  
  transform: scale(0.9);
  transition: transform 0.4s cubic-bezier(0, 0, 0.3, 1);
}

.reveal:hover {
  transform: scale(1);
}

.reveal:hover::before {
  transform: translateY(10px);
  opacity: 0.2;
}

Вот и все, эффект готов.

Этот эффект создан Полом Льюисом:

0 комментариев

Оставить комментарий

*Доступные HTML-теги: a, abbr, blockquote, code, pre, del, i, em, strong, b, strike
*Не будет опубликован