Кнопка или ссылка?
Кнопка или ссылка?
Я знаю хабр не для жалоб,но доколе
использовать ты будешь
— ссылки вместо кнопок
‽
Автор иллюстрации
gray-monkey@yandex.ru
Если коротко:
Используйте для кнопок — кнопки, а для ссылок — ссылки.
Для кнопок использовать
ссылки
— не комильфо.
Это не исчерпывающее руководство по кнопкам и не пример невероятного дизайна, а лишь попытка показать, что есть разница между ссылками и кнопками.
Для кого эта статья?
В первую очередь для дизайнера который делает макет сайта, но не дорисовывает детали свойственные вебу. Своеобразная попытка объяснить, что веб-сайт лежит за пределами плоской полиграфии.
Во вторых для верстальщика к которому пришёл макет без состояний, чтобы было куда дизайнера послать.
В третьих чтобы вместо очередной тирады о разнице в кнопках\ссылках и нужности дизайна состояний, просто давать ссылку.
Содержание
- Ссылки
- Введение
- Антипатерн
- Состояния
- Кнопки
- Доступность
- Состояния
- Отображение
- CSS
- Дизайнеру
- Спасибо
- Репозиторий на GitHub
Ссылки
Введение:
Ссылка которая кнопка
Когда наводят указатель на ссылку которая кнопка то в левом нижнем углу появляется надпись javascript:;:
Или адрес с решёткой:
ПКМ
на такой кнопке и контекстное меню любезно предложит:
ctrl
+ ЛКМ
на такой кнопке откроют новую вкладку на которой будет ровно та страница, с которой она была открыта.
Кроме того такая ссылка с решёткой в качестве ссылки, станет :visited
, если ещё не стала до этого, и приобретёт соотстветствующее стилевое оформление. Если дизайнер его конечно не зарезал, что в большинстве случаев конечно зря, о чём ниже.
В JavaScript скриптах для таких кнопок дополнительно используется e.preventDefault()
, чтобы предотвратить действие кнопки по умолчанию (переход по ссылке) — это костыль.
Ссылка
- Если клик приведёт к смене адреса,
- этот адрес можно скопировать,
- отправить по электронной почте,
- на него можно снова зайти,
- это не адрес самой страницы
— это ссылка.
У ссылки должны быть стили для обычного, :active
, :visited
, :focus
и :hover
состояний.
Антипатерн:
a {
color: black !important;
text-decoration: none !important;
cursor: default !important;
}
Поздравляю! С такими стилями все ваши ссылки визуально превратятся в обычный текст. Найти их на странице станет крайне затруднительно.
И помните, если вы ставите !important
и не очень понимаете почему вы без него не можете обойтись, то читайте это слово как импотент. Возможно вам нужно немного изменить селектор для того, чтобы перекрыть тот, который вам мешает.
Состояния:
a
— обычное состояние
a {
color: #0645ad;
cursor: pointer;
text-decoration: none;
}
В обычном состоянии a
должна быть синей или подчёркнутой, а лучше и синей и подчёркнутой, чтобы пользователь без наведения мыши понимал, что это — ссылка. Пользователь привык к тому, что синие слова на странице это ссылки, даже если они не подчёркнуты. Если вам не нравится синий цвет для ссылок, меняйте его, но обязательно ссылки подчёркивайте.
a:hover
— наведение
a:hover {
text-decoration: underline;
}
Когда курсор находится над ссылкой, она становится :hover
и в данном примере приобретает подчёркивание. Так пользователь поймёт, что это точно ссылка, на которую можно кликнуть.
a:focus
— фокус клавиатуры
a:focus {
text-decoration: underline;
}
Когда на ссылку устанавливается указатель, перемещаемый табулятором TAB ↹
она становится :focus
. В 2016 году это может показаться странным, но есть люди которые работают с сайтам посредством клавиатуры. У некоторых вовсе сломана мышь. В любом случае, занулять :focus
состояние — это преступление против таких людей.
Особые спецэфекты применять не обязательно, достаточно таких как у :focus
.
CSS чтобы не писать дважды:
a:focus, a:hover {
text-decoration: underline;
}
a:active
— клик
a:active {
color: #faa700;
}
Важное состояние :active
происходит когда пользователь уже кликнул на ссылку, но клавишу ещё не отпустил. Помогает пользователю понять, что его клик сработал, и ему не нужно кликать по ней несколько раз, чтобы точно перейти на нужную страницу.
a:visited
— ранее посещённая страница
a:visited {
color: #0b0080;
}
Можно все посмотреть‽
:visited
, поможет пользователю не забыть какие странички он уже открывал и не открывать их повторно. Так вместе с :active
и :hover
мы чуточку разгрузим интернет от случайных загрузок, и сделаем его чуть лучше и быстре.
Пример нестандартного оформления ссылок:
Слова в ссылке должны подчиняться правилам русского языка, капс непозволителен (исключение — аббревиатуры)
HTML5
- Если клик не меняет адрес страницы,
- адрес нельзя скопировать
- и нельзя этим адресом поделиться — это кнопка.
В кнопке позволителен капс, при условии, что вы не используете аббревиатуры. Особенно в неочевидных местах.
Если у вас встречаются аббревиатуры, то верхний регистр в кнопке не желателен, выделяйте их другим способом. Не искушайте пользователей тапать по тому, что не тапается. У пользователей тачскрина нет возможности подсмотреть:hover
или:focus
состояние. Ну или есть, но происходит это всё не очень удобно, обычно уже после свершившегося тапа.
Доступность
может быть недоступен на архаичных браузерах или устройствах. У кнопок не применятся стили без специальных JavaScript скриптов.
Но вас это не должно беспокоить. На таких устройствах часто и JavaScript не работает. И быть может CSS.
Вообще если следовать идеологии что всё, что должно обрабатываться JavaScript’ом, должно добавляться JavaScript’ом, такой проблемы вовсе не возникнет.Что JSΩ, то JSॐ! Как говорится.
Состояния
Похожи на состояния у ссылок за исключением того, что у кнопок нет состояния :visited
, зато есть состояние :disabled
.
Обычно дефолтное оформление браузера выпиливается основательно, иногда с нейтрализацией отображения состояний отличных от обычного.
Да. Этот гайд для тебя, любитель превратить веб-страницу в бумажный аналог.
Стилей для этих штучек понадобится немного больше, но всё не так страшно. Кроме того ребята из Twitter и отчасти Google уже позаботились о реализации велосипеда.
Тёплый ламповый Bootstrap и новомодный MaterializeCSS, например.
Так выглядит в моём Chrome 54:
На картинке button
, button:hover
, button:focus
, button:active
соответственно.
Без излишеств. Но учитывая движение Google в направлении Material Design, вполне может статься так, что в скором времени их заменят на подобные аналоги.
Для наглядности — мой вариант велосипеда который выглядит странновато, но для примера сойдёт.
Обычная, наведение, клик, отключена соответственно.
button
— обычное состояние
button {
background: none;
outline: none;
border: none;
text-transform: uppercase;
}
button:hover
, button:focus
— при наведении
button:hover, button:focus {
color: hsla(108, 12%, 0%, 1);
box-shadow: -1px 1px 2px hsla(108, 62%, 42%, 1);
background-color: hsla(108, 62%, 92%, 1)
}
button:active
— в момент клика
button:active {
color: hsla(108, 42%, 32%, 1);
box-shadow: -2px 4px 8px hsla(64, 64%, 42%, 1);
background-color: hsla(64, 64%, 92%, 1);
}
button:disable
— отключена
button:disabled {
color: hsla(0, 0%, 64%, 1);
background: none;
box-shadow: none;
opacity: 1;
}
ДизайнеруТы цээсэсов можешь и не знать, но состояния отрисовать обязан!
От дизайнера помимо макета с обычным состоянием ссылки или кнопки, требуется прилагать различные состояния, дабы не устраивать верстальщику батхерт.
Например так:
Ребята из Google сделали такой макет.
Спасибо
Спасибо, что дочитали. Всё здесь написаннное не является 100% истиной в последней инстанции.
Репозиторий
GitHub
Комментарии (16)
16 декабря 2016 в 01:24
+3↑
↓
16 декабря 2016 в 02:52
+6↑
↓
Позанудствую: исключая случай сабмита формы.16 декабря 2016 в 09:01
+2↑
↓
золотое правило для любого UI — пользователю должно быть понятно что произойдёт если он куда-то тыкнет.Сечас, в 2016 году, разницы между переходом по ссылке и процессом сабмита страницы (как это задумывалось 20 лет назад) визуально почти нет. Да и самого сабмита порой нет. А URL`ы нечитаемые, типа site.com/do? action=123). И дефолтовое поведение элементов HTML давно пало в неравной борьбе с требованиями маркетологов к внешнему виду.
16 декабря 2016 в 01:30
+6↑
↓
Состояние pressed больше похоже на приподнятую кнопку, а не нажатую.16 декабря 2016 в 02:05
0↑
↓
Да, наведение и клик поменять бы. Вообще, если очень хочется сделать ссылку кнопкой, не стоит забывать про role=nitton16 декабря 2016 в 07:48 (комментарий был изменён)
+1↑
↓
Оффтоп — почему то мне всегда казалось, что у кнопок 6 состояний
Активна
Навели
Нажали
Отжали
Заблокирована
ОжидаетНажать на кнопку, ну для примера — сохранить. По логике ни одно из состояний не подходит. Ни одно из них не «говорит» пользователю — «подожди».
16 декабря 2016 в 08:31
0↑
↓
Для состояния «Ожидает» обычно используют disabled и надпись «Подождите…» — костыль конечно, зато наглядно
16 декабря 2016 в 08:46
+3↑
↓
Мне показалось, что если я проголосую «неправильно», автор меня выследит16 декабря 2016 в 09:58
+1↑
↓
Вот доклад на эту же тему от pepelsbey с обсуждением сабжа16 декабря 2016 в 11:37 (комментарий был изменён)
0↑
↓
16 декабря 2016 в 11:55
0↑
↓
12 слайд для меня. Спасибо
16 декабря 2016 в 09:59
+3↑
↓
Меня очень радует неизменное повышение уровня материалов на хабре.
Огромное спасибо за статью, за ваш труд.
Хотелось бы видеть продолжение. Очень интересуют тонкости использования тега title.16 декабря 2016 в 10:59
+1↑
↓
Хватит так шутить, а то вы плохо знаете автора.
16 декабря 2016 в 11:03
0↑
↓
Да, и расскажите, обязательно в каких случаях применять тег title, а в каких — атрибут. И как их не перепутать.
16 декабря 2016 в 11:51
0↑
↓
Только сейчас заметил, что habracut — это кнопка16 декабря 2016 в 11:53
0↑
↓