Flexbox - 在行尾对齐图标(自我辩护)

时间:2017-12-12 13:24:43

标签: html css css3 flexbox

我想在每行的末尾显示一个图标。我试图用flexbox解决这个问题,但我不明白自我是如何运作的。



ul {
  list-style-type: none;
}

div {
  display:flex;
}

div:first-child {
  justify-self: flex-start;
}

div:last-child {
  justify-self: flex-end;
}

<section>
  <ul>
    <li>
      <div>
        <p>I want an icon at the end</p>
        <i>ICON</i>
      </div>
    </li>
    <li>
      <div>
        <p>but I dont know how</p>
        <i>ICON</i>
      </div>
    </li>
  </ul>
</section>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:2)

justify-self 属性仅用于网格,而不用于 Flexbox ,它使用align-self 垂直对齐的属性

你需要的是{em> flex-container 上的justify-content: space-between,它将 flex-items 孩子分开并将它们分开尽可能在水平轴上。

&#13;
&#13;
ul {
  list-style-type: none;
}

div {
  display: flex;
  justify-content: space-between;
}
&#13;
<section>
  <ul>
    <li>
      <div>
        <p>I want an icon at the end</p>
        <i>ICON</i>
      </div>
    </li>
    <li>
      <div>
        <p>but I dont know how</p>
        <i>ICON</i>
      </div>
    </li>
  </ul>
</section>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以考虑margin-left:auto将图标向右推,如下所示:

&#13;
&#13;
ul {
  list-style-type: none;
}

div {
  display:flex;
}

div i {
  margin-left:auto;
}
&#13;
<section>
  <ul>
    <li>
      <div>
        <p>I want an icon at the end</p>
        <i>ICON</i>
      </div>
    </li>
    <li>
      <div>
        <p>but I dont know how</p>
        <i>ICON</i>
      </div>
    </li>
  </ul>
</section>
&#13;
&#13;
&#13;

答案 2 :(得分:-1)

我还添加了图标对齐。

&#13;
&#13;
ul {
  list-style-type: none;
}

div {
  display:flex;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
}
&#13;
<section>
  <ul>
    <li>
      <div>
        <p>I want an icon at the end</p>
        <i>ICON</i>
      </div>
    </li>
    <li>
      <div>
        <p>but I dont know how</p>
        <i>ICON</i>
      </div>
    </li>
  </ul>
</section>
&#13;
&#13;
&#13;

但我会使用列,因为这种方式在更复杂的响应方案中会变得棘手。 我想有两个列,一个用于文本,另一个用于图标。将元素放入容器可以获得更多的控制和可重用性。

&#13;
&#13;
ul {
  list-style-type: none;
}

div {
  display:flex;
  flex-direction: row;
  align-items: center;
}

.column-text  {
  flex: 4;
}

.column-icon  {
  flex: 1;
}
&#13;
<section>
  <ul>
    <li>
      <div>
        <div class='column-text'>
          <p>Some text</p>
        </div>
        <div class='column-icon'>
          <i>ICON</i>
        </div>
      </div>
    </li>
    <li>
      <div>
        <div class='column-text'>
          <p>Some other text</p>
        </div>
        <div class='column-icon'>
          <i>ICON</i>
        </div>
      </div>
    </li>
  </ul>
</section>
&#13;
&#13;
&#13;