li与li之间的空白

li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?

有时,在写页面的时候,会需要将<li>这个块状元素横排显示,此时就需要将display属性设置为inline-block,此时问题出现了,在两个<li>元素之间会出现大约8px左右的空白间隙,下面举例说明:

<html>
<head>
<title>demo</title>
<style type="text/css">
*{
    margin:0;
    padding:0;
}
body {
    width:100%;
}
ul li {
    list-style-type: none;
}
h3 {
    text-align: center;
    color: blue;
    margin-bottom: 10px;
}
.wrap {
    width:600px;
    margin:0 auto;
    margin-top:100px;
}
.wrap li {
    width:25%; 
    height: 150px;
    display:inline-block;
}
.part1 {
        
        background-color:red;}
.part2 {
        
        background-color:blue;}
.part3 {
        
        background-color:yellow;}
.part4 {
        
        background-color:black;}
</style>
</head>
<body>
<div class="wrap">
<h3>li标签空白测试</h3>
<ul>
<li class="part1"></li>
<li class="part2"></li>
<li class="part3"></li>
<li class="part4"></li>
</ul>
</div>
</body>
</html>
     
     
     
     

    页面效果如图所示
    这里写图片描述

    这时候肯定有小伙伴会说,可以直接设置float:left;浮动不就可以了么?其实不然,有些容器是不能设置浮动,如左右切换的焦点图等,总之我们的前提是需要将<li>标签设置为display:inline-block;

    引起这种空白间隔的原因:

    浏览器的默认行为是把inline元素间的空白字符(空格换行tab)渲染成一个空格,也就是我们上面的代码<li>换行后会产生换行字符,而它会变成一个空格,当然空格就占用一个字符的宽度。

    解决方案:

    方法一:既然是因为<li>换行导致的,那就可以将<li>代码全部写在一排,如下

    <div class="wrap">
    <h3>li标签空白测试</h3>
    <ul>
    <li class="part1"></li><li class="part2"></li><li class="part3"></li><li class="part4"></li>
    </ul>
    </div>
         
         
         
         

      再刷新页面看就没有空白了,就是这么神奇~

      方法二:我们为了代码美观以及方便修改,很多时候我们不可能将<li>全部写在一排,那怎么办?既然是空格占一个字符的宽度,那我们索性就将<ul>内的字符尺寸直接设为0,将下面样式放入样式表,问题解决。

      .wrap ul{
             
             font-size:0px;}
           
           
           
           

        但随着而来的就是<ul>中的其他文字就不见了,因为其尺寸被设为0px了,我们只好将他们重新设定字符尺寸。

        方法三:本来以为方法二能够完全解决问题,但经测试,将li父级标签字符设置为0在Safari浏览器依然出现间隔空白;既然设置字符大小为0不行,那咱就将间隔消除了,将下面代码替换方法二的代码,目前测试完美解决。同样随来而来的问题是li内的字符间隔也被设置了,我们需要将li内的字符间隔设为默认。

        .wrap ul{
               
               letter-spacing: -5px;}
             
             
             
             

          之后记得设置li内字符间隔

          .wrap ul li{
                 
                 letter-spacing: normal;}
               
               
               
               

            总结

            浏览器会把inline元素间的空白字符(空格、换行、Tab等)渲染成一个空格。而为了美观。我们通常是一个li放在一行,这导致li换行后产生换行字符,它变成一个空格,占用了一个字符的宽度。

            解决办法:

            (1)为<li>设置float:left。不足:有些容器是不能设置浮动,如左右切换的焦点图等。
            (2)将所有<li>写在同一行。不足:代码不美观。
            (3)将<ul>内的字符尺寸直接设为0,即font-size:0。不足:<ul>中的其他字符尺寸也被设为0,需要额外重新设定其他
            字符尺寸,且在Safari浏览器依然会出现空白间隔。
            (4)消除<ul>的字符间隔letter-spacing:-8px,不足:这也设置了<li>内的字符间隔,因此需要将<li>内的字符
            间隔设为默认letter-spacing:normal。 并且如果ul中存在文本,也会由于设置了leeter-space而被挤压
            

            letter-space:设置字符间距,正数增大字符间距,负数减小字符间距,过于小会导致字符重叠在一起

            • 0
              点赞
            • 0
              收藏
              觉得还不错? 一键收藏
            • 0
              评论

            “相关推荐”对你有帮助么?

            • 非常没帮助
            • 没帮助
            • 一般
            • 有帮助
            • 非常有帮助
            提交
            评论
            添加红包

            请填写红包祝福语或标题

            红包个数最小为10个

            红包金额最低5元

            当前余额3.43前往充值 >
            需支付:10.00
            成就一亿技术人!
            领取后你会自动成为博主和红包主的粉丝 规则
            hope_wisdom
            发出的红包
            实付
            使用余额支付
            点击重新获取
            扫码支付
            钱包余额 0

            抵扣说明:

            1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
            2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

            余额充值