可能是重复问题:
CSS规则中的 “>” 代表什么意思?
我浏览了很多网站,看到其中许多在 CSS 文件中使用这种符号来创建导航栏,例如:
#navigation ul li > ul {
/* some code in between */
}
但是当我省略 >
符号时
#navigation ul li ul {
/* some code in between */
}
这仍然以同样的方式工作。
什么是差异,何时使用 >
符号?
可能是重复问题:
CSS规则中的 “>” 代表什么意思?
我浏览了很多网站,看到其中许多在 CSS 文件中使用这种符号来创建导航栏,例如:
#navigation ul li > ul {
/* some code in between */
}
但是当我省略 >
符号时
#navigation ul li ul {
/* some code in between */
}
这仍然以同样的方式工作。
什么是差异,何时使用 >
符号?
>
表示选择器的直接子元素,因此 li > a
只会匹配在 <li>
直接包含的 <a>
元素。
例如,如果 HTML 代码为 <li><span><a>
,则 <a>
元素不会被匹配。
如果去掉 >
,则可以匹配在 <li>
中嵌套的任意 <a>
元素,而与其周围的其他元素无关。因此,li a
可以匹配如下代码中的 <a>
元素:
<li><a>
以及 <li><span><a>
等。
有关直接子元素选择器的更多信息,请参见:https://developer.mozilla.org/en-US/docs/Web/CSS/Child_selectors
p
不能是ul
的子级)。事实上,这个例子非常糟糕,以至于在Firefox浏览器中,选择器ul > li
将匹配您示例中的li
。 - BoltClock当你想要定位一个直接子元素时,可以使用>
。
例如,.foo > .bar
只会定位到 .bar
如果它是直接子元素,而 .foo .bar
会定位到任何具有类名为 .bar
的 .foo
后代元素。
>
,它将针对任何 <li/>
的直接后代 <ul/>
— 即使它被嵌套在其他十个 ul li
中。这只意味着它不会针对 li span ul
。 - Nix<ul>
标签恰好在它之前关闭了开头的<p>
标签所致。这使得第二个嵌套的ul
实际上成为其上方的li
的子元素,以及该p
的相邻兄弟元素。这与display: block
与inline
无关。 - BoltClock<span>
标签中,因为闭合标签是必需的,不像<p>
标签,所以DOM实际上将ul
放在span
内部构建。 - BoltClock<p>
标签,是这样吗? - joar<ul>
将包含在<p>
中。隐式关闭标签规则是HTML的一部分,而不是XHTML。(这就是事情变得复杂和混乱的地方 :)) - BoltClock>
用于当第二个操作数/元素是第一个操作数/元素的子元素时。当省略时,将匹配后代元素,这包括子元素。
#navigation ul {color:red;}
那么#navigation ul
和#navigation ul li ul
都将被着成红色(文本),因为它们都是#navigation ul
的后代。
但如果你在CSS中有以下内容:
#navigation > ul {color:red;}
那么只有#navigation ul
会被涂成红色,因为它是#navigation
的唯一一个直接子级别的ul
">选择器是子选择器,空格是后代选择器。如果在中,又在中,而您使用子选择器,则如果您在中引用,则不会将CSS规则应用于,但是,如果您使用后代选择器,则将是传递地在中。这意味着后代选择器比子选择器更通用。
"#navigation ul li > ul {
/* some code in between */
}
比...更具体
#navigation ul li ul {
/* some code in between */
}
因为在具有导航 ID 的标签内部的 ul 标签中的 li 标签之间需要 ul 成为第一个示例中的直接子级,而在第二个示例中,ul 不需要直接成为 li 的子级,li 可能有一个是 ul 的父级。
#navigation ul li ul
规则放在#navigation ul li > ul
规则之后,它将会覆盖前者。 - BoltClock