Управление CSS Explosion

Скорее всего, ваш запрос не удался, а запрос вызвал логический FALSE (или какой-то объект ошибки), который затем попытался использовать, как если бы был объект resultet, что вызвало ошибку. Попробуйте что-то вроде var_dump($result), чтобы узнать, что вы действительно получили.

Проверьте ошибки после каждого запроса запроса к базе данных. Даже если сам запрос синтаксически действителен, в любом случае есть слишком много причин для его отказа - проверка ошибок каждый раз в какой-то момент сэкономит вам много горя.

677
задан Webeng 10 January 2017 в 00:14
поделиться

7 ответов

Это очень хороший вопрос. Куда бы я ни посмотрел, файлы CSS через некоторое время выходят из-под контроля, особенно, но не только, при работе в команде.

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

  • Рефакторинг на ранней стадии, рефакторинг часто. Часто очищайте файлы CSS, объединяйте несколько определений одного класса. Немедленно удалите устаревшие определения .

  • При добавлении CSS во время исправления ошибок оставьте комментарий о том, что делает изменение («Это необходимо для того, чтобы поле было выровнено по левому краю в IE <7»)

  • Избегайте дублирования, например определение того же самого в .classname и .classname: hover .

  • Используйте комментарии / ** Head ** / , чтобы построить четкую структуру.

  • Используйте инструмент для украшения, который помогает поддерживать постоянный стиль. Я использую Polystyle , которым я вполне доволен (стоит 15 долларов, но деньги потрачены не зря). Также есть бесплатные (например, Code Beautifier на основе CSS Tidy , инструмента с открытым исходным кодом).

  • Создавайте разумные классы. См. Ниже несколько примечаний по этому поводу.

  • Используйте семантику, избегайте супа DIV - используйте, например,

      для меню.

    • Определите все на как можно более низком уровне (например, семейство шрифтов по умолчанию, цвет и размер в теле ) и используйте наследовать , где это возможно

    • Если у вас очень сложный CSS, возможно, поможет прекомпилятор CSS. Я планирую в ближайшее время изучить xCSS по той же причине. Есть несколько других.

    • Если вы работаете в команде, подчеркните необходимость качества и стандартов для файлов CSS. Все разбираются в стандартах кодирования на своих языках программирования, но мало кто понимает, что это необходимо и для CSS.

    • Если вы работаете в команде, рассмотрите возможность использования контроля версий. Это значительно упрощает отслеживание и устранение конфликтов. Это действительно того стоит, даже если вы «просто» занимаетесь HTML и CSS.

    • Не работайте с ! Important . Не только потому, что IE = <7 не может с этим справиться. В сложной структуре использование ! Important часто заманчиво для изменения поведения, источник которого не может быть обнаружен, но это яд для долгосрочного обслуживания.

    Создание разумных классов

    Вот как мне нравится создавать разумные классы.

    Сначала я применяю глобальные настройки:

    body { font-family: .... font-size ... color ... }
    a { text-decoration: none; }
    

    Затем я определяю основные разделы макета страницы, например. верхняя область, меню, содержимое и нижний колонтитул. Если я написал хорошую разметку, эти области будут идентичны структуре HTML.

    Затем я начинаю создавать классы CSS, определяя как можно больше предков, насколько это разумно, и группируя родственные классы как можно точнее.

    div.content ul.table_of_contents 
    div.content ul.table_of_contents li 
    div.content ul.table_of_contents li h1
    div.content ul.table_of_contents li h2
    div.content ul.table_of_contents li span.pagenumber
    

    Думайте о всей структуре CSS как о дереве со все более конкретными определениями по мере удаления от корня. Вы хотите, чтобы количество уроков было как можно меньше, и вы хотите повторяться как можно реже.

    Например, предположим, что у вас есть три уровня навигационных меню. Эти три меню выглядят по-разному, но у них также есть определенные характеристики. Например, все они

      , все они имеют одинаковый размер шрифта, и все элементы расположены рядом друг с другом (в отличие от рендеринга по умолчанию ul ) . Кроме того, ни в одном из меню нет маркеров ( list-style-type ).

      Сначала определите общие характеристики в классе с именем меню :

      div.navi ul.menu { display: ...; list-style-type: none; list-style-image: none; }
      div.navi ul.menu li { float: left }
      

      , затем определите конкретные характеристики каждого из трех меню. Уровень 1 имеет высоту 40 пикселей; уровни 2 и 3, 20 пикселей.

      Примечание: вы также можете использовать для этого несколько классов, но Internet Explorer 6 имеет проблемы с несколькими классами , поэтому в этом примере используются id s.

      div.navi ul.menu#level1 { height: 40px; }
      div.navi ul.menu#level2 { height: 20px; }
      div.navi ul.menu#level3 { height: 16px; }
      

      Разметка для меню будет выглядеть так:

      <ul id="level1" class="menu"><li> ...... </li></ul>
      <ul id="level2" class="menu"><li> ...... </li></ul>
      <ul id="level3" class="menu"><li> ...... </li></ul>
      

      Если у вас есть семантически похожие элементы на странице - например, эти три меню - попробуйте сначала определить общие черты и поместить их в класс; затем определите конкретные свойства и примените их к классам или, если вам нужно поддерживать Internet Explorer 6, к идентификаторам.

      Разные советы по HTML

      Если вы добавите эту семантику в свой HTML-вывод, дизайнеры смогут позже настраивать внешний вид веб-сайтов и / или приложений, используя чистый CSS, что является большим преимуществом и позволяет сэкономить время.

      • Если возможно, дайте телу каждой страницы уникальный класс: , это упрощает добавление настроек для конкретной страницы в таблицу стилей:

         body.contactpage div.container ul.mainmenu li {color: green} 
         
      • При автоматическом построении меню добавьте как можно больше контекста CSS, чтобы в дальнейшем можно было использовать расширенные стили. Например:

         

        Таким образом, каждый элемент меню может быть доступен для стилизации в соответствии с его семантическим контекстом: будь то первый или последний элемент в списке; Является ли это текущим активным элементом; и по номеру.

      Обратите внимание , что это назначение нескольких классов, как описано в приведенном выше примере , не работает должным образом в IE6 . Существует обходной путь , позволяющий IE6 работать с несколькими классами. Если обходной путь не подходит, вам придется установить наиболее важный для вас класс (номер элемента, активный или первый / последний) или прибегнуть к использованию идентификаторов.

