27янв
730
1
0

Стили для навигации.

Небольшим элементам интерфейса, как правило, уделяют не слишком много внимания, когда речь заходит о творческом подходе. Ими часто пренебрегают из-за их размера. Но и их размеров достаточно, чтобы добавить им некоторые интересные эффекты. В последнее время вы, возможно, замечали какую-то вертикальную или горизонтальную навигацию в виде точек/кружков для прокрутки контента на веб-сайте. Сегодня мы хотим поделиться вдохновляющим набором точечной навигации с эффектами при наведении или когда мы нажимаем на них. Что касается эффектов, мы используем несколько методов, в том числе переход на псевдо-элементы, перспективы и SVG.

Обратите внимание, что некоторые эффекты не могут работать в некоторых браузерах, как предполагается (SVG переход, 3D преобразования стилей). Для более старых браузеров, возможно, придётся добавить упрощённый вариант.

 

Разметка будет представлять собой неупорядоченный список со ссылками:

<div class="dotstyle dotstyle-fillup">
    <ul>
        <li class="current"><a href="#">Home</a></li>
        <li><a href="#">About</a></li>
        <li><a href="#">Products</a></li>
        <li><a href="#">Portfolio</a></li>
        <li><a href="#">Blog</a></li>
        <li><a href="#">Contact</a></li>
    </ul>
</div>

Для некоторых примеров, мы также используем ещё один пустой элемент списка, то есть для того, чтобы "двигать" текущий элемент в "точку перемещения" стиля.

Формируем некоторые общие стили:

.dotstyle ul {
    position: relative;
    display: inline-block;
    margin: 0;
    padding: 0;
    list-style: none;
    cursor: default;
}
 
.dotstyle li {
    position: relative;
    display: block;
    float: left;
    margin: 0 16px;
    width: 16px;
    height: 16px;
    cursor: pointer;
}
 
.dotstyle li a {
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    outline: none;
    border-radius: 50%;
    background-color: #fff;
    background-color: rgba(255,255,255,0.3);
    text-indent: -999em;
    cursor: pointer; /* make the text accessible to screen readers */
    position: absolute;
}

Пример для стиля «fill», где мы заполняем внутренний круг, делается путём, установки на ссылку overflow: hidden и с помощью псевдо-элемента как заполняемой части:

/* Fill up */
.dotstyle-fillup li a {
    overflow: hidden;
    background-color: rgba(0,0,0,0);
    box-shadow: inset 0 0 0 2px rgba(255,255,255,1);
    transition: background 0.3s;
}
 
.dotstyle-fillup li a::after {
    content: '';
    position: absolute;
    bottom: 0;
    height: 0;
    left: 0;
    width: 100%;
    background-color: #fff;
    box-shadow: 0 0 1px #fff;
    transition: height 0.3s;
}
 
.dotstyle-fillup li a:hover,
.dotstyle-fillup li a:focus {
    background-color: rgba(0,0,0,0.2);
}
 
.dotstyle-fillup li.current a::after {
    height: 100%;
}

Другим интересным примером является «stroke», который мы рисуем с помощью SVG и переходом на stroke-dashoffset в форме круга:

/* SVG draw circle stroke */   
.dotstyle-drawcircle li {
    width: 18px;
    height: 18px;
}
 
.dotstyle-drawcircle li a {
    top: 3px;
    left: 3px;
    width: 12px;
    height: 12px;
    background-color: #c44d48;
    -webkit-transition: opacity 0.3s;
    transition: opacity 0.3s;
}
 
.dotstyle-drawcircle li svg {
    z-index: 10;
}
 
.dotstyle-drawcircle li svg circle {
    opacity: 0;
    fill: none;
    stroke: #fff;
    stroke-width: 3;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-dasharray: 39 39; 
    stroke-dashoffset: 39; /* ~ length of circle path (pi*2r) */
    transition: stroke-dashoffset 0.3s, opacity 0.3s;
}
 
.dotstyle-drawcircle li.current a,
.dotstyle-drawcircle li a:hover,
.dotstyle-drawcircle li a:focus {
    opacity: 0.5;
}
 
.dotstyle-drawcircle li.current svg circle {
    opacity: 1;
    stroke-dashoffset: 0;
    transition: stroke-dashoffset 0.3s, opacity 0.15s;
}

Для "hop" эффекта мы также используем дополнительно JavaScript, чтобы добавить ещё один класс на текущий элемент.

 

Перевод: Art

Оригинал: tympanus.net

Демо тут, исходники тут.

Github

Рейтинг записи: 1
Добавлять комментарии могут только авторизированные/зарегистрированные пользователи. Пожалуйста, зарегистрируйтесь или авторизуйтесь.