Здравствуйте дорогие читатели нашего блога. Мы всегда стараемся подобрать для вас самые интересные и простые варианты решения различных сложных ситуаций и об одной из них мы поговорим сегодня.
К нам обратился наш читатель и попросил предложить интересный вариант оформления страницы заглушки для сайта. Хотели бы отметить, что данное решение подходит для всех сайтов, а так же позволяет реализовывать все ваши идеи, добавлять любую анимацию, благодаря CSS3 не грузит сервер, быстро загружается. Таким образом можно оформлять страницы ошибки 404, разделы которые находятся в разработке, ошибки переходов и другие проблемы.
Ниже мы прикрепили для вас три варианта реализации анимированных эффектов для создания заглушки «Сайт в разработке», как упоминалось выше, можно переделать данную страницу под ваши нужды, а лучше держать все варианты в архиве и использовать их в нужный момент.
Заглушка для обувного магазина
Обратите внимание, что я добавил более длительную задержку для этого примера, чтобы дать время для загрузки изображений.
В первом примере будет несколько элементов, которые мы будем анимировать. Темой для этого примера будет скоро страница.
У нас будет основной контейнер с областью контента. Внутри мы разместим несколько рядов для миниатюр. Кроме того, у нас будет строка контента для основных заголовков. После того, как мы покажем основную область содержимого, мы добавим боковой элемент, который будет содержать ввод электронной почты:
Html
Coming Soon
Designer Shoes that you dream of for incredible prices
Little Blue Shoe
Be the first to know:
Хорошо, теперь самое интересное: CSS!
CSS
Итак, основной идеей этого примера является следующая последовательность анимаций:
- Миниатюры появляются с fromBack .
- Первый h1 появляется с fromBack .
- Подзаголовок h2 появляется с fromBack .
- Первый h1 и подзаголовок h2 исчезают с помощью fadeOut .
- Миниатюры начинают последовательно исчезать с помощью fadeOut , а второй h1 появляется с помощью fadeInColor . Кроме того, содержимое перемещается влево и уменьшается с помощью sizeDownMove .
- Стрелка и боковое содержимое скользят слева с помощью slideIn
Давайте отцентрируем основной контейнер и позиционируем содержимое абсолютно:
.sp-container {
position: relative;
width: 1000px;
height: 600px;
margin: -40px auto 0 auto;
}
.sp-content {
position: absolute;
z-index: 100;
width: 800px;
height: 600px;
left: 0px;
top: 0px;
animation: sizeDownMove 0.9s ease-in-out 6s backwards;
transform: scale(0.6);
transform-origin: 0% 50%;
}
Как видите, мы применяем анимацию к содержимому, которое будет перемещать и масштабировать его, но только через 6 секунд. Мы посмотрим на эти анимации позже.
Стрелка также будет абсолютно позиционированным элементом с фоновым изображением:
.sp-arrow {
background: transparent url(../images/arrow.png) no-repeat top left;
position: absolute;
top: 50%;
margin-top: -77px;
left: 82%;
width: 198px;
height: 155px;
animation: slideIn 0.6s ease-in-out 6s backwards;
z-index: 100;
}
.sp-side {
width: 460px;
height: 300px;
position: absolute;
right: 10px;
top: 25%;
animation: slideIn 0.6s ease-in-out 6s backwards;
}
Стрелка и боковой элемент будут скользить, но мы рассмотрим это через минуту.
Давайте стилизуем заголовок:
.sp-side h2 {
font-size: 70px;
padding: 20px 0px;
text-align: center;
color: #fff;
text-transform: uppercase;
text-shadow: 1px 1px 2px rgba(0,0,0,0.2);
font-family: 'Unlock', Arial, sans-serif;
}
.sp-input {
background-color: rgba(255,255,255,0.3);
height: 30px;
padding: 20px;
border-radius: 10px;
margin: 0 auto;
width: 260px;
}
.sp-input input[type="text"] {
width: 210px;
padding: 6px;
background-color: #fff;
border: 1px solid #ddd;
border-radius: 4px;
float: left;
font-family: 'Cookie', serif;
font-size: 18px;
}
.sp-input input[type="text"]:focus {
outline-color: #acdacf;
}
.sp-input a {
float: left;
background-color: #418e7b;
color: #fff;
width: 30px;
height: 30px;
border: none;
border-radius: 50%;
margin-left: 5px;
text-align: center;
line-height: 30px;
cursor: pointer;
font-family: 'Unlock', Arial, sans-serif;
}
.sp-input a:hover {
background-color: #fff;
color: #418e7b;
}
.sp-content h1:first-child {
font-size: 100px;
text-align: center;
color: #fff;
text-transform: uppercase;
text-shadow: 1px 1px 2px rgba(0,0,0,0.2);
line-height: 80px;
padding: 30px 0px 20px 0px;
font-family: 'Unlock', Arial, sans-serif;
animation:
fromBack 1.2s ease-in-out 1.5s backwards,
fadeOut 0.5s linear 4.5s forwards;
}
.sp-content h1.sp-title {
font-size: 90px;
line-height: 80px;
position: absolute;
top: 50px;
left: 160px;
width: 470px;
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.3);
padding-top: 155px;
height: 305px;
text-transform: uppercase;
text-align: center;
color: #518f7e;
text-shadow: 1px 1px 1px rgba(255,255,255,0.9);
font-family: 'Unlock', Arial, sans-serif;
animation: fadeInColor 1.2s linear 5.2s backwards;
}
.sp-content h1:last-child em {
font-family: 'Cookie', serif;
text-transform: none;
}
.sp-content h2 {
font-size: 36px;
text-align: center;
color: #518f7e;
font-family: 'Cookie', serif;
text-shadow: 1px 1px 1px rgba(255,255,255,0.9);
opacity: 0;
animation:
fromBack 0.6s ease-in-out 2.6s backwards,
fadeOut 0.5s linear 4.5s backwards;
}
.sp-content-row {
width: 466px;
height: 300px;
float: left;
}
.sp-side-row {
width: 150px;
float: left;
}
.sp-row img {
display: block;
z-index: 1000;
position: relative;
}
.sp-row span {
position: relative;
float: left;
margin: 2px;
z-index: 100;
transform: scale(1);
opacity: 0;
animation:
fromBack 0.4s linear backwards,
fadeOut 0.3s linear backwards;
}
.sp-row:nth-child(1) span:nth-child(1) {
animation-delay: 0s, 5s;
}
.sp-row:nth-child(1) span:nth-child(2) {
animation-delay: 0.1s, 5.1s;
}
.sp-row:nth-child(1) span:nth-child(3) {
animation-delay: 0.2s, 5.2s;
}
.sp-row:nth-child(1) span:nth-child(4) {
animation-delay: 0.3s, 5.3s;
}
.sp-row:nth-child(1) span:nth-child(5) {
animation-delay: 0.4s, 5.4s;
}
.sp-row:nth-child(4) span:nth-child(1) {
animation-delay: 0.5s, 5.5s;
}
.sp-row:nth-child(4) span:nth-child(2) {
animation-delay: 0.6s, 5.6s;
}
.sp-row:nth-child(5) span:nth-child(5) {
animation-delay: 0.7s, 5.7s;
}
.sp-row:nth-child(5) span:nth-child(4) {
animation-delay: 0.8s, 5.8s;
}
.sp-row:nth-child(5) span:nth-child(3) {
animation-delay: 0.9s, 5.9s;
}
.sp-row:nth-child(5) span:nth-child(2) {
animation-delay: 1s, 6s;
}
.sp-row:nth-child(5) span:nth-child(1) {
animation-delay: 1.1s, 6.1s;
}
.sp-row:nth-child(2) span:nth-child(2) {
animation-delay: 1.2s, 6.2s;
}
.sp-row:nth-child(2) span:nth-child(1) {
animation-delay: 1.3s, 6.3s;
}
.sp-row span:before {
content: '';
position: absolute;
background-color: rgba(255,255,255,0.3);
width: 100px;
height: 100px;
top: 50%;
left: 50%;
margin: -50px 0 0 -50px;
border-radius: 50%;
}
Анимация
Теперь давайте посмотрим на анимации.
Первая анимация просто затемняет элемент, устанавливая непрозрачность от 1 до 0:
@keyframes fadeOut{
0%{
opacity: 1;
}
100%{
opacity: 0;
}
}
@keyframes fadeInColor{
0%{
opacity: 0;
background-color: rgba(255,255,255,0);
}
50%{
opacity: 0.5;
background-color: rgba(255,255,255,0);
}
100%{
opacity: 1;
background-color: rgba(255,255,255,0.3);
}
}
@keyframes slideIn{
0%{
opacity: 0;
transform: translateX(-200px);
}
100%{
opacity: 1;
transform: translateX(0px);
}
}
@keyframes sizeDownMove{
0%{
transform: scale(1);
left: 100px;
}
100%{
transform: scale(0.6);
left: 0px;
}
}
@keyframes fromBack{
0%{
transform: scale(0);
opacity: 0;
}
100%{
transform: scale(1);
opacity: 1;
}
}
Заглушка для кулинарного блога
Html
It's destroying the planet
It's mass, mechanized murder
You can stop it
Now!
Save the planet.
Love life.
Go vegan.
Join us!
CSS
.sp-container h2 {
position: absolute;
top: 50%;
line-height: 100px;
height: 100px;
margin-top: -50px;
font-size: 100px;
width: 100%;
text-align: center;
color: transparent;
animation: blurFadeInOut 3s ease-in backwards;
}
.sp-container h2.frame-1 {
animation-delay: 0s;
}
.sp-container h2.frame-2 {
animation-delay: 3s;
}
.sp-container h2.frame-3 {
animation-delay: 6s;
}
.sp-container h2.frame-4 {
font-size: 200px;
animation-delay: 9s;
}
.sp-container h2.frame-5 {
animation: none;
color: transparent;
text-shadow: 0px 0px 1px #fff;
}
.sp-container h2.frame-5 span {
animation: blurFadeIn 3s ease-in 12s backwards;
color: transparent;
text-shadow: 0px 0px 1px #fff;
}
.sp-container h2.frame-5 span:nth-child(2) {
animation-delay: 13s;
}
.sp-container h2.frame-5 span:nth-child(3) {
animation-delay: 14s;
}
.sp-globe {
position: absolute;
width: 282px;
height: 273px;
left: 50%;
top: 50%;
margin: -137px 0 0 -141px;
background: transparent url(../images/globe.png) no-repeat top left;
animation: fadeInBack 3.6s linear 14s backwards;
opacity: 0.3;
transform: scale(5);
}
.sp-circle-link {
position: absolute;
left: 50%;
bottom: 100px;
margin-left: -50px;
text-align: center;
line-height: 100px;
width: 100px;
height: 100px;
background: #fff;
color: #3f1616;
font-size: 25px;
border-radius: 50%;
animation: fadeInRotate 1s linear 16s backwards;
transform: scale(1) rotate(0deg);
}
.sp-circle-link:hover {
background: #85373b;
color: #fff;
}
Анимация
А теперь давайте посмотрим на все анимации:
Первая анимация предназначена для всех заголовков, которые появятся, а затем исчезнут. Мы будем моделировать эффект размытия, играя с тенью текста и масштабом:
@keyframes blurFadeInOut{
0%{
opacity: 0;
text-shadow: 0px 0px 40px #fff;
transform: scale(1.3);
}
20%,75%{
opacity: 1;
text-shadow: 0px 0px 1px #fff;
transform: scale(1);
}
100%{
opacity: 0;
text-shadow: 0px 0px 50px #fff;
transform: scale(0);
}
}
@keyframes blurFadeIn{
0%{
opacity: 0;
text-shadow: 0px 0px 40px #fff;
transform: scale(1.3);
}
50%{
opacity: 0.5;
text-shadow: 0px 0px 10px #fff;
transform: scale(1.1);
}
100%{
opacity: 1;
text-shadow: 0px 0px 1px #fff;
transform: scale(1);
}
}
@keyframes fadeInBack{
0%{
opacity: 0;
transform: scale(0);
}
50%{
opacity: 0.4;
transform: scale(2);
}
100%{
opacity: 0.2;
transform: scale(5);
}
}
@keyframes fadeInRotate{
0%{
opacity: 0;
transform: scale(0) rotate(360deg);
}
100%{
opacity: 1;
transform: scale(1) rotate(0deg);
}
}
Заглушка для сбора контактов
Html
What if you wouldn't get
spam
anymore?
Wouldn't that be absolutely
great!?
Yeah, it would!
A great way to get rid of spam!
Sign up now!
Css
Сначала мы хотим анимировать область содержимого, в которой есть псевдоэлемент, представляющий собой линию посередине. Мы «откроем» его и сделаем так, чтобы линия увеличивалась.
Затем мы хотим отобразить текст слева, сдвигая его справа последовательно. То же самое происходит и справа, только мы скользим слева. Промежутки с классом «sp-mid» будут иметь больший размер шрифта, и это те элементы, которые мы хотим по-прежнему показывать после затухания остального текста. Мы переместим два больших текста вверх и сожмем область содержимого, то есть уменьшим ее высоту, что приведет к уменьшению средней строки. После этого мы сделаем остальные элементы с кнопкой регистрации.
Контейнер будет иметь фиксированную ширину и высоту, а обертка содержимого сначала появится с открытой анимацией, а затем уменьшит ее высоту, применив сжатие . Последнее произойдет только после того, как весь остальной текст исчезнет, отсюда и большая задержка анимации:
.sp-container {
width: 900px;
height: 400px;
position: relative;
margin: 80px auto 0px auto;
}
.sp-content {
width: 100%;
height: 400px;
position: relative;
animation:
open 0.4s linear forwards,
squeeze 0.6s linear 5.5s forwards;
}
.sp-content:after {
content: '';
width: 4px;
background: #000;
height: 100%;
position: absolute;
left: 50%;
}
.sp-wrap {
width: 400px;
padding: 0px 25px;
height: 100%;
text-align: right;
font-size: 70px;
line-height: 80px;
float: left;
position: relative;
background: #ffdd00;
overflow: hidden;
}
.sp-container h2 {
color: #000;
text-shadow: 0px 0px 1px rgba(0,0,0,0.9);
}
.sp-wrap span {
display: block;
background: #ffdd00;
opacity: 0;
}
.sp-wrap span.sp-mid {
opacity: 1;
}
.sp-container .sp-right h2 {
color: #fff;
text-shadow: 0px 0px 1px rgba(255,255,255,0.9);
}
.sp-wrap span.sp-mid {
font-family: 'MisoBold';
text-transform: uppercase;
font-size: 160px;
line-height: 130px;
position: relative;
}
.sp-left span.sp-top {
animation:
slideLeft 0.5s ease-in 0.6s backwards,
fadeOut 1s linear 4s backwards;
}
.sp-left span.sp-mid {
animation:
slideLeft 0.5s ease-in 1s backwards,
moveUp 0.6s linear 5s forwards;
}
.sp-left span.sp-bottom {
animation:
slideLeft 0.5s ease-in 1.4s backwards,
fadeOut 1s linear 4.2s backwards;
}
.sp-right span {
text-align: left;
}
.sp-right span.sp-top {
animation:
slideRight 0.5s ease-in 2s backwards,
fadeOut 1s linear 4.4s backwards;
}
.sp-right span.sp-mid {
animation:
slideRight 0.5s ease-in 2.4s backwards,
moveUp 0.6s linear 5s forwards;
}
.sp-right span.sp-bottom {
animation:
slideRight 0.5s ease-in 3.2s backwards,
fadeOut 1s linear 4.6s backwards;
}
.sp-wrap i {
position: absolute;
background: #ffdd00;
width: 60px;
}
.sp-wrap i:first-child {
color: #000;
}
.sp-wrap i:last-child {
opacity: 0;
animation: fadeOut 1s linear 6s backwards;
}
.sp-full {
position: absolute;
font-size: 67px;
top: 142px;
width: 700px;
left: 145px;
animation: fadeIn 1s linear 6.6s backwards;
}
.sp-full a {
background: #000;
color: #fff;
border-radius: 4px;
padding: 10px 40px;
display: inline-block;
font-size: 40px;
margin-top: 40px;
animation: zoomIn 0.7s ease-in-out 7s backwards;
}
.sp-full h2 {
width: 400px;
padding: 0px 50px 0px 0px;
float: left;
text-align: right;
}
.sp-full a:hover {
opacity: 0.8;
}
Анимация
Теперь давайте посмотрим на анимации.
Первая анимация предназначена для «открытия» области содержимого. Этого мы добьемся, просто увеличив его высоту:
@keyframes open{
0%{
transform: scale(1,0);
}
100%{
transform: scale(1,1);
}
}
@keyframes squeeze{
0%{
height: 400px;
}
100%{
height: 120px;
}
}
@keyframes fadeOut{
0%{
opacity: 1;
}
100%{
opacity: 0;
}
}
@keyframes fadeIn{
0%{
opacity: 0;
}
100%{
opacity: 1;
}
}
@keyframes slideLeft{
0%{
transform: translateX(120%);
}
100%{
transform: translateX(0%);
}
}
@keyframes slideRight{
0%{
transform: translateX(-120%);
}
100%{
transform: translateX(0%);
}
}
@keyframes moveUp{
0%{
transform: translateY(0px);
}
100%{
transform: translateY(-170px);
}
}
@keyframes zoomIn{
0%{
transform: scale(0);
}
100%{
transform: scale(1);
}
}