• Действительно ли использование селектора по ID - признак абсолютно плохого стиля?

    @Quilin
    Full-stack разработчик
    Я бы все-таки настоятельно не рекомендовал вам использовать селекторы ID именно в CSS по одной простой причине.

    Движки рендеринга Gecko и Webkit при формировании Reflow и Layout соответственно строят индексы по ID ровно таким же способом, как и по имени класса. В качестве побочного явления - вы можете написать примерно то же, что и здесь, и код будет работать именно таким образом. Как по мне, это несколько неочевидное поведение, что стили применяются ко всем элементам с таким идентификатором, а не только к первому.

    Многие разработчики, да и начинающие верстальщики путают концепцию CSS и их селекторов с особенностями языка XML. Надо понимать, что ID в XML - это строгий параметр, по которому строится индекс с BST, который позволяет быстро находить первое совпадение идентификатора (то же происходит и в JS при вызове document.getElementById("test")), но в CSS и при построении лайаута все гораздо менее строго. И следует заметить, что сами разработчики браузеров решили так сделать, основываясь, вероятнее всего, на концепции того, что верстальщикам нередко приходится повторно пользоваться стилями, описанными для селекторов ID.

    Таким образом, с точки зрения быстродействия "#" ничем не отличается от ".", по крайней мере, в современных вебкитах и фаерфоксах. Теперь что касается точки зрения good practice.

    Я лично занимаюсь версткой уже почти десять лет, и точно для себя определил, что в работе, когда речь заходит о чужой или смежной с чужой области ответственности (а CSS - это смежная с дизайном область верстки), ничего уникального не бывает в принципе. А раз так - идентификатор может и запутать.

    В своей практике я всегда использую идентификаторы для тех нод, которые участвуют в JavaScript, и в уникальности роли которых я уверен. Конечно, там тоже иногда приходится менять, но гораздо реже, чем в CSS. Но для визуального отображения я всегда использую классы, чтобы иметь полное право не писать код повторно, если вдруг дизайнер захочет вставить "тот самый единственный на весь сайт хэдер, его точно больше нигде не будет" в другую часть страницы.

    Ну а что касается аргументов про "больше кода", могу предложить таким борцам за лишний десяток знаков перейти на шаблонизаторы; или перенять даже целиком концепцию БЭМ, тогда код совсем в разы уменьшится.
    Ответ написан
    Комментировать
  • Действительно ли использование селектора по ID - признак абсолютно плохого стиля?

    Тот кто говорит об избегании использовании id в селекторах - клинический идиот с завышенной самооценкой. Не слушайте этих людей.

    Селекторы по классам и по id - это основа выборки элементов. Селекторы по классам предназначены для определения групп элементов. Селекторы по id для определения конкретных элементов. Сочетание этих селекторов позволяет выделять конкретные элементы в определённых группах.
    Ответ написан
    Комментировать
  • Действительно ли использование селектора по ID - признак абсолютно плохого стиля?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Пробежал статью глазами. Мое мнение - весьма бредовая статья. Клинический перфекционизм в разработке + собственные вкусовые пристрастия выставлять как канон... В ID нет ничего ничего, ну абсолютно ничего плохого, особенно учитывая описанный вами подход.

    Хотя если очень захотеть то можно извращаться сколько угодно. В свое время пробовал построить веб страницу используя haml scss и модификатор строгости в CSS. Удалось полностью избавится и от классов и от ID. Вот только код был как Китайская стена длинной. Оно вам надо?

    Более того при разработке фронта (javascript) от ID полностью уйти невозможно. А в общем вы правильно описали принципы применения и того и другого, так что не смешивайте конвенции сжатого и читабельного кода с идеей божественного сечения. Главное пишите, пишите и еще раз пишите, стиль как свой так и "правильный" вырабатывается только с практикой. И не всегда "как надо" необходимо больше нежели "как хочется" ;)
    Ответ написан
    Комментировать
  • Действительно ли использование селектора по ID - признак абсолютно плохого стиля?

    @vdem
    Смысл той статьи (насколько я понял) - стараться не использовать id в CSS, только классы. Без id в HTML обойтись, вообще говоря, сложновато (достаточно вспомнить про label, про якоря (anchors)), а в JavaScript/jQuery получение элемента с помощью простого id-селектора должно работать гораздо быстрее, чем с использованием классов.
    Ответ написан
    1 комментарий
  • Действительно ли использование селектора по ID - признак абсолютно плохого стиля?

    @Lici
    поддерживаю. id иногда нужны и уместны.
    Ответ написан
    Комментировать
  • Имеются ли в PHP какие-либо побочные эффекты (теоретически) при инициализации переменной в условии if?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Вы спрашивали, имеются ли в PHP какие-либо побочные эффекты. Имеются.
    Если первое условие будет ложью, то второе условие даже и не запустится вовсе:
    function first()  { echo "first "; return false; }
    function second() { echo "second "; return true; }
    if (first() && second()) echo "OK"; else echo "Bad";

    выведет "first Bad", а слово "second" не выведется, что значит - вторая функция не запустилась.
    Так же не запустится второе условие при использовании ИЛИ, если первое условие вернуло истину.
    И правда, зачем проверять второе условие, если итоговый результат выражения уже известен на первом условии?
    Ответ написан
    1 комментарий
  • Как отсортировать массив по нескольким значениям?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    vals = vals.sort(
       function(a, b) {
         if (a[1] == b[1]) {
           return a[0] - b[0];
         } else return a[1] - b[1];
       }
    );

    Можно упростить, и написать в одну строку:
    vals = vals.sort(
       function(a, b) { return a[1] == b[1] ? a[0] - b[0] : a[1] - b[1]; }
    );
    Ответ написан
    5 комментариев
  • Какие сертификаты полезно иметь веб-разработчику?

    Sergeniy
    @Sergeniy
    Справку от психиатра (не шутка)
    Ответ написан
    Комментировать
  • Как найти веб-разработчика в проект за долю в нем?

    inlanger
    @inlanger
    Django программист
    На студентах такой проект не выедет. А нормальный программер не будет работать бесплатно "за долю".
    Ответ написан
    6 комментариев
  • Какой есть Git GUI клиент для управления репозиторием через ssh?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    Мхм. Вам github покупать нужно с его редактором в браузере ;)

    По сабжу - git работает не так, как вы им пользуетесь. У каждого пользователя есть локальный репозиторий. В него они коммитят. В "центральный" репозиторий изменения передаются командой push, забираются - pull.
    Делать так, как вы хотите - неправильно.
    Ответ написан
    4 комментария
  • Хочу быть программистом, но не выходит. Как двигаться вперед?

    Sild
    @Sild
    что за хрень, ребята. пишите код, вместо долбаных вопросов на несколько листов a4 на тостере.
    Ответ написан
    5 комментариев
  • Порядок регистрации стартапа.?

    @jursovet
    Если Ваш «стартап» так крут, что необходимо задумываться о защите от рейдерства, регистрации товарного знака, минимизации налогов (при том, что до нескольких десятков миллионов рублей годового оборота российская УСН вполне даже ничего), то Вам следует обратиться в хорошую юридическую фирму — лучше всего в американскую или британскую.

    Если же Ваш бизнес еще только на стадии идеи (прототипа), которая кажется Вам суперудачной и чрезвычайно привлекательной для рейдеров, то, имхо, Вам следует просто брать и ее реализовывать, а к страшилкам типа «вокруг одни рейдеры», «налоги превышают 100% и платить их невозможно» и т.п. относится критически. Иначе Вы рискуете потратить массу денег на создание основы того, что потом, возможно, и не будет реализовано.
    Ответ написан
    4 комментария
  • Ноутбук вместо системника?

    Zverenish
    @Zverenish
    Касательно аккумуляторов.
    Литиевые, используемые сейчас в ноутбуках и иной фото-аудио-телефонной аппаратуре — сильно отличаются от применяемых раньше метал-гидридных.
    Если быть кратко — MH (металл-гидридные) — для увеличения срока службы требуют
    * полного цикла зарядки-разрядки
    * хранения в обязательно разряженном состоянии
    Если заряжать неразряженный аккумулятор — у него возникает эффект памяти, что сильно снижает его ёмкость. И не верьте рекламным лозунгам «мы победили эффект памяти!» — это чистый развод. Уменьшили — да, но сам процесс работы аккумулятора таков, что этого не избежать.
    С литиевыми совсем наоборот:
    * хранить в заряженном состоянии необходимо
    * количество циклов зависит от того насколько сильно разряженный аккумулятор будете заряжать… и чем больше разряженный — тем как ни странно может показаться — меньше циклов. Для литиевых полный разряд вообще не рекомендуем.

    А вот теперь пора поговорить о сроке службы. Дело в том, что кроме этих циклов зарядок/перезарядок — аккумулятор начинает со временем умирать терять ёмкость вне зависимости от того как вы его используете. Срок? Разный. 2-3 года. Из-за этого купив новый ноут старой модели (провалявшийся на складе в коробке годик-полтора) пользователь может столкнуться с тем, что буквально через пол года аккумулятор ни с того ни с сего начинает загибаться.

    Касаемо ноутбука. Смысл снимать аккумулятор и этим самым убирать встроенный UPS?

    Срок службы ноутбуков не такой большой (года 3-4), что бы париться о том, что ко времени, когда вы решите его обновить — у вас аккумулятор был «как новенький».
    Но это лично мое мнение и никому его не навязываю.
    Ответ написан
    Комментировать
  • Когда в PHP использовать интерфейсы, а когда абстрактные классы?

    try4tune
    @try4tune
    С точки зрения архитектуры:

    Интерфейс описывает свойства. Обратите внимание на классические названия интерфейсов: Throwable, Countable, Comparable, Iterable и т.д. Возьмем, к примеру, интерфейс Rollable (катящийся), и Foldable (складывающийся).

    Абстрактный класс же описывает сущность. Например, стол: Table_Abstract. Стол может быть деревянным, тогда будет Table_Wood extends Table_Abstract. Также стол может быть хирургическим: Table_Surgical extends Table_Abstract. В таком случае Table_Abstract объединяет общий свойства всех столов (скажем, площадь поверхности, наличие ножек и т.п.). А конкретный класс описывает сущность определенного типа столов.

    Связью же интерфейсов и классов Вы описываете свойства. Например, стол можно катить: Table_Abstract implements Rollable. Деревянный стол, например, можно сложить: Table_Wood implements Foldable.
    Ответ написан
    5 комментариев