LINUX.ORG.RU

Странный вопрос

 , ,


1

1

Всем привет!

Давно один вопрос заботит. Скажем, есть 5-10 элементов (кнопки). Их можно отобразить через тек <a> и сделать его таким как надо классами, а можно через тег <div> (опять же с классами). Собственно - вопрос, что лучше использовать (да и более правильно) с точки зрения производительности? Если можно - с пруфами на ответ.

Всем заранее спасибо!

5-10 элементов

Как угодно.

кнопки

Если ссылки — <a>, если кнопки — <button>, если кнопки, но достало спорить с браузерами — <div>.

x3al ★★★★★
()

делай div потому что в div можно сделать на css кнопку с подсветкой на hover и нажатие. плюс divы можно через css менять местами для разных размеров и ориентаций экрана:

всю верстку оборачиваешь в <div id=«wrapper»> и на js по событию ориентации экрана/размера добавляешь wrapperу подходящий класс. а затем в разных css-файлах(vertical.css, horizontal.css, smartphone.css, desktop.css и т.д. можно отдельно сверстать для каждого варианта).

а вот с <a> придется потрахаться, он злее и не всегда визуально хорошо выглядит.

i36_zubov ☆
()

Ребят, вы чего пишете то, какие div... Если это «кнопка» значит button, если ссылка значит a, если блок то div. Если вдруг отпадут стили, что юзер увидит?

Deleted
()
Ответ на: комментарий от i36_zubov

Я надеюсь ты просто троллишь

Deleted
()
Ответ на: комментарий от Deleted

Если вдруг отпадут стили, что юзер увидит?

Если вдруг отпадут стили, то надо что бы не отпадали. Регрессивность сейчас уже никого не волнует.

umren ★★★★★
()
Ответ на: комментарий от silver-bullet-bfg

Не имеет значение. ИМХО разница если и будет, то минимальная.
Но я бы действовал согласно семантике, если JS - то <button>, если ссылка - то <a>, в некоторых вариантах возможен и div.

FIL ★★★★
()
Последнее исправление: FIL (всего исправлений: 1)
Ответ на: комментарий от umren

Хорошо, другой пример, ты видел когда нибудь не семантичную верстку с медленным соединением? А еще бывают слепые люди которые используют скрин ридер и если у тебя верстка див на диве и дивом погоняет.. ты сам понимаешь

Deleted
()
Ответ на: комментарий от silver-bullet-bfg

В реальности таких кнопок надо вывести более 100

Ты что-то делаешь не так.

ritsufag ★★★★★
()
Ответ на: комментарий от umren

Я к тому что семантику не дебилы придумывали

Deleted
()
Ответ на: комментарий от anonymous

div уже не модный, нынче в моде section и article. Чёткие пацаны делают кнопки на них. Правда некоторые дебилы считают что это не семантично, но это очевидный бред, ведь section и article дофига семантичные и каждый такой тег даёт +3 к семантичности страницы.

MrClon ★★★★★
()
Ответ на: комментарий от i36_zubov

а вот с <a> придется потрахаться, он злее и не всегда визуально хорошо выглядит.

Но ссылки div'ами делают только мудаки.

Ссылки — это то, что меняет URL, если что.

x3al ★★★★★
()
Ответ на: комментарий от Deleted

и если у тебя верстка див на диве и дивом погоняет

aria-role.

Нет, я не отрицаю, что button часто лучше, но всё же.

x3al ★★★★★
()
Ответ на: комментарий от Deleted

А еще бывают слепые люди которые используют скрин ридер и если у тебя верстка див на диве и дивом погоняет.. ты сам понимаешь

Бывают, но в реальности это прописывается в требованиях, ты же не будешь оптимизировать «верстку» под 99.9% юзкейсов годами?

umren ★★★★★
()
Ответ на: комментарий от MrClon

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

i36_zubov ☆
()
Ответ на: комментарий от i36_zubov

А у меня всё работает. И у остального человечества работает. Может проблема не в media queries, а в тебе?

MrClon ★★★★★
()
Ответ на: комментарий от i36_zubov

Url меняется через history api. Я так делал чтоб не перезагружать общую для всех страниц часть и УМВР.

Только ты ломаешь средний клик и букмарки по правому клику.

x3al ★★★★★
()
Ответ на: комментарий от umren

Не надо оптимизировать:) можно же просто правильно написать сразу и везде у тебя будет все оптимизировано сразу:)

Deleted
()
Ответ на: комментарий от x3al

Зачем использовать <a href='/somepage.html'> если можно использовать прогрессивные JS фрэймворки с shadow DOM, history API и web elements?

MrClon ★★★★★
()
Ответ на: комментарий от Hater

Ах да, ещё man преждевременная оптимизация.

Hater ★★
()
Ответ на: комментарий от znenyegvkby

Если учитывать то, что семантически правильный button в среднем на странице используется в 2-3 экземплярах, то я не понимаю о чем статья, я понимаю если у тебя их на странице 100500, но как часто такие кейсы?

Deleted
()
Ответ на: комментарий от x3al

Да это все понятно, но просто не находишь обсурдным брать стол и делать из него стул, если изначально можно просто взять стул?)

Deleted
()
Ответ на: комментарий от MrClon

Нет, уж точно не во мне. У меня не работал пример из mozilla developer network. Возможно я просто что то сделал не так как хотел браузер но у меня нет друзей-телепатов чтоб узнать чего это браузер не слушается

i36_zubov ☆
()
Ответ на: комментарий от i36_zubov

А при чем тут клик? В доке на history api про это не сказано. Может быть вы наблюдали баг браузера?

Когда ты делаешь ссылку через <a href=...> и пользуешь свой history api — она ведёт себя как ссылка, выдаёт URL цели по наведению, открывается в новой вкладке по средней кнопке мыши, сохраняется/копируется/букмаркается из контекстного меню.

Когда мудаки пользуют history api из обработчика button или div — ничего не работает.

Когда не умеющие в веб люди пользуют <a href=«javascript:void(0)» для кнопок просто потому, что не открыли для себя cursor: pointer — ну что с них взять.

Это не семантика, а банальная юзабельность. Вот эти вещи не делаются CSS/aria/чем угодно и именно из-за них нам ещё нужен тег <a>, тем более что

а вот с <a> придется потрахаться, он злее и не всегда визуально хорошо выглядит.

миф.

x3al ★★★★★
()
Ответ на: комментарий от MrClon

Зачем использовать <a href='/somepage.html'> если можно использовать прогрессивные JS фрэймворки с shadow DOM, history API и web elements?

Все прогрессивные фреймворки могут отрисовать этот ваш <a href> и заставить его работать с history API.

x3al ★★★★★
()

С точки зрения производительности разницы совершенно никакой. Если это кнопки, то <button>, если ссылки, то <a>, если лишь бы извратиться, то <div>.

Psych218 ★★★★★
()
Ответ на: комментарий от MrClon

Что мешает прилепить ко всем <a> обработчик onclick, который сделает всё, что вы хотите (вам всё равно придётся лепить onclick к <div>)? Если что это можно сделать массово, сразу ко всем <a> или с определённым классом, а определять куда переходить по параметру href. Отличие в том, что браузер будет понимать, что это ссылка и корректно обработает средний клик, закладки и т. д.

Более того, нормальные фреймворки именно так и делают из коробки. На том же Meteor я пишу <a href=«some-page»>, а по факту если ссылка не внешняя происходит переход с помощью history API и динамической подгрузки контента.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 2)
Ответ на: комментарий от i36_zubov

Ну да, у всех работает, у тебя не работает, проблема очевидно не у тебя.

MrClon ★★★★★
()
Ответ на: комментарий от KivApple

Отличие в том, что браузер будет понимать, что это ссылка и корректно обработает средний клик, закладки и т. д.

Это же отвратительно! Возникает ощущение что ты находишься на какой-то вшивой странице, а не используешь продвинутое single page application! Фу таким быть.

MrClon ★★★★★
()
Ответ на: комментарий от Deleted

Семантически, кнопки правильно использовать только внутри форм. А теперь представь, что ты не только говно-сайты клепаешь, а еще и различные web-морды в стиле программ для крупных систем. Недавно реализовывали такую для системы остатков поставщиков крупной фирмы, дак вот там юзабилити-специалисты еще и пытались минимизировать количество различных кнопок на странице. В итоге различных элементов (не только кнопок) больше 500 на одной странице (по сути все страницы состояли из одних элементов для работы с функционалом), и скриптами постоянно добавлялись/удалялись. Вот там, это было бы актуально, если бы кто-нибудь из хтмээльников додумался бы до button[type=«submit»] вне формы. А так да, если у тебя на странице одна форма, то внутри (чисто семантически) лучше использовать button, опять же, учитывая то, что он стилизуется гораздо хуже чем тот же пресловутый div. Как-то так.

znenyegvkby ★
()
Ответ на: комментарий от znenyegvkby

Семантически, кнопки правильно использовать только внутри форм.

Может мы говорим о разных семантиках, но той семантике которую знаю я ни чуть не мешает кнопка вне формы.

Да, изначально в HTML button рассматривался только как элемент формы, но на сколько мне известно сейчас это это представление закопали.

MrClon ★★★★★
()
Ответ на: комментарий от MrClon

но той семантике которую знаю я ни чуть не мешает кнопка вне формы.

Я об этом написал.

если бы кто-нибудь из хтмээльников додумался бы до button[type=«submit»] вне формы

Опять же, это лишняя трата в плане производительности (смотрите тесты выше) и жертва стилизации в противовес тем же a или div. Но в плане семантики button[type="submit"] вне формы тоже валидно, согласен. Тогда скажу по другому: я бы советовал использовать button только внутри форм.

znenyegvkby ★
()
Ответ на: комментарий от znenyegvkby

Чёт не пойму. А зачем сабмит вне формы?

Ну и сотни кнопок на одной странице это что-то странное, мне трудно такое представить. Или оно там было разделено на несколько (много) независимых вьюшек (табов или чего-то такого) которые отображались по очереди?

MrClon ★★★★★
()
Ответ на: комментарий от x3al

Задолбаешься прописывать и потом ещё реализовывать поведение, идентичное кнопке. Это тебе сейчас кажется «а что такого, клик и клик», а потом пользователи тебя четвертовать захотят.

anonymous
()
Ответ на: комментарий от znenyegvkby

Тогда скажу по другому: я бы советовал использовать button только внутри форм.

Contexts in which this element can be used:
Where phrasing content is expected.

https://developers.whatwg.org/the-button-element.html#the-button-element https://developers.whatwg.org/content-models.html#phrasing-content

Шёл бы ты со своими советами.

anonymous
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.