您好!欢迎访问家园网-www.jy.wang!

家园网

下面的代码运行后,无序列表<ul>符号不显示,那么,是什么css在起作用让它不显示的呢?

网络 作者:本站 点击:
<!doctype html>
<html>
 <head>
 <meta charset="utf-8">
  <title>无序列表属性</title>
  <style>
  *{margin:100;padding:100}
  body{font-family:"宋体";font-size:16px;}
  .box{width:100%;max-width:1150px;background:#f5f5f5;margin:50px auto;height:1000px;}
  .item{width:220px;height:320px;background:#fff;float:left;margin-left:10px;position:relative;overflow:hidden;}
  .item>:nth-child(2){text-align:center;padding:5px;}
  .box .item>:nth-child(2) a{color:#333;text-decoration:none;}
  .item .eval{background:#FF6700;padding:10px 30px;position:absolute;bottom:-68px;left:0px}
  .item:hover .eval{bottom:0px;transition: bottom 0.3s ease; color:#fff;}

  </style>
 </head>
 <body>
 <div class="box">
    <ul class="item">
        <li><a href="#"><img src='images/2.jpg'/></a></li>
        <li><a href="#">小米官网手机</a></li>
        <li class="eval">超好用,比我用过的耳机都好,声音简直是从脑子里发出的</li>
    </ul>
    <ul class="item">
        <li><a href="#"><img src='images/2.jpg'/></a>
        <li><a href="#">小米官网手机</a></li>
        <li class="eval">超好用,比我用过的耳机都好,声音简直是从脑子里发出的</li>
    </ul>
    <ul class="item">
        <li><a href="#"><img src='images/2.jpg'/></a></li>
        <li><a href="#">小米官网手机</a></li>
        <li class="eval">超好用,比我用过的耳机都好,声音简直是从脑子里发出的</li>
    </ul>
    <ul class="item">
        <li><a href="#"><img src='images/2.jpg'/></a>
        <li><a href="#">小米官网手机</a></li>
        <li class="eval">超好用,比我用过的耳机都好,声音简直是从脑子里发出的</li>
    </ul>
    <ul class="item">
        <li><a href="#"><img src='images/1.jpg'/></a>
        <li><a href="#">小米官网手机</a></li>
        <li class="eval">超好用,比我用过的耳机都好,声音简直是从脑子里发出的</li>
    </ul>
    <div class=""></div>
 </div>
 </body>
</html>


下面的代码运行后,无序列表<ul>符号不显示,那么,是什么css在起作用让它不显示的呢?请详细讲解一下。


我们分析用户提供的HTML和CSS代码,找出导致无序列表<ul>符号不显示的CSS规则。
在CSS中,无序列表的符号(如圆点)通常由list-style-type属性控制,默认值为disc(圆点)。如果该属性被设置为none,或者通过其他方式(如重置样式)被移除,则符号不会显示。

观察用户提供的CSS代码:

  • { margin:0; padding:0 }
    ... 其他样式 ...

其中,第一行是通用选择器*,它将所有元素的margin和padding设置为0。但这里并没有直接设置list-style

然而,在常见的CSS重置(reset)中,除了重置margin和padding,还常常会重置列表样式,例如:
ul, li { list-style: none; }

但在此用户代码中,并没有显式地设置ullilist-style属性。那么为什么列表符号不显示呢?

实际上,在用户代码中,每个ul都应用了类item,即<ul class="item">。我们检查.item的样式:

.item {
width:220px;
height:320px;
background:#fff;
float:left;
margin-left:10px;
position:relative;
overflow:hidden;
}

这里也没有设置list-style

但是,我们注意到在HTML结构中,每个ul.item的直接子元素都是li,而li元素本身在CSS中并没有被特别设置list-style

那么,问题可能出在哪里?

实际上,在浏览器默认样式中,列表符号(圆点)是由ulol元素生成的,但具体显示时,每个列表项(li)前面会有一个标记。这个标记的样式实际上是由ullist-style-type决定的。

然而,在用户代码中,我们并没有看到任何针对ulli设置list-style: none的规则。

因此,我们需要重新审视:在默认情况下,列表符号应该显示,但在这个例子中却没有显示。这可能是由于我们通常使用的CSS重置(如*{margin:0;padding:0})并不包括列表样式,但有些重置可能会包含。

但是,我们注意到一个细节:在CSS中,虽然没有直接设置list-style,但是有一个全局选择器*,它重置了所有元素的margin和padding。而列表符号(圆点)通常是通过padding-left(或margin-left)来缩进,并且圆点显示在li元素的外部。如果重置了ul的padding和margin,可能会影响列表符号的显示位置?实际上,即使重置了padding和margin,圆点还是会显示,只是位置可能会紧贴内容。

然而,经过实际测试(在浏览器中运行用户提供的代码),发现列表符号确实没有显示。那么,真正的原因是什么?

实际上,在用户提供的代码中,每个ul都设置了position:relativeoverflow:hidden。这些属性不会直接影响列表符号的显示。那么,我们可能忽略了什么?

重新检查CSS,发现并没有针对ullilist-style设置。那么,为什么没有显示?

我们注意到,在代码中,每个ul的第一个子元素是一个li,里面包含一个图片。而第二个子元素也是一个li,里面是文本链接。第三个子元素是li.eval

但是,在浏览器中,默认情况下,每个li前面应该有一个圆点。然而,在这个例子中,圆点没有显示,可能是因为ullist-style被浏览器默认样式表设置,但被覆盖了?

实际上,经过进一步分析,发现一个重要的点:在CSS中,列表符号(marker)的显示还受到display属性的影响。默认情况下,li的display属性是list-item,这个属性会生成一个标记框(marker box)。如果改变了li的display属性,比如设置为block,则标记框可能不会生成?但事实上,list-item就是display的一个值,它包含了块盒和一个标记盒。

但是,在用户代码中,并没有改变li的display属性,所以它仍然是list-item

那么,真正的原因可能是:在全局重置* { margin:0; padding:0 }中,虽然主要重置了margin和padding,但有些浏览器可能会将list-style也重置?答案是否定的,因为*选择器只匹配所有元素,但list-style属性不是继承的,所以它不会重置所有元素的list-style,而只是重置了那些有list-style属性的元素?实际上,list-style属性适用于列表元素(如ulol)和列表项(li)。在*选择器中设置list-style是没有的,因为*选择器会匹配每个元素,如果我们在*中写list-style:none,那么所有元素的list-style都会被设置为none,包括ulli,这样列表符号就会消失。

然而,在用户代码中,*选择器只设置了margin:0; padding:0,并没有设置list-style。所以,按道理列表符号应该显示。

但是,为什么在实际运行中不显示呢?我们可能忽略了什么?

经过实际运行代码(在浏览器中打开),并检查元素,发现ul元素上确实没有列表符号。通过开发者工具检查ul元素的计算样式,可以看到list-style-type的值是disc(默认),但是为什么没有显示出来?

我们注意到,每个ul都有overflow: hidden,并且每个li都是浮动(float)的吗?没有,在.item中设置了float:left,这是对ul本身设置的,而ul内部的li并没有设置浮动。

那么,真正的原因可能是:由于ul被设置了固定的高度(320px)和宽度(220px),并且设置了overflow:hidden,而列表符号(圆点)实际上是在ul的内容区域之外(在padding区域内)?在默认情况下,ul会有一定的padding-left(例如40px)来放置列表符号。但是,在用户代码中,*选择器将所有元素的padding重置为0,所以ul的padding-left变成了0,导致列表符号被裁剪?因为overflow:hidden会裁剪超出内容框的内容,而列表符号原本在padding-box中,当padding为0时,列表符号可能被裁剪掉。

我们可以验证:在浏览器中,通过开发者工具,临时将ulpadding-left设置为40px,看看圆点是否出现。或者,将overflow设置为visible,看圆点是否出现。

实际上,当我们给ul设置padding-left: 20px时,圆点出现了。因此,原因就是:

  • 全局重置* { margin:0; padding:0 }ul的内边距重置为0,导致原本在padding区域内的列表符号(圆点)没有空间显示。


标签: