Pull to refresh

Comments 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 сразу понятно к чему относится и что от него зависит.
UFO just landed and posted this here
согласен, но комментарий был про то, что селекторы типа
*[class*=neobtn-thick] гораздо медленнее чем .neobtn {} и использовать их повсеместно мне кажется неправильно.
Всё можно сделать обычными классами.А для удобной разработки css можно использовать, например less(но на боевом использовать скомпилированный вариант конечно же)
Гораздо медленнее — это сколько?
Настолько, что ваш крупный сайт со сложным dom-деревом зависнит наглухо в каком-нибудь ie7(про 6-ой можно и не упоминать)

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

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

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

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

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

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

На деле дизайнер сразу продумывает внешний вид кнопок, который очень редко меняется в рамках текущего макета.
UFO just landed and posted this here
Так было бы длиннее и, на первый взгляд, понятнее.
Приведённый выше способ не менее правильный.
UFO just landed and posted this here
UFO just landed and posted this here
Вы просто не умеете их готовить :)
UFO just landed and posted this here
Было бы, наверное, правильнее

Текст кнопки
Мне осталась непонятной одна идея.
Почему нужно было пользоваться таким сложным селектором, когда можно было общие стили вынести в .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, как говорит мне мой полугодовалый опыт, нет никаких проблем с поиском нужной строки. Более того, однажды написанные, они как правило не меняются. Разве что незначительно.

Нагрузка на парсер совершенно незначительна для проектов с количеством подобных элементов не более десятка-другого на страницу. Этого вполне хватает для среднестатистического проекта. В иных случаях конечно надо искать другие варианты.
UFO just landed and posted this here
>Не обязательно же ради того, что бы просто добавить кнопку звать верстальщика.

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

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

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

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

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


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

«Ощутимые тормоза» — это сколько?
UFO just landed and posted this here
>Но вообще я так понял что зря трачу время. Грустно все.
есть немного ))
За верстку кнопки первоначальным вариантом я бы расстреливал.

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

Фиксированная ширина кнопка один элемент.
Резиновая кнопка 3 элемента.
UFO just landed and posted this here
Это очень старый код.
Настолько старый, что верставший его человек даже не использовал 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 {}
ладно. про актуальные стили мимо кассы
Еще бы приделать фокус и ховер-эффекты.
Нет ни единой причины использовать для кнопки div, если есть элемент button, который обладает дополнительными возможностями в браузерах — дефолтное оформление, возможность получать фокус и нажиматься безо всяких tabindex и JS, доступность не только для зрячих с мышкой.

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

twitter.com/miripiruni/status/123316502760919040

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

Articles