【问题标题】:How to arrange nested divs next to each other using inline block or flex如何使用 inline block 或 flex 将嵌套的 div 排列在一起
【发布时间】:2018-09-27 09:39:35
【问题描述】:

如何使用 inline block 或 flex 将嵌套的 div 排列在一起

我的 html 中有 3 个元素。

一个图标和两个文本元素。

我希望图标在左侧,然后文本在彼此之上。

我正在尝试使用以下 html 和 css 来执行此操作,这部分工作。该图标向下移动,我尝试将其向上移动。此外,我认为有更好更正确的方法来做到这一点。

body {
  background-color: #D2D5DD;
}

.auto-complete-box {
  display: inline;
  margin-top: -20px;
}

.auto-complete-tag {
  margin-top: 15px;
  margin-left: 5px;
  display: inline-block;
}

.tag-header {
  text-transform: uppercase;
  letter-spacing: 1px;
  color: #0083cb;
}

.tag-description {
  font-weight: 100;
  font-size: 12px;
  padding: 1px;
  color: #798071;
  margin-top: 3px;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet" />
<div>
  <div class="auto-complete-box">
    <i class="fa fa-bars"></i>
  </div>
  <div class="auto-complete-tag">
    <div class="tag-header">HeaderValue</div>
    <div class="tag-description">Item description</div>
  </div>
</div>

<div>
  <div class="auto-complete-box">
    <i class="fa fa-bars"></i>
  </div>
  <div class="auto-complete-tag">
    <div class="tag-header">Header 2 </div>
    <div class="tag-description">Item description</div>
  </div>
</div>

编辑: div 对齐,并且图标也与右侧的 div 对齐,可能是通过使用拉伸。

【问题讨论】:

  • 您希望auto-complete-boxauto-complete-tag 垂直对齐吗?
  • @kukkuz,是的,我希望它们垂直对齐

标签: html twitter-bootstrap css flexbox


【解决方案1】:

使用display:flexwrap div 并删除不必要的代码(inline/inline-block)

body {
  background-color: #D2D5DD;
}
.wrap{
display:flex;
}

.tag-header {
  text-transform: uppercase;
  letter-spacing: 1px;
  color: #0083cb;
}

.tag-description {
  font-weight: 100;
  font-size: 12px;
  padding: 1px;
  color: #798071;
  margin-top: 3px;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet" />
<div class="wrap">
  <div class="auto-complete-box">
    <i class="fa fa-bars"></i>
  </div>
  <div class="auto-complete-tag">
    <div class="tag-header">HeaderValue</div>
    <div class="tag-description">Item description</div>
  </div>
</div>

<div class="wrap">
  <div class="auto-complete-box">
    <i class="fa fa-bars"></i>
  </div>
  <div class="auto-complete-tag">
    <div class="tag-header">Header 2 </div>
    <div class="tag-description">Item description</div>
  </div>
</div>

【讨论】:

  • 谢谢,现在唯一的问题是,图标比右侧堆叠的元素短得多。有没有办法让它们正确对齐。
  • 用图片更新了问题。谢谢!
  • 当我运行代码时,我看不到它...把代码放在小提琴中,让我知道链接:jsfiddle.net
  • 别担心,我明白了。我刚刚将 transform 应用于 fa ,用于拉伸。
【解决方案2】:

在尝试对齐 HTML 中的组件时,另一个更简单的方法是使用表格结构。有时在使用 CSS 时某些组件的对齐不起作用,因为可能存在冲突的样式元素。

所以我更喜欢使用一种方法来确保我的组件完全一致,就是将它们封装在一个表格中。在您的情况下,将图标和文本元素放入一行中的 2 个单独的列中,如下面的代码 sn-p 所示:

我希望这会有所帮助! :)

body {
  background-color: #D2D5DD;
}

.auto-complete-box {
  display: inline;
  margin-top: -20px;
}

.auto-complete-tag {
  margin-top: 15px;
  margin-left: 5px;
  display: inline-block;
}

.tag-header {
  text-transform: uppercase;
  letter-spacing: 1px;
  color: #0083cb;
}

.tag-description {
  font-weight: 100;
  font-size: 12px;
  padding: 1px;
  color: #798071;
  margin-top: 3px;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet" />
<table>
<tr>
    <td>
        <div>
            <div class="auto-complete-box">
            <i class="fa fa-bars"></i>
        </div></div>
        </td>
        <td>
        <div class="auto-complete-tag">
            <div class="tag-header">HeaderValue</div>
            <div class="tag-description">Item description</div>
        </div>
   </td>
   <tr>
   <td>
       <div>
           <div class="auto-complete-box">
           <i class="fa fa-bars"></i>
       </div></div>
       </td>
       <td>
       <div class="auto-complete-tag">
           <div class="tag-header">Header 2 </div>
           <div class="tag-description">Item description</div>
       </div>
       
   </td>
</tr>
</table>

【讨论】:

    【解决方案3】:

    也许这样:

    .wrap{
    display: flex;
    align-items: center;
    }
    

    【讨论】:

    • 我不明白为什么它被否决了,它完全符合要求。做那种事情会阻止人们做出贡献……
    • 您是否在提问者的代码中测试过您的解决方案?它什么也不做。另外,您没有解释您的解决方案是如何工作的。提问者的代码中甚至没有 .wrap 元素。我们并不是要阻止人们做出贡献。但是您的回答没有任何帮助。它不完整且不正确。
    • 你说的完全错误。在第一个abswer中,如果你用提供的替换.wrap,技巧就完成了......
    • 第一个答案是什么意思?第一个答案工作得非常好,这就是为什么它被投票并标记为答案的原因。你的答案,如果照原样复制到问题中,不仅会“不回答”,甚至会破坏现有的格式。我同意,这可能令人沮丧,就像我们中的许多人一样,但堆栈溢出的目的是为那些寻找现有问题的人提供高质量的解决方案
    • 你是在回答问题还是在回答问题?所以你是说人们必须阅读问题,然后阅读所有其他答案,然后我们才能理解你的答案?这对你有意义吗?如果 2 年后这个问题有 46 个答案怎么办?如果您的答案所依据的答案被更改或删除怎么办?不,我的朋友,我没有错。你的回答不好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多