Как стать автором
Обновить

Комментарии 93

вариантов создания кнопок много, только я вот не понял, кому вообще в голову пришла идея создавать кнопки на стороне сервера?
не, это-то я знаю, я имею в виду конкретно эту фирму. При условии использования фреймворков еще это можно себе представить, хотя я лично считаю это полным бредом, а вот если движок сайта не предусматривает фреймворков, я бы на месте «пехапистов» тоже возмутился. Это кроме того, что на деле при большом количестве графики на странице, отдача графики скриптами — большое зло, которое сильно увеличивает нагрузку на сервер.
стоп, а что мешает сделать какую-нибудь адовую function button(array $params), которая будет собирать нужный html исходя из параметров? Это можно сделать в любом говнопроекте без фреймворка. Тем более нагрузка будет не больше, чем, к примеру, динамически вывести инпут со значением в нем.
Где в django кнопки на сервере создаются? Инпуты — на сервере можно генерировать, а кнопки надо вставлять вручную.
Кнопки можно вставлять с помощью html-хелперов. В этом случае они собираются по частям где-то в дебрях серверных скриптов. Когда кнопка состоит из множества элементов, код её сборки похож на кашу.
*[class*=neobtn] {

Так уже не модно?

.neobtn {
В таком случае .neobtn-thick не унаследует свойств .neobtn
Было бы, наверное, правильнее

<button class="neobtn neobtn-thick">Текст кнопки</button>
скорее даже так
<button class="neobtn thick">Текст кнопки</button>


селекторы будут проще и поиск по ним гораздо быстрее
в варианте автора… мне кажется это жесть
Ну это уже зависит это самой систематизации всего приложения.
В некоторых случаях, neobtn-thick будет лучше, т.к. встретив это в css сразу понятно к чему относится и что от него зависит.
НЛО прилетело и опубликовало эту надпись здесь
согласен, но комментарий был про то, что селекторы типа
*[class*=neobtn-thick] гораздо медленнее чем .neobtn {} и использовать их повсеместно мне кажется неправильно.
Всё можно сделать обычными классами.А для удобной разработки css можно использовать, например less(но на боевом использовать скомпилированный вариант конечно же)
Гораздо медленнее — это сколько?
Настолько, что ваш крупный сайт со сложным dom-деревом зависнит наглухо в каком-нибудь ie7(про 6-ой можно и не упоминать)

Селектор *[class*=neobtn-thick] означает пройтись по всем элементам и найти среди них те, у которых есть атрибут class, в котором *внимание* содержится значение neobtn-thick. Сами думайте на сколько он медленный
>про 6-ой можно и не упоминать
Почитайте топик сперва. Не позорьтесь.

За полгода использования метода никто не лёг.

Запись .neobtn-thick означает то же самое.
Браузер не вуду, для него *[class*=neobtn-thick] и .neobtn-thick сов-но разные вещи. Если вы этого не понимаете очень жаль. Не один я пытаюсь донести эту мысль. Что можно сказать, читайте больше умных книг… например Реактивные веб-сайты
В свою очередь, я пытаюсь донести простой факт, что метод разработан не вчера, а полгода назад и совершенно нормально работает на вполне развитом проекте. А у вас кроме книжных данных и сказать то нечего.
НЛО прилетело и опубликовало эту надпись здесь
Никого из вас не смущает, что в статье прямо сказано о том, что в ИЕ6 метод не работает?
НЛО прилетело и опубликовало эту надпись здесь
— При покупке машины мы абстрагируемся от того, какое мало в неё лить и как часто менять. Мы ведь купили именно машину.

Вот это facepalm.
НЛО прилетело и опубликовало эту надпись здесь
Тем хуже для книжных данных.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
К моему сожалению, в книге нет ничего о способах и условиях, в которых производился замер скорости. Единственно ссылки на Виталия Харисова. При всём уважении, но я не вижу в ней ничего умного о CSS-селекторах.
Дело, по-моему, даже не в том, что медленнее. Это семантически неправильно — понимать имя класса как строку, у которой есть подстроки; его следует понимать как неделимую сущность.
Это тоже… найдётся же умник, который напишет *[class*=a] подразумевая … и всё… счастливой отладки....:)

Скорость тут не имеет значения, пока проект небольшой… когда он разрастётся… это станет ощутимо… и тогда начнутся реальные проблемы… всё переписывать. Поэтому системные вещи нужно очень осторожно разрабатывать.
сорри, подразумевая
<b class="a"></b>
Это вот вообще не проблема.
Нет никакого труда определить какие привила применены к элементу.
А кроме того, именно во избежание подобных случаев, я и рекомендую начало имени класса делать уникальным.
Кстати, подумалось — а что плохого в составных именах классов? Даже безотносительно этих кнопок, вообще.
Например, классы «homo-erectus» и «homo-sapiens». Кто запрещает выделить общую (и по написанию, и логически, и семантически) часть «homo»?

Я не говорю, что такой подход может быть повсеместной практикой, но в определенных случаях — почему нет?
Плохого в них то, что CSS не позволяет обращаться к составляющим. Селектор E[attr*="value"], к сожалению, обращается к фрагменту строки, безотносительно того, является ли он цельной составляющей или нет. Старый селектор E[attr|="value"] как раз способен анализировать атрибут с учётом разделителей, но — увы! — не понимает мультиклассовый атрибут, анализируя его значение как одно, а не как несколько. Поэтому он хорошо работает для атрибута идентификатора id, а в случае классов так же ненадёжен, как его коллега из CSS3.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Редизайн, в той или иной степени, не возможен без перевёрстки. Если это редизайн всего проекта — значит всё равно всё менять. Если надо поменять только кнопку — достаточно просто найти всего один класс (тот что надо поменять) поиском по проекту и заменить его.

На деле дизайнер сразу продумывает внешний вид кнопок, который очень редко меняется в рамках текущего макета.
НЛО прилетело и опубликовало эту надпись здесь
Так было бы длиннее и, на первый взгляд, понятнее.
Приведённый выше способ не менее правильный.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Вы просто не умеете их готовить :)
НЛО прилетело и опубликовало эту надпись здесь
Было бы, наверное, правильнее

