DataLife Engine > Версия для печати > Создаем выезжающий подвал при помощи хитрого трюка с z-index

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

Суть

Эффект предназначен для того, чтобы впечатлить посетителей страницы выезжающим подвалом. Для этого нам нужно, чтобы:* Весь контент страницы кроме самого подвала, должен быть помещен в одну оболочку (в нашем случае в div id=”main”). Этому элементу будет задан параметр z-index со значением 1;* Подвалу мы задали отрицательное значение параметра z-index. Это предоставит нам цвет фона, и создаст пространство для фиксированной части подвала (для ссылок и цветных заголовков);* У нас был элемент с выставленным фиксированным позиционированием по отношению к нижней части окна, и имел параметр z-index, значение которого было бы ниже, чем у элемента #main, но выше, чем у подвала.Следующая иллюстрация поможет вам лучше понять, о чем идет речь: 1378883031_1378812178_slide-out-footer-01-5394704 Теперь давайте перейдем к коду!

HTML-код

Ниже вы можете видеть разметку страницы. Это обычный HTML5-документ, в разделе head у которого мы указываем шрифт из Google Webfonts, и HTML5 shim для старых версий браузеров IE.

Index.html






        Tutorial: A CSS3 slide-out footer













            

A CSS3 slide-out footer.







Элемент #main оборачивает контент страницы. Как вы увидите в следующем разделе, мы задаем ему положительное значение z-index, и таким образом он отображается поверх подвала. А теперь давайте рассмотрим разметку для самого подвала:



    

Внутрь тега footer мы помещаем ненумерованный список, в котором содержатся 4 группы ссылок (определенных при помощи элементов li). У каждой группы есть параграф, который преобразуется в цветной заголовок для группы, и еще один ul, который содержит ссылки. У самого последнего ul будет установлен параметр position:fixed, который сделает его фиксированным по отношению к нижней части окна браузера. 1378882906_1378812204_slide-out-footer-02-6251828

CSS-код