561
ответ дан 22 November 2019 в 21:42
поделиться

Я часто видел, как люди разбивали файл на разделы с комментарием заголовка между разделами.

Что-то вроде

/* Headings and General Text */

.... stuff here for H1, etc..

/* Main page layout */

.... stuff here for layout page setup etc.

Это работает довольно хорошо и может помочь вам вернуться позже и найти то, над чем вы работаете.

2
ответ дан 22 November 2019 в 21:42
поделиться

Мой ответ является высокоуровневым, чтобы ответить на высокоуровневые проблемы, которые вы подняли в своем вопросе. Возможно, есть низкоуровневые организационные уловки и твики, которые можно сделать красивее, но ничто из этого не может исправить методологические недостатки. Есть несколько вещей, которые влияют на взрыв CSS. Очевидно, что это общая сложность сайта, а также такие вещи, как семантика именования, производительность CSS, организация файлов CSS и тестируемость/приемлемость.

Похоже, вы на правильном пути в отношении семантики именования, но можно сделать еще один шаг вперед. Разделы HTML, которые неоднократно появляются на сайте без структурных изменений (известные как "модули"), можно считать корнями селектора, и на их основе можно определять внутреннее расположение относительно этого корня. Это основной постулат объектно-ориентированного CSS, и вы можете прочитать/посмотреть больше об этом в этом выступлении инженера Yahoo.

Важно отметить, что этот чистый подход может идти вразрез с заботой о производительности, которая отдает предпочтение коротким селекторам, основанным либо на id, либо на имени тега. Нахождение баланса зависит от вас, но если у вас не огромный сайт, это должно быть просто руководством в вашей голове, напоминающим вам о том, что селекторы должны быть короткими. Подробнее о производительности здесь.

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

В качестве альтернативы вы можете использовать многофайловый подход, чтобы распространить правила CSS на страницу или раздел. Это требует от браузера загрузки нескольких файлов, что является проблемой производительности. Вы можете использовать программирование на стороне сервера для определения и объединения (и минификации) файлов CSS в один файл динамически. Но поскольку эти файлы раздельные и тестирование для них будет раздельным, вы создаете возможность непоследовательного внешнего вида и ощущения на разных страницах/разделах. Таким образом, тестирование становится сложнее.

