Как реализовать на css3 плавное появление элемента

CSS3. Я обожаю эту технологию, потому что она позволила делать много новых эффектов, не прибегая к помощи JavaScript-библиотек. В этой статье я расскажу вам о том, как реализовать с помощью css3 плавное появление любого элемента. Я покажу один хороший способ, как это сделать.

Смотрим на примере

Я думаю, лучше рассматривать сразу на примере. Допустим, у нас есть два одинаковых блока. В html разметке я предлагаю обозначить их так:

<div class="block block1">Блок 1</div>
<div class="block block2">Блок 2</div>

Каждый элемент получил два стилевых класса. Зачем это нужно? Первым классом мы зададим общие правила внешнего вида, блоки же одинаковые, так что их можно описать совместно. В реальном примере, скорее всего, будет по-другому. Также каждый элемент получил собственный уникальный стилевой класс. Он тоже пригодится.

.block{
font-size: 50px;
width: 200px;
height: 120px;
background: green;
margin-bottom: 30px;
transition: 1s
}

Этими правилами мы прописали обоим блокам одинаковый внешний вид: высоту, ширину, размер шрифта, отступ и зеленый фон. Последнее свойство transition как раз и является относительно новым и входит в версию CSS3. Оно обозначает задержку, после которой выполняются определенные правила. По сути, именно это дает плавное появление.

В примере я прописал 1 секунду, по желанию можно поставить больше или меньше. Когда вы увидите свойство в действии, то сами сможете отрегулировать его значение.

Как реализовать в css3 плавное появление?

Дальше есть два варианта действий. Допустим, нам нужно пока скрыть второй блок, а при наведении на первый плавно выводить его. Наиболее часто для скрытия элемента применяют правило display: none, но оно не даст именно того, чего нужно – плавного появления. Элемент появиться резко.

Поэтому мы поступим по-другому. Смотрите этот код:

.block2{
opacity: 0;
}
.block1:hover+.block2{
opacity: 1
}

Мы использовали еще одно CSS3-свойство – opacity. Оно задает прозрачность элемента, которая прописывается от 0 (полностью прозрачный) до 1 (полностью непрозрачный) элемент.

Сначала полностью убираем второй блок от глаз, делая его прозрачным. Теперь нужно сделать так, чтобы при наведении мышки на первый блок плавно появлялся второй. Для этого используется такой вот интересный комбинированный селектор:

.block1:hover+.block2{
opacity: 1
}

То есть само изменение стилей происходит при наведении на первый блок, а изменяется непосредственно второй. Благодаря прописанному ранее transition он появится не резко, а плавно, что нам с вами и нужно. Изменяя значение transition можно сделать появление более резким или наоборот еще больше замедлить его.

Вот с такой вот скоростью появляется блок при выставленном значении transition: 1s. Кстати, значение можно задавать и в миллисекундах, если хотите.

Наведите курсор на блок
опа, я появился

Использование на практике

Хорошо, а где это вам может пригодиться в действительности? Например, при разработке выпадающего меню. Как видите, с помощью css3 и плавного появления элементов сегодня можно сделать такую навигацию даже без использования скриптов. А это улучшает производительность вашего интернет-ресурса.

Можно привести и другой пример. Например, чтобы при наведении на кнопку “Обратная связь” появлялась форма, в которую можно записать свое сообщение. Это только то, что я только что придумал, на деле же можно изобрести гораздо более интересных вещей, в которых используются плавные переходы.

Пример использования — плавное появление пояснения к картинке

Давайте рассмотрим такой простой пример. У меня есть картинка и я хочу, чтобы к ней плавно выводилось пояснение. Вот картинка:

Заключим ее в блок и добавим абзац с пояснением:

<div class = "transition-block">
<img src = "bike.jpg">
<p class = "alt-text">Прыжок на мотоцикле</p>
</div>

Остается добавить нужные стили:

.alt-text{
	font-size: 13px;
	background: rgba(0, 0, 230, 0.6);
	color: #fff;
	position: absolute;
	left: -200px;
        top: 0;
	padding: 10px 20px;
	width: 40%;
	box-sizing: border-box;
	transition: left 0.3s linear;
}
.transition-block{
	position: relative;
	width: 400px;
}
.transition-block:hover .alt-text{
	top: 0;
        left: 0;
}

И вот что получилось:

Прыжок на мотоцикле

Как видите, блок с пояснением появляется плавно благодаря заданному свойству transition. В первом примере в этой статье я использовал лишь один параметр этого свойства — время. В этот раз параметров больше:
transition: left 0.3s linear;
top — это название свойства, к которому нужно применить планвный эффект. В этом случае плавность будет применена только к свойству top и больше ни к какому другому.
0.3s — это понятно, время перехода.
linear — функция перехода. Это отдельная и не самая простая тема. К слову, есть еще такие функции: ease-in, ease, ease-out. Попробуйте, наверняка заметите небольшую разницу.

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

В дальнейшем в своих статьях я еще не раз коснусь темы плавных переходов и создания красивых эффектов с их помощью. Как видите, в css плавное появление блока позволяет добавить сайту динамичности и красоты, так что сегодня, несомненно, стоит использовать плавные переходы в своей верстке.

Комментариев: 6
  1. Илья

    Отличный сайт!

  2. Артем

    В IE-8 не красиво смотрится. блок просто размещается рядом с картинкой и при наведении на контент резко меняет свое положение. потом опять прыгает рядом с картинкой.

    1. Михаил (автор)

      Скорее всего это из-за того, что свойство transition не поддерживается в IE 8. Можно попробовать написать свойство с вендорным префиксом: -ms-transition. Если не сработает, то для IE этой версии можно сделать плавное появление на Javascript/Jquery

    2. mr.vakarchuk

      В 2016 то, пора бы уже и положить на IE8!

      1. Михаил (автор)

        Зачем если его никто не использует?

        1. Mario

          Не «зачем», а «что» laugh Парень ровно про то же, что и ты написал.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: