Если коротко:
Используйте для кнопок — кнопки, а для ссылок — ссылки.
Это не исчерпывающее руководство по кнопкам и не пример невероятного дизайна, а лишь попытка показать, что есть разница между ссылками и кнопками.
Для кого эта статья?
В первую очередь для дизайнера который делает макет сайта, но не дорисовывает детали свойственные вебу. Своеобразная попытка объяснить, что веб-сайт лежит за пределами плоской полиграфии.
Во вторых для верстальщика к которому пришёл макет без состояний, чтобы было куда дизайнера послать.
В третьих чтобы вместо очередной тирады о разнице в кнопкахссылках и нужности дизайна состояний, просто давать ссылку.
Содержание
Ссылки
Введение
Когда наводят указатель на ссылку которая кнопка то в левом нижнем углу появляется надпись javascript:;:
Или адрес с решёткой:
ПКМ на такой кнопке и контекстное меню любезно предложит:
ctrl + ЛКМ на такой кнопке откроют новую вкладку на которой будет ровно та страница, с которой она была открыта.
Кроме того такая ссылка с решёткой в качестве ссылки, станет :visited , если ещё не стала до этого, и приобретёт соотстветствующее стилевое оформление. Если дизайнер его конечно не зарезал, что в большинстве случаев конечно зря, о чём ниже.
<a href=»//link.url»>Ссылка</a>
- Если клик приведёт к смене адреса,
- этот адрес можно скопировать,
- отправить по электронной почте,
- на него можно снова зайти,
- это не адрес самой страницы
— это ссылка.
У ссылки должны быть стили для обычного, :active , :visited , :focus и :hover состояний.
Антипаттерн
Поздравляю! С такими стилями все ваши ссылки визуально превратятся в обычный текст. Найти их на странице станет крайне затруднительно.
Состояния
a — обычное состояние
В обычном состоянии a должна быть синей или подчёркнутой, а лучше и синей и подчёркнутой, чтобы пользователь без наведения мыши понимал, что это — ссылка. Пользователь привык к тому, что синие слова на странице это ссылки, даже если они не подчёркнуты. Если вам не нравится синий цвет для ссылок, меняйте его, но тогда ссылки подчёркивайте.
a:hover — наведение
Когда курсор находится над ссылкой, она становится :hover и в данном примере приобретает подчёркивание. Так пользователь поймёт, что это точно ссылка, на которую можно кликнуть.
a:focus — фокус клавиатуры
Когда на ссылку устанавливается указатель, перемещаемый табулятором TAB ↹
она становится :focus . В 2016 году это может показаться странным, но есть люди которые работают с сайтам посредством клавиатуры. У некоторых вовсе сломана мышь. В любом случае, занулять :focus состояние — это преступление против таких людей.
Особые спецэфекты применять не обязательно, достаточно таких как у :focus .
CSS чтобы не писать дважды:
a:active — клик
Важное состояние :active происходит когда пользователь уже кликнул на ссылку, но клавишу ещё не отпустил. Помогает пользователю понять, что его клик сработал, и ему не нужно кликать по ней несколько раз, чтобы точно перейти на нужную страницу.
a:visited — ранее посещённая страница
:visited , поможет пользователю не забыть какие странички он уже открывал и не открывать их повторно. Так вместе с :active и :hover мы чуточку разгрузим интернет от случайных загрузок, и сделаем его чуть лучше и быстре.
В эпоху HTML4 вместо кнопок использовались ссылки подчёрнутые пунктирной линией. Этот паттерн устарел.
Подчёркивание пунктирной линией рекомендуется для тултипов при наведении.
Например у <abbr> такое выделение поможет понять, что можно навести указатель и получить расшифровку.
Пример нестандартного оформления ссылок:
HTML5 <button>Кнопка</button>
- Если клик не меняет адрес страницы,
- адрес нельзя скопировать
- и нельзя этим адресом поделиться — это кнопка.
Доступность
<button /> может быть недоступен на архаичных браузерах или устройствах. У кнопок не применятся стили без специальных JavaScript скриптов.
Но вас это не должно беспокоить. На таких устройствах часто и JavaScript не работает. И быть может CSS.
Вообще если следовать идеологии что всё, что должно обрабатываться JavaScript’ом, должно добавляться JavaScript’ом, такой проблемы вовсе не возникнет.
Поведение внутри формы
<button> по умолчанию имеет атрибут type=submit даже если его не прописать.
Ещё этот атрибут может принимать значения reset для сброса заполнения в форме
и button чтобы исключить влияние на форму. Правила хорошего тона предполагают,
что везде нужно писать <button type=»button»>Кнопка</button> .
Но на деле можно ограничится полной записью только внутри <form></form> ,
type=submit в остальных местах ни на, что не влияет.
Это кстати отличный сбособ для стилизации кнопки отправки формы.
В отличии от <input type=»submit» value=»Кнопка» /> , в содержимое
button можно писать любой HTML код, а не только текст.
Например
Это даёт даже больше свободы в стилевом оформлении чем <input type=»image» />
Состояния
Похожи на состояния у ссылок за исключением того, что у кнопок нет состояния :visited , зато есть состояние :disabled .
Обычно дефолтное оформление браузера выпиливается основательно, иногда с нейтрализацией отображения состояний отличных от обычного.
Да. Этот гайд для тебя, любитель превратить веб-страницу в бумажный аналог.
Стилей для этих штучек понадобится немного больше, но всё не так страшно. Кроме того ребята из Twitter и отчасти Google уже позаботились о реализации велосипеда.
Тёплый ламповый Bootstrap «и новомодный MaterializeCSS, например.
Отображение
Так выглядит <button>Кнопка</button> в моём Chrome 54:
На картинке button , button:hover , button:focus , button:active соответственно.
Без излишеств. Но учитывая движение Google в направлении Material Design, вполне может статься так, что в скором времени их заменят на подобные аналоги.
Как узнать ссылку кнопки на сайте
Просмотр профиля
Группа: User
Сообщений: 1
Регистрация: 21.2.2016
Поблагодарили: 0 раз
Репутация: 0
Ребят, помогите советом.
Вот страница http://hroost.com — видите, сверху есть неумело установленная менюшка с валютой — украина, россия ? и кнопка «валюта». Скажите, можно ли узнать, какая получается ссылка при нажатии на «валюта»? чтобы назначить вместо этой менюшки обычные ссылки, нажимая на которые я смогу менять валюту на сайте. Спасибо
Webmaster_hb
Просмотр профиля
/>
Группа: User
Сообщений: 7538
Регистрация: 5.3.2007
Поблагодарили: 0 раз
Репутация: 0
тут просто кнопку нельзя заменить ссылкой
т.к. это форма с данными которые отправляются на сервер при нажатии на кнопку
если и делать вместо кнопки ссылки, без переделки серверной части сайта
то нужно на ссылку назначить javascript который активирует отправку данных из этой формы, т.е. это уже будет не ссылка — но внеше для пользователь сайта она будет выглядеть кака ссылка
Как узнать ссылку кнопки на сайте
Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal
- July 2018
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Так ведь кнопка — это ж просто картинка со ссылкой. Если у вас есть картинка и вы знаете адрес сайта, пишете такой примерно код:
(Все квадратные скобки заменить на угловые)
Это кнопка сайта Шендеровича. В первой строке — адрес сайта, во второй строке — адрес картинки-кнопки и ее длина-ширина-рамочка (эти параметры можно опустить)
Ага! Ну тут вообще все просто, главное эту кнопку найти. )
Находите понравившуюся кнопку, на ней кликаете правой кнопкой мышки и выбираете пункт «Свойства»
Из открывшегося окна копируете адрес. Как правило он оканчивается на что-то типа «имя файла».jpg или «имя файла».gif — файлы-картинки.
0 / 0 / 0 Регистрация: 26.05.2009 Сообщений: 6 |
|
1 |
|
26.05.2009, 14:31. Показов 6959. Ответов 5
Может кто подскажет как определить URL кнопки на странице. В строке адреса не прописывается. пишеет внизу но очень быстро Заранее благодарен.
0 |
51 / 17 / 6 Регистрация: 18.05.2007 Сообщений: 1,322 |
|
26.05.2009, 15:01 |
2 |
Смотришь исходник страницы с кнопкой и ищешь куда по клику эта кнопка перенаправляет.
0 |
0 / 0 / 0 Регистрация: 26.05.2009 Сообщений: 6 |
|
26.05.2009, 15:47 [ТС] |
3 |
Это правильно.
0 |
51 / 17 / 6 Регистрация: 18.05.2007 Сообщений: 1,322 |
|
27.05.2009, 08:13 |
4 |
Значение атрибута action (вместе с доменным именем текущей страницы) и есть искомый URL.
0 |
0 / 0 / 0 Регистрация: 26.05.2009 Сообщений: 6 |
|
27.05.2009, 14:31 [ТС] |
5 |
не подходит
0 |
0 / 0 / 0 Регистрация: 29.05.2007 Сообщений: 354 |
|
27.05.2009, 16:36 |
6 |
как это не подходит?
0 |
$(document).on('click', '.add-to-card-one', function() {
let href = $(this).prev('a.add_to_cart_button').attr('href');
if (href !== undefined) {
console.log(href);
//location.href = href; // <--- надо раскоментировать
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<a href="https://example.com/" data-quantity="1" class="add_to_cart_button" data-product_id="1111" data-product_sku="222" aria-label="Выберите опции" rel="nofollow">Выберите параметры</a>
<!-- plugin version: 2.4.3; mode: show_add_to_card -->
<button type="button" data-value-product-id="225011" class="add-to-card-one" id="custom-order-button-225011">Купить в один клик</button>
Сделал такой код на jquery но как его перевести в чистый js ?
Как получить значение href при клике на класс menu-item-text
$('.menu-item-text').click(function(){
let b = $(this).attr('href').replace('#', '');
$('[name="'+b+'"]').scrollIntoView({block: "center", behavior: "smooth"})
})
-
Вопрос заданболее двух лет назад
-
506 просмотров
document.querySelector('.menu-item-text').addEventListener("click", (e) => {
const elem = e.target.getAttribute('href').replace('#', '');
document.querySelector(`[name="${elem}"]`).scrollIntoView({block: "center", behavior: "smooth"});
});
const handleClick(el) {
const href = el.target.getAttribute('href').replace('#', '');
document.querySelector(`[name="${href}"]`).scrollIntoView({block: "center", behavior: "smooth"});
};
document.querySelectorAll('.menu-item-text').forEach(el => el.addEventListener('click', handleClick));
document.addEventListener('click', function myClickHandler(evt) {
const menuItem = evt.target.closest('.menu-item-text');
if (menuItem) {
const b = menuItem.href.hash.replace('#', '');
console.log(b);
}
});
Пригласить эксперта
-
Показать ещё
Загружается…
27 мая 2023, в 23:03
10000 руб./за проект
27 мая 2023, в 22:55
1000 руб./за проект
27 мая 2023, в 22:42
500000 руб./за проект
Минуточку внимания
Последнее время я работаю только с бекендом разнообразных проектов и к фронту и тому что там происходит обращаюсь все реже и реже. А происходит там довольно много интересного, фронтенд обвешивается разного рода фреймворками по типу vue.js, лоадерами по типу requirejs и библиотеками, все это минимизируют в пару файлов и когда возникает необходимость быстро разобраться где нужный участок кода становится очень сложно, особенно когда ты только начинаешь работать с новым проектом и еще не знаком с его структурой. Очень помогает справиться с этой проблемой отладчики встроенные в браузере. Сегодня, я решил сделать для себя заметку о том, как найти код навешенный на кнопку или ссылку, и начать его дебажить..
Для фронтенд разработчиков, это наверное ежедневная задача, но я сталкиваюсь с ней от случая к случаю, поэтому вечно забываю последовательность того, как я это делаю.
Для начала создадим в jsfiddle кнопку и с помощью jquery навесим на нее несколько событий.
Код на JSFiddle: https://jsfiddle.net/orlov0562/k0szx2tf/
html код
<span id=«price»>100$</span> <button id=«test»>Test</button> |
js
let someMethod=()=>{for(let i=0;i<10;i++){console.log(‘i: ‘+(i+1));$(‘#price’).html((Number.parseInt($(‘#price’).html())+i)+‘$’)}};$(‘#test’).click(e=>console.log(‘Hello world 1’));$(‘#test’).click(someMethod);$(‘#test’).click(e=>console.log(‘Hello world 2’)); |
тот же код но не минифицрованный
let someMethod = () => { for (let i=0; i<10; i++){ console.log(‘i: ‘+(i+1)); $(‘#price’).html((Number.parseInt($(‘#price’).html())+i)+‘$’); } }; $(‘#test’).click(e=>console.log(‘Hello world 1’)); $(‘#test’).click(someMethod); $(‘#test’).click(e=>console.log(‘Hello world 2’)); |
код для тех, кто не хочет использовать jsfiddle
<html> <body> <span id=«price»>100$</span> <button id=«test»>Test</button> <script src=«https://code.jquery.com/jquery-3.4.1.min.js»></script> <script> let someMethod=()=>{for(let i=0;i<10;i++){console.log(‘i: ‘+(i+1));$(‘#price’).html((Number.parseInt($(‘#price’).html())+i)+‘$’)}};$(‘#test’).click(e=>console.log(‘Hello world 1’));$(‘#test’).click(someMethod);$(‘#test’).click(e=>console.log(‘Hello world 2’)); </script> </body> </html> |
Пример на первый взгляд простой, но на то он и пример.
При запуске этого примера мы увидим кнопку и цену 100$, при нажатии на кнопку цена становится 145$. Ваша задача найти js код который отвечает за изменение цены и посмотреть как это происходит в дебагере. Думаю, что это похоже на то, когда вы в интернет магазине нажмете кнопку «Добавить скидочный купон» и цены пересчитываются, и допустим в пересчетах есть ошибка и вам надо найти кусок js кода где это происходит.
Для этого в Google Chrome (скриншоты будут из него, в Firefox будет +/- аналогично) на нужной кнопке нажимаем правой кнопкой мыши и выбираем «Inspect».
Chrome. Пунгк меню Inspect
В открывшейся консоли разработчика мы увидим наш элемент, если это не так, то просто найдите его в DOM дереве и нажмите на него для выделения. Следующим шагом переходим на вкладку «Event Listeners». На этой вкладке будет древовидный список всех событий связанных с выбранным элементом (в нашем случае кнопкой), жмем там на элемент «click» и раскрываем его
Chrome. Консоль разработчика. Event Listeners
Т.к. наш пример сделан внутри JsFiddle то мы видим несколько событий связанных с нашей кнопкой. Нам нужно найти нужное нам событие, чтобы начать там отладку. Для этого можно раскрыть нужное событие и посмотреть на вложенный элемент «handler»
Chrome. Консоль разработчика. Event listener handler
Таким образом можно, сразу пропустить не интересующие нас обработчики. Далее, если не понятно нужный это обработчик или нет, или в случае если это нужный, то нажимаем на ссылку, указывающие на файл в котором описан данный обработчик.
Chrome. Консоль разработчика. Найти место объявления обработчика
После нажатия, наc перекинет на вкладку Source в место объявления обработчика
Консоль разработчика Chrome. Место объявления обработчика.
Тут мы можем посмотреть то место где объявлен обработчик, его код, а так же можем начать отладку. Если же мы сразу видим, что это не то, что нужно мы можем вернуться на предыдущий шаг перейдя на вкладку «Elements».
Т.к. код минифицирован, а зачастую именно так и будет, то не совсем понятно он это или не он. Неплохо было бы его отформатировать, чтобы было удобнее читать. К счастью, сделать это можно в этом же окне, нажимаем кнопку с фигурными скобками в футере окна
Chrome. Консоль разработчика. Форматирование кода в дебаггере.
Откроется новая вкладка «formatted», где js код будет отформатирован
Консоль разработчика, отформатированный код в отладчике JS
Теперь, устанавливаем точку останова, нажав на нужную строку. Нажимаем нашу кнопку и видим, что отладчик остановился на нужной строке.
Консоль разработчика, точка останова в отладчике
На этой картинке
- 1 — нажимаем на строку, для того, чтобы установить, убрать точку останова
- 2 — нажимаем на нашу кнопку, чтобы сгенерировать событие
- 3 — строка где остановится отладчик
- 4 — кнопки управления отладчиком
- 5 — Область переменных и их значения на текущем шаге
Далее, с помощью кнопок отладчика исследуете код и нужные переменные. В нашем случае, можете понажимать на кнопку «Step over next function call» или F10 на клавиатуре и увидите пошагово как меняется значение рядом с кнопкой в отладчике.
Chrome отладчик в консоле разработчика
Заключение
Как видите, зная куда нажимать можно очень быстро найти нужный кусок JS кода, а так же провести его отладку. Что касается самого отладчика, советую уделить ему пару часов и разобраться, что и как работает — это сэкономит много времени в будущем. А у меня на сегодня все 🙂