两个行块宽度50%却不在同一行

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            padding:0;
            margin: 0;
            border: none;
        }
        .wrapper {
            width: 500px;
            overflow: hidden;
            background-color: grey;
        }
        .cell {
            display: inline-block;
            width: 50%;
        }
        .left {
            background-color: red;
        }
        .right{
            background-color: blue;
            
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="cell left">left</div>
        <div class="cell right">right</div>
    </div>
</body>
</html>

clipboard.png

直觉认为红块和蓝块应该是在同一行,然而并不是
设置float:left属性后两块并排了,width:49%也并排了,width:250px还是两排。造成这个问题的关键点在哪?

阅读 7.3k
4 个回答

在于 两个子div之间有一个 空白文本节点!去掉后就好了

<div class="cell left">left</div><div class="cell right">right</div>

或者

   <div class="cell left">left</div><!--
--><div class="cell right">right</div>

问题的根源是 inlineinline-block 是内联布局,既然是内联那么就会受空白区域的影响;这一点你可以试着在 .wrapper 加上 white-space: nowrap;,会看到有一小区域是空白的。

解决办法:

1、去掉空白

2、font-size:0 让空白区域消失

.wrapper {
    width: 500px;
    overflow: hidden;
    background-color: grey;
    font-size: 0;
}
.cell {
    display: inline-block;
    width: 50%;
    font-size:12px;
}

父元素和子元素同时浮动。

.wrapper {
            width: 500px;
            overflow: hidden;
            background-color: grey;
            float: left;
        }
        .cell {
            display: inline-block;
            width: 50%;
            float: left;
        }

使用inline-block的元素之间会存在4px的空白间距。
去除空白间距:
设置父元素.wrapper的属性font-size:0px
然后再给子元素.cell的属性添加font-size:16px
子元素的字体大小可以随意设置,这种办法不兼容Safari浏览器

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