Текст кнопки
Мне осталась непонятной одна идея.
Почему нужно было пользоваться таким сложным селектором, когда можно было общие стили вынести в .neobtn, а стилизовать, добавляя второй класс (class='neobtn thick'). Если боялись коллизий можно было добавить короткий префикс к стилеобразующим классам ('neobtn nbn-thick'). Просто имхо, на большом DOM-дереве такие селекторы, хоть и незначительно, но увеличат время парсинга страницы (а на слабых мобилках возможно и значительно). Да и из JS работать будет удобнее (например, если на время ajax-загрузки захочется дизейблить все кнопки на странице).

В остальном — глубокий респект, В IE7 выглядит прекрасно и не создает каши в шаблонах. Единственное что я бы лично оставил хоть какую-то gracefull degradation для IE6. Хотя бы серый прямоугольник и картинку)
Поясняю.
Один класс, пусть и длинный, выглядит проще, чем много коротких. Сервер-сайд программистам так проще скопировать и вставить.
Эммм… Во-первых, при чем здесь сервер-сайт программисты? Во-вторых, один класс выглядит проще чем много коротких только на стороне html (где у вас одна строчка), а на стороне css например можно потеряться и не найти объявление общих свойств, если искать по ".neobtn" (если например новый клиент-сайд программер будет разбираться в вашем коде). В общем я клоню к тому, что увеличение нагрузки на парсер и усложнение селекторов кажется мне важнее чем «сложность» нескольких классов. К тому же, если thick не будет больше нигде использоваться отдельно — «neobtn-thick» выглядит менее естественно, чем «neobtn thick»)
Не обязательно же ради того, что бы просто добавить кнопку звать верстальщика.

Опять же, один класс как бы намекает на связанность слов в его имени. Сразу ясно, что «neobtn-thick-start» — это что-то одно, а «neobtn neobtn-thick neobtn-thick-start» или если ещё упростить «neobtn thick start» — просто три класса.

На стороне CSS, как говорит мне мой полугодовалый опыт, нет никаких проблем с поиском нужной строки. Более того, однажды написанные, они как правило не меняются. Разве что незначительно.

Нагрузка на парсер совершенно незначительна для проектов с количеством подобных элементов не более десятка-другого на страницу. Этого вполне хватает для среднестатистического проекта. В иных случаях конечно надо искать другие варианты.
НЛО прилетело и опубликовало эту надпись здесь
>Не обязательно же ради того, что бы просто добавить кнопку звать верстальщика.