Вам предстоит проанализировать конкретные потребности клиента и сбалансировать эти проблемы соответствующим образом.

7
ответ дан 22 November 2019 в 21:42
поделиться

Вы также должны понимать, что такое каскад и вес, и как они работают.

Я заметил, что вы используете только идентификаторы классов (div.title). Знаете ли вы, что вы можете использовать и идентификаторы, и что идентификатор имеет больший вес, чем класс?

Например,

#page1 div.title, #page1 ul, #page1 span {
  // rules
}

заставит все эти элементы иметь общий размер шрифта, скажем, или цвет, или любые другие ваши правила. Вы даже можете заставить все DIV, которые являются потомками #page1, получить определенные правила.

Что касается веса, помните, что оси CSS движутся от наиболее общего/легкого к наиболее специфическому/тяжелому. То есть в CSS-селекторе спецификатор элемента преобладает над спецификатором класса, а спецификатор класса - над спецификатором ID. Цифры имеют значение, поэтому селектор с двумя спецификаторами элементов (ul li) будет иметь больший вес, чем селектор с одним спецификатором (li).

Думайте об этом как о цифрах. 9 в колонке единиц все равно меньше, чем 1 в колонке десятков. Селектор со спецификатором ID, спецификатором класса и двумя спецификаторами элементов будет иметь больший вес, чем селектор без ID, с 500 спецификаторами классов и 1 000 спецификаторами элементов. Это, конечно, абсурдный пример, но вы поняли идею. Суть в том, что применение этой концепции поможет вам очистить множество CSS.

BTW, добавление спецификатора элемента к классу (div.title) не является необходимым, если только вы не сталкиваетесь с конфликтами с другими элементами, имеющими class="title". Не добавляйте ненужный вес, потому что он может понадобиться позже.

16
ответ дан 22 November 2019 в 21:42
поделиться

Вот только 4 примера:

На все 4 вопроса мой ответ включал совет скачать и прочитать PDF Натали Даун CSS Systems. (PDF содержит массу заметок, которых нет в слайдах, так что читайте PDF!). Обратите внимание на ее предложения по организации.

EDIT (2014/02/05) четыре года спустя, я бы сказал:

  • Используйте CSS-препроцессор и управляйте файлами как партициями (лично я предпочитаю Sass с Compass, но Less тоже неплох, и есть другие)
  • Прочитайте о таких концепциях, как OOCSS, SMACSS и BEM или getbem.
  • Посмотрите, как устроены популярные CSS-фреймворки, такие как Bootstrap и Zurb Foundation. Не стоит сбрасывать со счетов и менее популярные фреймворки - Inuit является интересным, но есть и множество других.
  • Комбинируйте/минифицируйте ваши файлы с шагом сборки на сервере непрерывной интеграции и/или бегунком задач, таким как Grunt или Gulp.
88
ответ дан 22 November 2019 в 21:42
поделиться
  • Создайте все перестановки.
  • Пусть каждый перестановка представляет узел в график.
  • Теперь для любых двух состояний добавить кромка со значением 1, если они совместно n-1 цифр (для источника из и для цели из конец), два, если они совместно используют n-2 цифры и так далее.
  • Теперь вы можете найти кратчайший путь, содержащий n вершин.
-121--3140547-

Попробуйте exec maven плагин ...

-121--3702184-

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

Я склонен организовывать файлы CSS примерно так:

  1. сброс CSS, основанный на Эрика Мейера . (В противном случае я обнаружу, что для большинства элементов у меня есть по крайней мере одно или два правила, которые просто сбрасывают стили браузера по умолчанию - большинство моих списков не похоже на стиль HTML по умолчанию для списков, например.)

  2. Сетевая система CSS, если сайт его вызывает. (Я основываю свое на 960 .gs )

  3. Стили для компонентов, которые отображаются на каждой странице (колонтитулы и т.д.)

  4. Стили для компонентов, которые используются в различных местах на сайте

  5. Стили, которые относятся только к отдельным страницам

Как вы видите, большинство из них зависит от дизайна сайта. Если дизайн четкий и организованный, ваш CSS может быть. Если нет, ты облажался.

12
ответ дан 22 November 2019 в 21:42
поделиться

Взгляните на 1. SASS 2. Компас

55
ответ дан 22 November 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: