美文网首页前端技巧
float和inline-block的列表项错位问题

float和inline-block的列表项错位问题

作者: 恬雅过客 | 来源:发表于2018-11-03 19:59 被阅读1次

应用场景:房源(商品)列表

这种列表布局很场景。比如天猫,淘宝,京东等商品类网站,链家,58,赶集等房源类网站。大致效果如下图:

列表布局-0.png
一般我都会用float来实现,很简单。稍微加点点小需求,如果每个列表项的高度不定呢。比如下面这种:
列表布局-1.png
由于房源的地址,可能是一行,也可能是2行,甚至3行才能显示完整呢。
就会出现下面这种错位的情况:
列表布局-2.png
原因:float布局,它具有破坏性,float元素会脱离文档流。它的排列方式有点像肥皂泡效果。
解决方案:用display: inline-block。(当然如果这种方式碰到空字符占位问题,可以用letter-spacing: -0.5em;来处理。)代码如下:
<html>
<head>
    <meta  charset="utf-8">
    <title>列表项错位问题</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        .hidden{
            display: none;
        }
        ul{
            list-style: none;
        }
        .clear:after{
            content: '';
            display: block;
            width: 0;
            height: 0;
            clear: both;
        }
        /*demo1*/
        .demo1 {
            margin: 20px auto;
            padding: 15px 0 0;
            width: 470px;
            outline: 1px solid #f00;
        }
        .demo1 li{
            /*float: left;*/
            display: inline-block;/*关键代码*/
            margin-left: 20px;
            margin-bottom: 15px;
            width:  130px;
            height:  100px;
            background: #2196F3;
        }
        .demo1 li.large{
            height: 130px;
        }
    </style>
</head>
<body>

<div class="demo1">
    <ul class="clear">
        <li>列表项11</li>
        <li class="large">列表项22</li>
        <li>列表项33</li>
        <li>列表项44</li>
        <li>列表项55</li>
        <li>列表项66</li>
        <li>列表项77</li>
        <li>列表项88</li>
    </ul>
</div>

</body>
</html>

应用场景:带排序功能的房源(商品)列表

在这里,我碰到的另外一个问题,让我加深了对float元素的特性的理解。如图:


列表布局-3.png

当时做的时候,出现了下面这种错位情况:


列表布局-4.png

列表中,无论我用float还是inline-block,仍旧这样。后来才发现,是因为排序栏,用了float,列表用了margin-top负数,导致列表和排序栏之间有重叠,也就是列表跟用了float的那块内容有重叠就会被挤下去。inline-block会整块被挤下去,就像上图那样;而float只是被挤下去重叠那部分。


列表布局-5.png

代码附上,可自行去验证:

<html>
<head>
    <meta  charset="utf-8">
    <title>列表项错位问题</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        ul{
            list-style: none;
        }
        .clear:after{
            content: '';
            display: block;
            width: 0;
            height: 0;
            clear: both;
        }
        /*demo2*/
        .demo2 {
            margin: 20px auto;
            width: 470px;
            outline: 1px solid #f00;
        }
        /*排序*/
        .top {
            background: #efd68a;/*做标识用,方便查看列表和排序栏直接的交叉重叠部分*/
            height: 40px;
        }
        .top .sort{
            float: right;
        }
        .top .sort a{
            height: 40px;
            line-height: 40px;
        }
        .con{
            margin-top: -10px;
            padding: 0 0 15px;
        }
        /*列表*/
        .demo2 ul{
            margin-top: -15px;
        }
        .demo2 li{
            /*float: left;*/
            display: inline-block;
            margin-top: 15px;
            margin-left: 20px;
            width:  130px;
            height:  100px;
            background: #2196F3;
        }
        .demo2 li.large{
            height: 130px;
        }

    </style>
</head>
<body>
<div class="demo2">
    <div class="top clear">
        <div class="sort">
            <a href="#">最新 -</a>
            <a href="#">面积 ↓</a>
            <a href="#">价格 ↑</a>
        </div>
    </div>
    <div class="con">
        <ul class="clear">
            <li>列表项11</li>
            <li class="large">列表项22</li>
            <li>列表项33</li>
            <li>列表项44</li>
            <li>列表项55</li>
            <li>列表项66</li>
            <li>列表项77</li>
            <li>列表项88</li>
        </ul>
    </div>
</div>
</body>
</html>

解决方式:别让下面的列表跟上面用了float排序栏的重叠就行。将排序栏的float改成position: absolute;,或列表不用margin-top负数。

相关文章

  • float和inline-block的列表项错位问题

    应用场景:房源(商品)列表 这种列表布局很场景。比如天猫,淘宝,京东等商品类网站,链家,58,赶集等房源类网站。大...

  • inline-block布局

    应不应该使用inline-block代替float 学习目标 知道inline-block布局和float布局的区...

  • inline-block

    float和display:inline-block区别 float Float 经常用于实现文字环绕图片 dis...

  • 简单布局

    第一列第5个布局 inline-block实现flex实现 第2列第1个布局 float实现flex实现 第3列第...

  • bootstrap冻结列

    冻结列遇到的问题: 冻结列和其余列不在同一行,出现错位问题在网上找到这篇文档,问题得到解决: https://ww...

  • css 基础

    overflow: hidden错位解决方法 /*display: inline-block;position: ...

  • ie浏览器float right 向下错位解决办法

    ie浏览器float right 向下错位解决办法 ie360 浏览器float right 向下错位解决办法 s...

  • CSS基础布局

    CSS布局 盒模型 Flexbox 使用float布局 inline-block 布局 响应式设计和布局 CSS面...

  • BFC 的作用

    BFC 的定义: 对元素设置 float, absolute, inline-block (table-cell,...

  • ElementUI 表格列 错位问题

    现象: 在开发后台管理项目中不止一次碰见过elementUI表格错位问题。如下图所示 表格出现问题的共同点有: 1...

网友评论

    本文标题:float和inline-block的列表项错位问题

    本文链接:https://www.haomeiwen.com/subject/prckxqtx.html