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