Я имел ввиду добавление на страницу.
НЛО прилетело и опубликовало эту надпись здесь
Зато в CSS будет прекрасно:
neobtn.thick, neobtn.thick.start
Интересный вариант. но зачем придумывать колесо?
Это колесо с литыми дисками
А всё-таки, для кнопок ведь специальные тэги есть.
Расскажите об этом нашему дизайнеру.
Почему ваш дизайнер лезет в html?
Как правило, дизайнер, и не только наш, никуда не лезет. Он просто выдаёт шаблон со словами: «Что бы так и было».
Все же просто! Идете с шаблоном к директору и говорите, что такие элементы будете делать один (два три вариант зависит от студии и квалификации) день, может стоит упростить дизайн этого элемента. Дизайнер получает ЦУ от руководства, и делает как правильно. Profit!
И хороший дизайн после упрощений превращается в страшно убожество. Дальше по цепочке программисты тоже упрощают и он в итоге еще и криво работает.
НЛО прилетело и опубликовало эту надпись здесь
Да никаких проблем. Просто непонятно какая должна быть кнопка на которую целый день понадобится. Насчет button, я пока дзен не достиг и сложные кнопки верстаю, так мне быстрей и понятней. Описанный способ показался привлекательным, селекторы конечно спорные, но это дело вкуса.
НЛО прилетело и опубликовало эту надпись здесь
Покажите пожалуйста скрин красивого макета с такой кнопкой?
Сначала вы покажите мне кнопку которую нужно делать 1-2-3 дня.
К сожалению я не могу такой показать =) Потому что пример был абстрактный, что при виде такого не стандарта можно увеличить для руководства срок выполнения задачи в несколько раз и не быть заложником террориста дизайнера.
Хороший дизайн не нуждается в упрощениях.
1. Отдать шаблон директору
2. ?
3. PROFIT!
НЛО прилетело и опубликовало эту надпись здесь
Дело, как мне кажется, тут не в html. Просто подавляющее большинство дизайнеров не удовлетворяются стандартными страшными серыми кнопками. И все эти их выкрутасы с красивыми инпутами превращаются в батхерт для верстальщиков и чаще всего в кучу ненужного html кода. Что в свою очередь вызывает батхерт у программистов. А решение которое предлагает автор перетаскивает 90% кода в css который лежит себе в директории с прочей статикой и никого не трогает. Профит очевиден.
НЛО прилетело и опубликовало эту надпись здесь
Поделитесь своим способом верстки нестандартных кнопок, очень интересно, можно в личку.
НЛО прилетело и опубликовало эту надпись здесь
Обёртку можно делать из чего угодно. Метод это позволяет.

Классы как вам удобно, так и называйте.

По поводу ".neobtn" — читайте выше.

И не переживайте так за скорость отрисовки. Экономия на удалении одной «звёздочки» в данном случае — экономия на спичках.

Остальные ваши замечания — только ваше личное дело.
И не переживайте так за скорость отрисовки. Экономия на удалении одной «звёздочки» в данном случае — экономия на спичках.


В статье речь идёт о системе составления классов, то есть все эти спички в итоге выльются вполне ощутимые тормоза. А если css не разделён по разделам? о-ооО-О:)
Вы процитировали мой ответ на комментарий выше, но видимо не читали сам комментарий.
SilentImp предлагает избавится лишь от одной «звёздочки» в CSS. Поэтому я и говорю, если уж экономить, то удалять всё «звёздочки», а не только одну.

«Ощутимые тормоза» — это сколько?
НЛО прилетело и опубликовало эту надпись здесь
>Но вообще я так понял что зря трачу время. Грустно все.
есть немного ))
За верстку кнопки первоначальным вариантом я бы расстреливал.

Зачем столько тегов? Что за злой гений это верстал?

Фиксированная ширина кнопка один элемент.
Резиновая кнопка 3 элемента.
НЛО прилетело и опубликовало эту надпись здесь
Это очень старый код.
Настолько старый, что верставший его человек даже не использовал doctype.
Кроссбраузерность обеспечивалась избыточностью.
Меня пугает количество закладок к статье, хватит плодить бездарную вёрстку, прислушайтесь к SilentImp.

Я бы такую кнопки делал в 1 на css3 с мягкой деградацией, максимум в 2 тега, для большей совместимости.
Ужасный код. Мало того, что высота задана жестко, еще и кнопка сделана дивом вместо инпута/баттона. Вы кстати еще user-select забыли отменить. Селекторы вида *[что-то там] — вообще какой-то ужас.

По моему мнению, края кнопки (:before, :after) лучше позиционировать абсолютно — не будет проблем с очисткой после float.

Не поддерживать ИЕ6 на крупном проекте — нехорошо.

