基于嵌套元素宽度的CSS Flex动态水平宽度

时间:2019-03-28 06:30:56

标签: html css css3 flexbox

我正在尝试使用CSS Flex创建以下布局。看起来很简单,但其中有一个棘手的部分,我将在下面进行解释。

enter image description here

HTML:

<div class="flex">

  <div class="icon-col">
    <div class="icon" style="max-width:120px;">
      <svg>image code here...</svg>
    </div>  
  </div>

  <div class="text-col">
    <h4>Awesome Design</h4>
    <p>Nullam vel sem. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur blandit mollis lacus. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc.</p>
  </div>

</div>

CSS:

.flex {
  display: flex;
  flex-direction: row;
}

.icon-col, .text-col {
  flex: 1;
}

.icon {
  width: 100%;
}

代码笔预览: https://codepen.io/anon/pen/KEjJeO

正如您在预览中看到的那样,图标和文本之间的空间太大。内联CSS中指定的图标必须为120px,并且文本列的宽度应根据图标的大小而增大或缩小。

尝试棘手的部分:

图标具有动态宽度。

我只能在HTML中的.icon元素中使用内联样式为HTML定义图标的宽度。

我无法控制.icon-col元素,就无法为其添加动态宽度。如果仅将宽度添加到.icon-col,那将很容易。

我也无法为.text-col添加宽度,因为它必须根据图标大小自动调整大小。

.icon-col与其子元素.icon的宽度相同,如何使文本列自动调整大小?

1 个答案:

答案 0 :(得分:0)

您可以对事物进行分组和移动,但这仅仅是为了获得一个想法。

.flex2 {
  width: 100%;
  display: flex;
  flex-direction: row;
  align-items: center;
  background-color: blue;
}

.icon-col {
  flex: 1 1 20%;
  background-color: #ff0000;
  position: relative;
  padding: 20px;
}

.abacadabra {
  width: 120px;
  max-width: 120px;
  position: relative;
  float: right;
  right: 5px
}

.text-col {
  flex: 1 1 80%;
  background-color: #ffff00;
  padding: 20px
}
<div class="flex2">

  <div class="icon-col">
    <div class="abacadabra">
      <svg aria-hidden="true" data-prefix="fas" data-icon="tools" class="svg-inline--fa ugbfa-tools fa-w-16 " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z"></path></svg>
    </div>
  </div>

  <div class="text-col">
    <h4>Awesome Design</h4>
    <p>Nullam vel sem. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur blandit mollis lacus. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc.</p>
  </div>

</div>