【问题标题】:CSS: stop second child (paragraph) from enlarging width of parentCSS:阻止第二个孩子(段落)扩大父母的宽度
【发布时间】:2019-04-13 10:38:32
【问题描述】:

我有 flexbox 框列表,其宽度由选择下拉列表和旁边的按钮控制。当我在其下方显示错误并且错误很长时,框会放大(宽度)。 请参阅此jsFiddle example。 我怎么能阻止它。我希望错误包装和框与选择+按钮一样宽。 它仍然必须是灵活的,所以段落没有最大宽度。 并且没有绝对的位置。 真正的代码也不是 jQuery (AngularJS)。

html:

<div class="container">
  <ul class="items">
    <li class="item">
      <h2>Title 1</h2>
      <div>
        <select name="item-1-options" id="item-1-options">
          <option value="1">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</option>
          <option value="2">Lorem ipsum dolor sit amet</option>
          <option value="3">Lorem ipsum dolor</option>
        </select>
        <button>Select</button>
      </div>
      <div class="errors">
        <p class="error">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ultricies.</p>
      </div>
    </li>
    <li class="item">
      <h2>Title 1</h2>
      <div>
        <select name="item-1-options" id="item-1-options">
          <option value="1">Lorem ipsum .</option>
          <option value="2">Lorem ipsum dolor sit amet</option>
          <option value="3">Lorem ipsum dolor</option>
        </select>
        <button>Select</button>
      </div>
      <div class="errors">
        <p class="error">Lorem ipsum dolor sit amet, consectetur adipiscingLorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ultricies. Lorem ipsum dolor</p>
      </div>
    </li>
  </ul>

盒子的CSS:

.items {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}
.item {
  display: block;
  padding: 1em;
  margin: 1em;
  border: 1px grey solid;
  background: white;
  flex-grow: 1;
}

【问题讨论】:

  • 我不明白你想要完成什么。

标签: html css layout flexbox


【解决方案1】:

如果我是正确的,您只需将您的子 div 包装为子 1 的下拉列表和按钮,将错误消息作为子 2,将它们包装在带有内联块的父 div 中。设置子 2 flex-grow 为 1 和 width 为 0,然后 ta-da

$("#toggle-errors").on("click", function(){
	$(".errors").toggle();
});
.wrapper > div {
  border: 1px solid tomato;
}

.errors {
  display: flex;
}

.errors p {
  flex-grow: 1;
  width: 0;
}

.wrapper {
  display: inline-block;
}

.items {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}
.item {
  display: block;
  padding: 1em;
  margin: 1em;
  border: 1px grey solid;
  background: white;
  flex-grow: 1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="toggle-errors">Toggle Errors</button>
<div class="container">
  <ul class="items">
    <li class="item">
      <h2>Title 1</h2>
           <div class="wrapper">
        <div>
           <select name="item-1-options" id="item-1-options">
              <option value="1">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</option>
              <option value="2">Lorem ipsum dolor sit amet</option>
              <option value="3">Lorem ipsum dolor</option>
          </select>
          <button>Select</button>
        </div>
      
        <div class="errors">
          <p class="error">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ultricies.</p>
        </div>
    </li>
    <li class="item">
      <h2>Title 1</h2>
           <div class="wrapper">
        <div>
           <select name="item-1-options" id="item-1-options">
              <option value="1">Lorem ipsum dolor</option>
              <option value="2">Lorem ipsum dolor sit amet</option>
              <option value="3">Lorem ipsum dolor</option>
          </select>
          <button>Select</button>
        </div>
      <div class="errors">
        <p class="error">Lorem ipsum dolor sit amet, consectetur adipiscingLorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ultricies. Lorem ipsum dolor</p>
      </div>
    </li>
    <li class="item">
      <h2>Title 1</h2>
      <div>
        <select name="item-1-options" id="item-1-options">
          <option value="1">Lorem ipsum dolor sit amet, consectetur.</option>
          <option value="2">Lorem ipsum dolor sit amet</option>
          <option value="3">Lorem ipsum dolor</option>
        </select>
        <button>Select</button>
      </div>
    </li>
  </ul>
</div>

【讨论】:

  • 这行得通,谢谢。有时简单的事情会让我们头疼,我们需要一些新的头脑来看待这个问题。
猜你喜欢
  • 2021-10-29
  • 2021-01-23
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
相关资源
最近更新 更多