Почему атрибут title <link> заставляет браузеры игнорировать мои стили?

Следующий html-документ (вместе с CSS) не может отображать стили в b.css.

<!doctype html>
<html>
    <head>
        <link rel="stylesheet" media="screen" type="text/css" title="A" href="a.css" />
        <link rel="stylesheet" media="screen" type="text/css" title="B" href="b.css" />
    </head>
    <body>
        <div id="A">A</div>
        <div id="B">B</div>
    </body>
</html>

/* a.css */
div#A   { color: blue;  }
/* b.css */
div#B   { color: red;   }

Создание титров одинаково (например, оба <link ... title="A"> исправляют его, но я не вижу причины, почему это должно быть. Что здесь делает название, что делает это неправильным?

Ответы

Ответ 1

Спецификация HTML 4.0 гласит, что существует три типа таблиц стилей: постоянный, предпочтительный и альтернативный.

  • Таблица стилей является "постоянной", если она связана с rel="stylesheet" и не имеет атрибута title. Во время рендеринга используются все постоянные таблицы стилей.
  • Таблица стилей "предпочтительна", если она связана с rel="stylesheet" и имеет атрибут title; предпочтительные таблицы стилей с тем же title сгруппированы вместе, но не должно быть более одной группы. Кажется, браузеры выберет только одну предпочтительную таблицу стилей для рендеринга, поскольку должен быть только один.
  • Наконец, таблица стилей "чередуется", если она связана с rel="alternate stylesheet" и имеет title. Предполагается, что эти таблицы стилей позволяют пользователю выбирать таблицы стилей, они группируются вместе title и отображаются в селекторе стилей браузера, если он имеет один (вид → стиль страницы в Firefox). Каждая группа (по названию) является взаимоисключающей.

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

Ответ 2

В ответ на ответ Нила Уильямса:

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

(выделено курсивом)

также:

Чтобы сделать предпочтительную таблицу стилей, установите атрибут rel в "stylesheet" и назовите таблицу стилей с атрибутом title.

Это от http://www.w3.org/TR/REC-html40/present/styles.html#h-14.3.1

Ответ 3

Прочтите следующее: http://blogs.telerik.com/dimodimov/posts/08-05-15/title_attributes_in_css_link_tags_prevent_styles_from_being_applied.aspx

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

Если у вас несколько тегов в и один из них имеет title, затем теги после того, как он должен атрибут title с тем же значением или нет атрибута title вообще, иначе стили в последних CSS файлах не будет применяться на странице.

Проблема может быть легко воспроизведена в различные версии Firefox, Opera и Сафари. Единственный браузер, который делает не проявлять неожиданное поведение Internet Explorer.

Действительно странно o.o

Ответ 4

Мне потребовалось около 3 часов, чтобы дойти до конца, так как я добавлял новую таблицу стилей. Я думал, что у меня были некоторые конфликты между существующими правилами CSS и теми, которые я добавлял. После истечения разумных параметров я попытался удалить тег заголовка из ссылки. Я не очень много думал об этом, думал, что это бесполезные метаданные. Ну, оказалось, это было тем, что мешало анализировать CSS. Оказывается, устаревший комитет стандартов CSS в области мозгов придумал это. Не могли бы они просто добавили новый атрибут, который яснее, для их предпочтительной и какой-то функциональности (какой бы черт он ни предполагал) вместо того, чтобы полагаться на присутствие или отсутствие атрибута title? Я потерял все это время, которое нужно инвестировать в то, чтобы делать что-то продуктивное. Во время моего поиска я пообещал себе, что буду принимать меры, как только выясню происхождение этой проблемы. Теперь остается решить вопрос о мерах.