为什么我无法在使用母版页的嵌套页面上应用样式?我只是想在单个页面中将简单的某些背景色应用于正文和某些div。
我的(嵌套)页面Reservations.aspx
具有此代码
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master"
AutoEventWireup="true" CodeFile="Reservations.aspx.cs" Inherits="Reservations" %>
<asp:Content runat="server" ContentPlaceHolderID="HeadContent">
<link href="~/Styles/input.css" rel="stylesheet" type="text/css" />
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<div class="mainDiv">
........
</div></asp:Content>
input.cs
具有此代码
body { background-color:Silver; }
.mainDiv { background-color:Blue; }
Site.Master
具有此代码
<head runat="server">
<asp:ContentPlaceHolder ID="HeadContent" runat="server"></asp:ContentPlaceHolder>
<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /></head>
<body>.........
仅当我将其应用于不需要的母版页时,才能将银色作为Reservations.aspx
的背景。我无法从This question和教程的可接受答案中获得帮助。
之前或之后使用<link..
可能会有所不同,感谢您提供信息,但是在这种情况下它没有做任何事情。解决问题后,我已经对两种方法都进行了测试。
指导ResolveUrl
解决了我的问题,因为我尝试在pickurl
中使用visual-studio 2010
而不是手动输入,并获得了该URL Styles/input.css
而不是~/Styles/input.css
。
我的问题解决了。怎么样?我告诉过,但是为什么呢?我不能说。我可能认为~/Styles/Site.css
,Styles/Site.css
,Styles/input.css
都是正确的网址,但~/Style/input.css
不正确。为什么?这仍然是开放的,其答案肯定是真实的和可接受的答案。
您需要按如下方式使用解析网址。
<%= ResolveUrl("~/")%>
如下
<link href='<%= ResolveUrl("~/Styles/Site.css")%>' rel="stylesheet" type="text/css" />
当Master Page
和Content Page
在同一文件夹中时,可以正常使用主页中的所有文件。
但是当Master Page
和Content Page
位于不同的文件夹中时,将不会找到相同的样式表或Java脚本文件,因为files不在同一文件夹中。
因此,解析URL解析服务器上的URL。
更新-
要特别注意的是<body>
标签是其余标签的容器。您的子页面是您身体标签的一部分。我看到您正在尝试根据子页面指定body标签的背景,但是NO这是不可能的。因为即使您尝试下载特定于您的子页面的css,所有内容都进入head标签,所以只有<body>
的最后一个指定css规则有效。另一方面,子页面元素不是这种情况,因为它们对于您的子页面是唯一的。
这是因为Site.css的样式属性覆盖了input.css的属性。
这是在浏览器中呈现最终代码的方式-
<asp:ContentPlaceHolder ID="HeadContent" runat="server"> //Master page's markup
<!-- <asp:Content runat="server" ContentPlaceHolderID="HeadContent"> --> //child page markup
<link href="~/Styles/input.css" rel="stylesheet" type="text/css" />
<!-- </asp:Content> -->
</asp:ContentPlaceHolder>
<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /></head> //Master page's markup (the css of Site.css should be overriding your input.css)
尝试一下
<head runat="server">
<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
<asp:ContentPlaceHolder ID="HeadContent" runat="server"></asp:ContentPlaceHolder>
</head>
<body>
在<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
之后放入ContentPlaceHolder
[我猜,您的样式表正在应用,但是由于site.css
是本质或CSS,因此它被覆盖。因为当页面将呈现时,您将获得input.css
链接标记及其后的site.css
链接标记。
因此,作为Css规则,如果site.css在先前的css文件中也具有相同选择器的css规则,则最后一个规则将适用。
<link href='<%= ResolveUrl("~/Styles/input.css")' rel="stylesheet" type="text/css" />
您的Reservations.aspx
中正在解决您的问题。
当您使用href="~/Styles/input.css"
时,当我们将资源相对于我们的网站或Web应用程序根目录使用时,此URL很有用。以~
开头的url定义该URL为根级别url。但只有在服务器端无法呈现此路径时,它才会以正确的路径呈现。
要在服务器端进行渲染,您可以使用ID链接到runat="server"
。或在服务器端定界符中使用ResolveUrl
方法。
like
<link href="~/Styles/input.css" rel="stylesheet" type="text/css" id="l1" runat="server" />
或
<link href='<%= ResolveUrl("~/Styles/input.css") %>' rel="stylesheet" type="text/css" />
移动线:
<asp:ContentPlaceHolder ID="HeadContent" runat="server"></asp:ContentPlaceHolder>
以下:
<link href="/Styles/Site.css" rel="stylesheet" type="text/css" /></head>
以便您的site.aster读取
<link href="/Styles/Site.css" rel="stylesheet" type="text/css" /></head>
<asp:ContentPlaceHolder ID="HeadContent" runat="server"></asp:ContentPlaceHolder>
这样,页面中的样式表将被读取为主要样式,并且将覆盖其中的所有设置。但是,我希望只使用一个主样式表,然后将id和class用于特定的样式需求。
** 编辑以补充最后的问题
**asp.net中的波浪号~
是相对于应用程序的路径根的符号...因此,如果您从“ /stuff/images/somepage.aspx”调用文件,则即使引用“〜/ css / style.css”也会调用“ /css/style.css”,无论-如果您只是调用“ css / style.css”,它将尝试找到相对于当前文档的文件,即“ /stuff/images/css/style.css”。
但是~
字符仅在ASP.NET代码中有效,因此带有HTML符号的字符毫无意义-仅当您在response.write
,<%= %>
,Resolve
或后面的代码中使用它时,任何意义。
My
trick
是在这些路径上使用斜杠,所以“ /css/style.css”因为这将始终从URL的根引用文件-只要您不将其部署到子目录,它将起作用。<link href='<%= ResolveUrl("~/Styles/input.css")' rel="stylesheet" type="text/css" />
解决您的问题。