我可以使用类定义覆盖#id ul li行为

tho*_*i56 18 css css-selectors

我有一个由#id标识的区域,并且有一个像:

#id ul li {
    margin:0;
}
Run Code Online (Sandbox Code Playgroud)

对于该领域的特定UL,我可以覆盖边距设置吗?我知道#id在评估格式时会产生非常高的优先级.

我试过了:

.myclass ul li {
    margin-left: 20px;
}
Run Code Online (Sandbox Code Playgroud)

#id ul.myclass {
Run Code Online (Sandbox Code Playgroud)

以及

#id li.myclass {
Run Code Online (Sandbox Code Playgroud)

它甚至可能吗?

Sco*_*ttS 21

我同意SWilk,!important尽可能避免(这里有可能).SWilk没有提供的其他一些解决方案是:

#id ul.myclass li {
Run Code Online (Sandbox Code Playgroud)

要么...

#id ul li.myclass {
Run Code Online (Sandbox Code Playgroud)

关键是增加选择器的特异性,以及上述SWilk的解决方案.原始解决方案不起作用的原因是您没有包含其他标记(ulli),也没有#id包含您添加的标记.myclass.

在显示结构的评论后添加:

如果您的HTML是这样的(正如您在评论中所述):

<div id="ja-col2">
  <div>.... 
    <ul class="latestnews">
      <li class="latestnews">
Run Code Online (Sandbox Code Playgroud)

你现在的css是(如另一条评论所述):

#ja-col1 ul li, 
  #ja-col2 ul li { 
    margin:0; padding-left:15px; 
  } 
#ja-col2 .latestnews ul li, /*does not exist*/
  .latestnews #ja-col2 ul li, /*does not exist*/
  .latestnews ul li, /*does not exist*/
  ul.latestnews li.latestnews { 
     list-style:disc outside url("../images/bullet.gif"); 
     margin-left:15px; padding-left:15px; 
  } 
ul li { line-height:180%; margin-left:30px; }
Run Code Online (Sandbox Code Playgroud)

您没有看到任何更改的原因是因为您的html结构中不存在三个选择器路径,并且通过特异性获胜的那个是第一个组.你需要:

#ja-col2 ul.latestnews li
Run Code Online (Sandbox Code Playgroud)

要覆盖#ja-col2 ul li.


Hur*_*ile 5

.myclass ul li {
    margin-left: 20px !important;
}
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩:)

  • 避免使用!important.本条款是为其他目的而开发的,并且是以GaVrA为准.它会起作用,但会产生严重的后果.用任何其他选择器覆盖是不可能的.这很难调试,很可能会干扰其他选择器.特别是如果你想在几个月后尝试改变css,那时你会忘记某个地方有一个!important子句.将来,使用选择器包含#id时,你将会遇到更多覆盖它的问题. (4认同)