Как мне связать две таблицы стилей с ASP.Net MVC 3?

#css #asp.net-mvc-3 #twitter-bootstrap

#css #asp.net-mvc-3 #twitter-bootstrap

Вопрос:

Я хотел бы использовать Bootstrap из Twitter в моем ASP.Net Приложение MVC 3. Я скачал bootstrap.css и добавил его в свой проект в папке Content. Я открыл _Layout.cshtml и добавил ссылку на файл:

 <head>
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/bootstrap.css")" rel="stylesheet" type="text/css" />
  

При запуске приложения таблица стилей не применяется. Как мне ссылаться на Site.css и bootstrap.css из моего файла _Layout.cshtml?

Комментарии:

1. То, что у вас есть, должно работать. Если вы откроете сайт в Firebug и проверите вкладку Net, все ли файлы загружаются?

2. Да, вкладка Firebug Net показывает загрузку обеих. Я изменил порядок расположения двух строк ссылок, после чего все заработало. Если Site.css находится перед bootstrap.css, применяется только bootstrap (чего я сначала не понял). Измените порядок, и обе будут работать. Странно.

Ответ №1:

Я думаю, что проблема здесь в CSS наследования, каскада и специфичности.Имейте в виду, что Bootstrap в Twitter сбрасывает все стили.

‘Если Site.css находится перед bootstrap.css, применяется только bootstrap (чего я сначала не понял). Измените порядок, и обе будут работать. Странно’

На самом деле, это имеет полный смысл. Site.css загружается со всеми объявлениями своих стилей и сразу после этого Bootstrap.css загружается, который сбрасывает большинство (если не все стили), таким образом, будут применены объявления внутри Bootstrap.css . Только кажется, что обе работают, вероятно, потому, что у Bootstrap.css может не быть определенного стиля или Site.css очень специфический стиль, определенный с использованием html-идентификаторов или классов.

Измените порядок в обратном порядке (с Bootstrap.css первым), теперь сначала выполняется сброс всех стилей, а затем применяются другие стили. Поскольку Site.css загружается вторым, стили, определенные в нем, будут применены к вашему сайту.

Для вашего собственного интереса попробуйте определить встроенный стиль в вашем html-документе, который был определен как в ‘Site.css’, так и в ‘Bootstrap.css’, и посмотрите, как стиль применяется путем добавления / удаления определения стиля.

Я попытался найти хорошее поддерживающее объяснение каскадирования CSS, и лучшим графическим и простым объяснением, которое я нашел, было это, в котором отмечается

Если селекторы во внешних и встроенных таблицах стилей конфликтуют, но имеют одинаковую специфику, окончательный тай-брейк основан на порядке появления правил: правило, объявленное позже, выигрывает. Это относится не только к порядку правил на одном листе, но и к порядку, в котором листы связаны, импортированы или встроены в заголовок (X) HTML-страницы.

Ответ №2:

Вы можете скопировать и вставить CSS из файла начальной загрузки в свой единственный файл .css, чтобы сократить количество HTTP-запросов.

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


Однако то, что вы сделали, должно сработать. Можете ли вы опубликовать в JSFiddle пример того, как выглядит ваша разметка?

Для получения дополнительной информации смотрите:

http://www.w3.org/TR/html4/present/styles.html#h-14.3

Комментарии:

1. Спасибо. Я не пробовал JSFiddle, но вкладка Firebug Net показывает загрузку обеих. Я изменил порядок расположения двух строк ссылок, после чего все заработало. Если Site.css находится перед bootstrap.css, применяется только bootstrap (чего я сначала не понял). Измените порядок, и обе будут работать. Странно.

2. >> Вы можете скопировать и вставить CSS из файла начальной загрузки в свой единственный файл .css, чтобы сократить количество HTTP-запросов. << Не делайте этого вручную, используйте инструмент вроде squishit, который будет связывать / минимизировать скрипты codethinked.com /…