Как использовать пространства имен в CSS? - PullRequest
5 голосов
/ 08 апреля 2009

моя HTML-страница содержит div с идентификатором "main", и я включаю еще одну HTML-страницу в мою HTML-страницу, которая содержит div с таким же идентификатором ("main"). мне нужно добавить пространство имен к id ("main") моей HTML-страницы.

Я включаю верхний и нижний колонтитулы с другого сайта и включаю контент с моего сайта на эту HTML-страницу Если этот другой сайт использует тот же идентификатор, что и мой сайт, то здесь возникает конфликт.

На этой HTML-странице есть два CSS-файла. Если оба они содержат один и тот же класс с разным стилем, здесь возникает проблема.

Мне нужно применить мой CSS-файл к моему коду, а другой - к оставшемуся коду. Может ли тело решить мою проблему?

Ответы [ 6 ]

4 голосов
/ 08 апреля 2009

Две вещи:

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

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

2 голосов
/ 08 апреля 2009

Страница с двойным идентификатором недействительна. Даже если вам удастся настроить таргетинг на отдельные элементы путем объединения идентификатора с классами, это не гарантирует работу со всеми браузерами.

Чтобы сделать действительную страницу, элементы должны иметь уникальный идентификатор.

2 голосов
/ 08 апреля 2009

Есть ли что-нибудь о содержащихся в них элементах div, которые отличают их друг от друга. Если есть, вы можете добавить префикс к объявлению CSS к содержащему элементу и указать уникальный стиль для обоих div.

Например:

#main
{Style}
.container #main
{Another style}

Как уже упоминалось, если у вас есть контроль над HTML, было бы разумно указать разные классы для обоих элементов или уникальный идентификатор для каждого из них.

1 голос
/ 08 апреля 2009

Я согласен со всеми до сих пор в том, что нет встроенной возможности пространства имен CSS и что если у вас есть контроль (или желание / возможность) редактировать ваш HTML, тогда это лучший подход.

Одним из способов автоматизации этого процесса является написание сценария (PERL, PHP, .NET и т. Д.) Для анализа HTML-кода, который вы извлекаете, и замены любых существующих идентификаторов или классов измененной версией.

т.е. <tag id="theID" class="theClass anotherClass"> становится <tag id="NAMESPACEtheID" class="NAMESPACEtheClass NAMESPACEanotherClass">

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

Что касается производительности, это будет большим ударом в зависимости от размера файла, и вы, вероятно, захотите кэшировать результат или переписать исходный файл.

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

1 голос
/ 08 апреля 2009

Короче говоря, в CSS нет такого понятия, как пространства имен. Используйте один из обходных путей, которые предлагают другие ответы:)

0 голосов
/ 08 апреля 2009

Используйте имя второго div в идентификаторе второго div. Например, если вторая страница называется signup.html, используйте main_signup

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...