inline-block为什么没有对齐而是换行了?

想要左右两个高度不同的div水平排列

然后我给两个div设置了display:inline-block,奇怪的是右边的div居然换行了,按理说两个div应该顶部对齐的啊?很疑惑这是为什么?

HTML

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <div class="left">
    <p>这是为什么呢?</p>
  </div>
  <div class="right">
    <p>求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案求一个答案</p>
  </div>
</body>
</html>

CSS

*{
  margin:0;
  padding:0;
  box-sizing:border-box;
}

.left{
  display:inline-block;
  width:160px;
}
.right{
  display:inline-block;
  margin-left:180px;
}

实际效果

图片描述

期望效果

图片描述

在线demo

这个简单的小问题

阅读 6.6k
3 个回答

inline-block默认的宽度是auto,意思就是宽度随内容增加而增宽,随浏览器宽度而换行。

所以这个例子中right要设置宽度,不设置宽度,会根据内容的情况撑开。内容不够,还能一行,内容足够的情况下,会占据100%的宽度,那时就换行了

*{
      margin:0;
      padding:0;
      box-sizing:border-box;
    }

    .left{
      display:inline-block;
      width:160px;
    }
    .right{
      display:inline-block;
      width: calc(100% - 180px);
      padding-left: 20px;
    }
    .left, .right{
      vertical-align: text-top;
    }

width啊 你第二个P标签设置一个width度

因为你里面是一个p块级元素,况且你 还加了margin-left:180px;一行放不下,肯定换行了,你试着删掉margin-left 减少第二个p里面的内容看看。最简单的不用写成 inline-block;直接一个左浮动,一个右浮动

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