Примеры старого кода еще веселее — 4 вида тегов и css-класы с дефисами, подчеркиваниями. Разве что камелкейса не хватает.

Почему-то не приведен код для изменения вида кнопки в состояниях :hover и :active. Это нормально?
А чтоб у коллег-пехапистов не было возмущений, посоветуйте им организовать свой код и добавить систему виджетов, чтобы шаблон кнопки задавался где-то отдельно.
После прочтения таких вот ответов на совершенно оправданную критику я понимаю почему на рынке существует такое большое количество разочарованных заказчиков. А все из-за того что «проффесионалы»(© Янукович) совершенно не хотят думать о будущем выполненного ими проекта и не закладывают устойчивый фундамент для его дальнейшего развития.

Вся критика в адрес автора статьи полностью обоснована (по моему мнению). Доводы про «спички» тоже смешны так как можно один раз выработать правильные принципы в работе и на спичках экономить больше не придется НИКОГДА!..

Было уже много исследований по поводу скорости рендеринга и загрузки сайтов, почему бы на их основе не разработать что то подходящее для ваших задач. Что бы использование не отнимало много времени. И это в последствии это принесет реальный профит! Как пример можно привести тот же «БЭМ».

Живите сегодняшним днем, но не забывайте о том что может наступить завтра:)

Коллеги, у меня складывается смутное ощущение, что не все из вас до конца понимают механизм работы селектора «звёздочка».
Согласно данным w3.org запись вида "*.warning" полностью эквивалентна ".warning", а запись «div.warning» означает ровно то же, что и «div[class~=warning]» иначе говоря, ".warning" есть то же самое, что и "[class~=warning]".
Как совершенно правильно было сказано, поиск элементов в DOM идёт слева на право. Это значит, что запись вида ".warning" указывает выбрать ВСЕ элементы у которых имеется атрибут class с именем «warning». Заметим так же, что запись подобного рода абсолютно всех устраивает.
Очевидно, что запись "*.warning" делает абсолютно то же самое — выбирает ВСЕ элементы у которых есть атрибут class с именем «warning».
Теперь анализаруем всё прочитанное и приходим к выводу, что запись вида *[class~=warning] аналогична записи ".warning".
Единственное отличие моего примера в том, что значение атрибута ищется как подстрока в имени класса.
Практические замеры подтверждают сказанное — 1000 кнопок прорисовываются в ИЕ7 за 800 мс, что в среднем сопоставимо со скоростью прорисовки в этом же браузере но при использовании идентификаторов класса.
не слева направо, а справа налево
использование псевдоэлементов — плохая практика. визуально они есть, но в доме их нет. как следствие нельзя через инспектор посмотреть какие именно стили к ним применились, какая у них реальная ширина, высота, отступы, об их существовании можно догадаться только лишь из исходников или визуально. короче, при отладке от них только геморрой. чистота хтмл — это конечно хорошо, и надо стараться минимизировать число дополнительных элементов, но не стоит впадать в крайности. в век шаблонизаторов совершенно не важно будет ли 1 элемент и 2 дополнительных или же 1 элемента и 2 псевдоэлемента. браузеру монописуально. в шаблонах — одинаковые вызовы подшаблонов.

касательно селекторов — ты играешь с огнём. лучше писать что-то типа class=" b-mybutton m-green " а потом в цсс: .b-mybutton {} .b-mybutton.m-green {}
Разве?
image
ладно. про актуальные стили мимо кассы
Еще бы приделать фокус и ховер-эффекты.
Нет ни единой причины использовать для кнопки div, если есть элемент button, который обладает дополнительными возможностями в браузерах — дефолтное оформление, возможность получать фокус и нажиматься безо всяких tabindex и JS, доступность не только для зрячих с мышкой.

Я бы очень рекомендовал вам исправить код статьи, чтобы не смущать и не провоцировать разработчиков писать такой ужасный и недоступный HTML-код. Иначе можно скатиться до кода, который пишет Google:

twitter.com/miripiruni/status/123316502760919040

Чувак из Гугла рассказал как надо делать чекбоксы:
<div role="checkbox" aria-checked="true">
Вот в том и прелесть метода.
>что позволяет делать кнопку из любого тега
С небольшими доработками этим методом можно декорировать всё.
Я обновил свой пример: test.marow.net/button/demo/
Речь не о методе, речь об ответственности за пример, в котором используется <div>
Я ограничусь стыдом за всех, кто будет бездумно делать кнопки указанным методом.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории