У меня есть приложение APS.net(С#) с несколькими страницами, использующими тот же MasterPage. На этой странице я включил пару таблиц стилей, например:
<head runat="server">
<link href="/apps/_lib/ui/styles1.css" type="text/css" rel="stylesheet" />
<link href="/apps/_lib/ui/styles2.css" type="text/css" rel="stylesheet" />
</head>
Эти стили правильно применяются ко всему контенту, находящемуся в фактическом файле .master(страница), но не применяются к страницам, использующим главную страницу (например, default.aspx использует эту главную страницу и имеет местозаполнитель содержимого в она).
Если я добавляю эти строки на каждой отдельной странице:
<link href="/apps/_lib/ui/styles1.css" type="text/css" rel="stylesheet" />
<link href="/apps/_lib/ui/styles2.css" type="text/css" rel="stylesheet" />
Затем стили отображаются так, как ожидалось... но я надеялся, что смогу включить их в главную страницу, чтобы мне не пришлось включать эти ссылки на каждую последующую страницу.
Поскольку эти файлы физически не расположены в одном проекте (они разделены между несколькими приложениями), я не могу просто включить их в качестве темы ASP.net, которая будет применяться ко всем страницам.
Обновление
Чтобы исключить проблему с расположением файлов, я использовал абсолютный URL для этих таблиц стилей...
<link href="https://myserver/apps/_lib/ui/styles1.css" type="text/css" rel="stylesheet" />
<link href="https://myserver/apps/_lib/ui/styles2.css" type="text/css" rel="stylesheet" />
Таким образом, независимо от того, где он считывается, файл может быть найден. Это все еще демонстрирует то же поведение.
Мне кажется, что masterPage отображается с помощью стилей CSS (потому что они находятся в одном файле), а затем дочерняя/вызывающая страница отображается без стилей CSS (потому что они не находятся в этом файле, они находятся в masterPage), а затем эти два файла объединяются вместе (в противоположность их объединению сначала, а THEN - для элементов стиля для комбинированных страниц). Добавление к этому мнению было моим предыдущим примером добавления include для файла CSS на самой вызывающей странице, что приведет к правильному отображению CSS.
Вы можете просмотреть источник этого файла, и в разделе главы вы можете правильно увидеть связанные стили CSS, но они не применяются к каким-либо элементам с вызывающей страницы, пока они применяются ко всем элементам в masterPage.
Является ли страница содержимого в другой папке мастером? Если это так, вам нужно будет получить относительный путь приложения к файлам css, используя ResolveUrl на главной странице:
<link href='<%= ResolveUrl("~/apps/_lib/ui/styles1.css") %>' type="text/css" rel="stylesheet" />
Обновление. Если это не сработает, возможно, у вас могут быть ошибки HTML или CSS, такие как Lance. Попробуйте использовать проверки HTML и CSS на w3schools.com. Если он по-прежнему не работает после исправления каких-либо ошибок, дважды проверьте свои селектора CSS с отображенным HTML, как предложил Стив. Инициированные ASP.Net идентификаторы укусили меня не один раз.
У меня была аналогичная проблема. Как и другие, вы можете использовать ResolveUrl, чтобы убедиться, что путь правильный.
К сожалению, это создало для меня еще одну проблему. Мой тег заголовка был сервером runat. Мои теги ссылок не были. URL-адрес решения в теге ссылки никогда не будет выполняться. Вместо этого теги С# и response.write кодируются и выводятся на страницу.
Как ни странно, тот же метод в теге script (не-runat server) будет работать как обычно.
Чтобы решить эту проблему, я в конечном итоге написал весь тег ссылки в теге ASP.Net Response.Write:
<%="<link href='" + ResolveUrl("~/apps/_lib/ui/styles.css") + "' rel='stylesheet' type='text/css' />"%>
Это сработало. Как странно. Как бы то ни было, все это связано с тем, что тег заголовка разорван.
Возможно, это могут быть ваши селектора css. Когда вы добавляете мастер-страницы, asp.net накладывает больше префиксов на идентификаторы.
В jrummell размещено то, что я использую на своих сайтах, чтобы убедиться, что ссылки работают, если я буду перемещать свои страницы.
Что касается рендеринга. Отрисовка выполняется в браузере клиентского компьютера. В браузере он не знает, что html создается из нескольких документов.
Я уверен, что ваши HTML и CSS верны.
На стороне заметки, которую я заметил на прошлой неделе или так, что VS2008 продолжает испортить мои стили CSS, делайте действительно случайные вещи, такие как перемещение текста вокруг. Однако, я думаю, это может быть что-то на моей машине. Просто что-то проверить.
Вот пример кода, который я проверил, чтобы убедиться, что это работает.
Глава главной страницы
<head runat="server">
<link rel="stylesheet" type="text/css" href="../css/style.css" />
</head>
Держатель содержимого
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<div class="something">
Lance
</div>
</asp:Content>
Css в StyleSheet
.something{
color:Blue;
}
Результатом является "Лэнс" в синем на дочерней странице.
Как насчет этого?
<link runat="server" href="~/apps/_lib/ui/styles1.css" type="text/css" rel="stylesheet" />
<link runat="server" href="~/apps/_lib/ui/styles2.css" type="text/css" rel="stylesheet" />
Похоже, вы сделали это правильно, поэтому ваша ошибка кажется странной и звучит так, будто, возможно, у вас есть опечатка на главной странице. Попытайтесь посмотреть на сгенерированный источник (источник просмотра в браузере) двух страниц, один со ссылками на главных страницах и один со ссылками на веб-странице, и сравните пути.
Что-то вроде этого должно работать. Вы должны включить css в заголовок мастера. И затем включите ContentPlaceHolder в заголовок, поэтому, если вам нужны пользовательские материалы заголовка на ваших страницах контента, вы можете это сделать. Это не работает?
<head>
<link href="/apps/_lib/ui/styles1.css" type="text/css" rel="stylesheet" />
<link href="/apps/_lib/ui/styles2.css" type="text/css" rel="stylesheet" />
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
В конечном счете вы не хотите
<head></head>
на странице содержимого, возможно, это переопределение заголовка главной страницы.