Как вы уже наверное догадались, здесь начинается все самое интересное. В самом начале руководства мы говорили о том, что будем работать с отрицательными параметрами z-index, чтобы подвал наш был зафиксирован внизу экрана. Есть очень полезная статья, в которой объясняется процесс работы с z-index, и мы настоятельно рекомендуем вам ознакомиться с ней перед тем, как продолжить данный урок. Не беспокойтесь, мы никуда не денемся!Первое, что нам нужно сделать, это создать стопку контента в элементе body (подойдет любой элемент, у которого есть и подвал и div #main). Если вы не сделаете этого, то из нашего личного опыта следует, что эффект не будет работать в мобильных браузерах Safari и устаревших версиях IE. Чтобы создать стопку контента, нам нужно лишь задать контенту параметр z-index:

assets/css/styles.css

body{
    font:15px/1.3 'PT Sans', sans-serif;
    color: #5e5b64;

    /* Create a page-wide stacking context
    (so that negative margins work as you expect) */

    position:relative;
    z-index:0;
}

Теперь все другие элементы на странице с z-index будут размещены в соответствии с телом документа. Далее нам нужно применить z-index к элементу #main таким образом, чтобы он накрыл подвал (другими словами, он всегда будет виден, и зафиксирован в самом низу окна).

#main{
    position:relative;
    z-index:1;

    background-color: #fff;

    background-image:-webkit-radial-gradient(center, circle farthest-corner, #fff, #e2e2e2);
    background-image:-moz-radial-gradient(center, circle farthest-corner, #fff, #e2e2e2);
    background-image:radial-gradient(center, circle farthest-corner, #fff, #e2e2e2);

    padding: 120px 0 600px;
    box-shadow: 0 3px 3px rgba(0,0,0,0.2);
}

Значение 1 у параметра z-index поместит элемент поверх всех других элементов на странице, у которых не указано значение параметра z-index. В большинстве браузеров этого будет достаточно для того, чтобы получить нужный эффект, однако в мобильном Safari есть небольшая проблемка, которая вынуждает нас установить отрицательный z-index в подвале. Еще кое-что, что нужно следует сделать, это выставить фон для элемента #main, иначе мы будем видеть подвал через этот элемент.Так выглядит наш подвал:

footer{
    height: 245px;
    color:#ccc;
    font-size:12px;

    position:relative;
    z-index:-2;

    background-color:#31353a;

    background-image:-webkit-linear-gradient(top, #31353a, #2f3337);
    background-image:-moz-linear-gradient(top, #31353a, #2f3337);
    background-image:linear-gradient(top, #31353a, #2f3337);
}

Мы выставили z-index со значением -2. Это перемещает его за div #main. Учтите, что мы должны задать этому элементу высоту, так как ul-элемент, расположенный внутри него, имеет фиксированное позиционирование, и не будет расширяться до размеров родительского элемента.Далее следует ul-элемент, который имеет фиксированное позиционирование по отношению к окну браузера:

footer > ul{
    width:960px;
    position:fixed;
    left:50%;
    bottom:0;
    margin-left:-480px;
    padding-bottom: 60px;
    z-index:-1;
}

Он имеет параметр z-index со значением -1, что приводит к тому, что он отображается под элементом #main, но поверх подвала, — и это именно то, что нам нужно. В этом и заключается весь трюк с z-index, но есть еще некоторые стили, о которым мы хотели бы вам рассказать:

/* The four columns of links */

footer > ul > li{
    width:25%;
    float:left;
}

footer ul{
    list-style: none;
}

/* The links */

footer > ul > li ul li{
    margin-left:43px;
    text-transform: uppercase;
    font-weight:bold;
    line-height:1.8;
}

footer > ul > li ul li a{
    text-decoration: none !important;
    color:#7d8691 !important;
}

footer > ul > li ul li a:hover{
    color:#ddd !important;
}

Нам нужно быть предельно осторожными при выставлении данных стилей, так как подвал содержит вложенные ul, что может привести к их смешению. Чтобы ограничить эффект от стилей, мы используем дочерний CSS-селектор >.Далее следует логотип компании. Изображение отображается из спрайта как элемент :before.

/* The company logo */

footer a.logo{
    color: #e4e4e4 !important;
    text-decoration: none !important;
    font-size: 14px;
    font-weight: bold;
    position: relative;
    text-transform: uppercase;
    margin-left: 16px;
    display: inline-block;
    margin-top: 7px;
}

footer a.logo i{
    font-style: normal;
    position: absolute;
    width: 60px;
    display: block;
    left: 48px;
    top: 18px;
    font-size: 12px;
    color: #999;
}

footer a.logo:before{
    content: '';
    display: inline-block;
    background: url('../img/sprite.png') no-repeat -19px -70px;
    width: 48px;
    height: 37px;
    vertical-align: text-top;
}

После этого, мы можем стилизовать элементы параграфа, которые должны быть преобразованы в цветные заголовки для каждого из 4-х разделов.

footer p{
    width: 90%;
    margin-right: 10%;
    padding: 9px 0;
    line-height: 18px;
    background-color: #058cc7;
    font-weight: bold;
    font-size: 14px;
    color:#fff;
    text-transform: uppercase;
    text-shadow: 0 1px rgba(0,0,0,0.1);
    box-shadow: 0 0 3px rgba(0,0,0,0.3);
    margin-bottom: 20px;
    opacity:0.9;
    cursor:default;

    -webkit-transition: opacity 0.4s;
    -moz-transition: opacity 0.4s;
    transition: opacity 0.4s;
}

footer > ul > li:hover p{
    opacity:1;
}

footer p:before{
    content: '';
    display: inline-block;
    background: url('../img/sprite.png') no-repeat;
    width: 16px;
    height: 18px;
    margin: 0 12px 0 15px;
    vertical-align: text-bottom;
}

Еще один трюк, который мы здесь использовали, заключается в том, что мы установили уровень непрозрачности (opacity) элементов на 0.9, а затем определили переход, который будет плавно анимировать переход в уровне непрозрачности. При наведении, уровень непрозрачности будет изменен на 1, что запустит анимацию.Наконец, предлагаем вам разные цветовые схемы, которые были созданы при помощи нескольких CSS-градиентов:

footer p.home{
    background-color: #0096d6;

    background-image:-webkit-linear-gradient(top, #0096d6, #008ac6);
    background-image:-moz-linear-gradient(top, #0096d6, #008ac6);
    background-image:linear-gradient(top, #0096d6, #008ac6);
}

footer p.home:before{
    background-position: 0 -110px;
}

footer p.services{
    background-color: #00b274;

    background-image:-webkit-linear-gradient(top, #00b274, #00a46b);
    background-image:-moz-linear-gradient(top, #00b274, #00a46b);
    background-image:linear-gradient(top, #00b274, #00a46b);
}

footer p.services:before{
    background-position: 0 -129px;
}

footer p.reachus{
    background-color: #d75ba2;

    background-image:-webkit-linear-gradient(top, #d75ba2, #c75496);
    background-image:-moz-linear-gradient(top, #d75ba2, #c75496);
    background-image:linear-gradient(top, #d75ba2, #c75496);
}

footer p.reachus:before{
    background-position: 0 -89px;
}

footer p.clients{
    background-color: #e9ac40;

    background-image:-webkit-linear-gradient(top, #e9ac40, #d89f3b);
    background-image:-moz-linear-gradient(top, #e9ac40, #d89f3b);
    background-image:linear-gradient(top, #e9ac40, #d89f3b);
}

footer p.clients:before{
    background-position: 0 -69px;
}

Это делает заголовки очень привлекательными и без использования каких-либо изображений.

Конец!

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

Исходники в архиве.