【问题标题】:When flex column wraps, how can I make the second column not take up the full height of the first column?当 flex 列换行时,如何使第二列不占据第一列的全高?
【发布时间】:2019-09-22 02:15:40
【问题描述】:

假设我有一个包含 15 个项目的 flex 容器。如果我希望列换行,以便 10 个项目在第一列(例如),5 个在第二列,那么第二列中的每个项目应该只占用与第一列中的项目相同的高度。换句话说,这 5 个项目不应该占用与第一列相同的空间——间距看起来很奇怪。

有没有办法让列表中的最后一项仅显示在整个容器高度的中间点?

我想要什么:

Item      Item 
Item      Item
Item      Item
Item      Item 
Item      Item
Item      
Item       
Item      
Item  

发生了什么:

Item      Item 
Item      
Item      Item
Item       
Item      Item
Item      
Item      Item 
Item      
Item      Item

React / styled-components 代码:

  <DailyValuesContainer flexDirection="column" wrap="wrap" justify="space-between">
      <DailyValueItem>
        <DvQuantity>0g</DvQuantity><DailyValue>Saturated Fat</DailyValue>
      </DailyValueItem>
      <DailyValueItem>
        <DvQuantity>0g</DvQuantity><DailyValue>Trans Fat</DailyValue>
      </DailyValueItem>
      <DailyValueItem>
        <DvQuantity>0mg</DvQuantity><DailyValue>Cholesterol</DailyValue>
      </DailyValueItem>
      <DailyValueItem>
        <DvQuantity>7mg</DvQuantity><DailyValue>Sodium</DailyValue>
      </DailyValueItem>
      <DailyValueItem>
        <DvQuantity>11g</DvQuantity><DailyValue>Dietary Fibers</DailyValue>
      </DailyValueItem>
      <DailyValueItem>
        <DvQuantity>8g</DvQuantity><DailyValue>Sugar</DailyValue>
      </DailyValueItem>
      <DailyValueItem>
        <DvQuantity>1%</DvQuantity><DailyValue>Vitamin A</DailyValue>
      </DailyValueItem>
      <DailyValueItem>
        <DvQuantity>4%</DvQuantity><DailyValue>Vitamin C</DailyValue>
      </DailyValueItem>
      <DailyValueItem>
        <DvQuantity>11%</DvQuantity><DailyValue>Calcium</DailyValue>
      </DailyValueItem>
      <DailyValueItem>
        <DvQuantity>34%</DvQuantity><DailyValue>Iron</DailyValue>
      </DailyValueItem>
    </DailyValuesContainer>


 const DailyValuesContainer = styled(FlexContainer)`
  max-height: 170px;

const DailyValueItem = styled(FlexContainer)`
  margin-bottom: 12px;
  height: 12px;
`

const DailyValue = styled.p`
  font-weight: 400;
  font-size: 13px;
  line-height: 15px;
  color: ${colors.primary500};
`
const DvQuantity = styled(DailyValue)`
  width: 45px;
`

【问题讨论】:

  • 你能用你的代码编辑问题吗?
  • 如果你有兴趣,这通过网格来实现要容易得多:jsfiddle.net/51anytxj
  • 您告诉应用在与 justify="space-between" 的项目之间添加空格。只需将其删除。
  • 是的,这就是问题所在,谢谢!

标签: html css reactjs flexbox


【解决方案1】:

你期待这样吗:

#main {
  width: 200px;
  height: 600px;
  border: 1px solid #c3c3c3;
  display: -webkit-flex;
  -webkit-flex-wrap: wrap;
  display: flex;
  flex-wrap: wrap;
  flex-direction: column;
}

#main div {
  width: inherit;
  height: 60px;
}
<div id="main">
  <div style="background-color:grey;">item 1 </div>

  <div style="background-color:lightblue;">item 2 </div>

  <div style="background-color:khaki;">item 3 </div>

  <div style="background-color:pink;">item 4 </div>

  <div style="background-color:lightgrey;">item 5</div>

  <div style="background-color:grey;">item 6 </div>

  <div style="background-color:lightblue;">item 7 </div>

  <div style="background-color:khaki;">item 8</div>

  <div style="background-color:pink;">item 9</div>

  <div style="background-color:red;">item 10</div>


  <div style="background-color:grey;">item 1 </div>

  <div style="background-color:lightblue;">item 2 </div>

  <div style="background-color:khaki;">item 3 </div>

  <div style="background-color:pink;">item 4 </div>

  <div style="background-color:lightgrey;">item 5</div>
</div>

试试这个代码:

<DailyValuesContainer>
    <DailyValueItem>
      <DvQuantity>0g</DvQuantity><DailyValue>Saturated Fat</DailyValue>
    </DailyValueItem>
    <DailyValueItem>
      <DvQuantity>0g</DvQuantity><DailyValue>Trans Fat</DailyValue>
    </DailyValueItem>
    <DailyValueItem>
      <DvQuantity>0mg</DvQuantity><DailyValue>Cholesterol</DailyValue>
    </DailyValueItem>
    <DailyValueItem>
      <DvQuantity>7mg</DvQuantity><DailyValue>Sodium</DailyValue>
    </DailyValueItem>
    <DailyValueItem>
      <DvQuantity>11g</DvQuantity><DailyValue>Dietary Fibers</DailyValue>
    </DailyValueItem>
    <DailyValueItem>
      <DvQuantity>8g</DvQuantity><DailyValue>Sugar</DailyValue>
    </DailyValueItem>
    <DailyValueItem>
      <DvQuantity>1%</DvQuantity><DailyValue>Vitamin A</DailyValue>
    </DailyValueItem>
    <DailyValueItem>
      <DvQuantity>4%</DvQuantity><DailyValue>Vitamin C</DailyValue>
    </DailyValueItem>
    <DailyValueItem>
      <DvQuantity>11%</DvQuantity><DailyValue>Calcium</DailyValue>
    </DailyValueItem>
    <DailyValueItem>
      <DvQuantity>34%</DvQuantity><DailyValue>Iron</DailyValue>
    </DailyValueItem>
</DailyValuesContainer>


const DailyValuesContainer = styled(FlexContainer)'
width: 200px;
height: 600px;
border: 1px solid #c3c3c3;
display: -webkit-flex;
-webkit-flex-wrap: wrap;
display: flex;
flex-wrap: wrap;
flex-direction: column;
 ';    

const DailyValueItem = styled(FlexContainer)'
width: inherit;
height: 60px;
';    

const DailyValue = styled.p'
font-weight: 400;
font-size: 13px;
line-height: 15px;
color: ${colors.primary500};
';

const DvQuantity = styled(DailyValue)'
width: 45px;
';

【讨论】:

  • 是的,但不幸的是,情况并非如此,即使我有相同的基本设置。如果有帮助,我现在正在添加我正在使用的 React 代码。
  • 将您的代码上传到代码沙箱 (codesandbox.io) 并分享链接@ipenguin67
  • 先去掉 justify="space-between" ,将#main设置的所有css属性复制到 并复制#main div的所有css属性设置为 。根据你的代码 #main ---> @ipenguin67
  • 啊,是的,justify-content 肯定是导致这个问题的原因——我添加它是为了尝试在列之间获得空间,但忘记了它正在处理垂直间距,因为 flex-direction 是“列” ”。绝对是一个盲目的错误。
猜你喜欢
  • 1970-01-01
  • 2017-09-04
  • 2023-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多