如您所見,第一行中的列表項具有相同的高度。但是第二行中的項目具有不同的高度。我希望所有項目有一個統一的高度。
有什么方法可以在不給定固定高度,只使用flexbox的情況下實現?
這是我的代碼
.list {
display: flex;
flex-wrap: wrap;
max-width: 500px;
}
.list-item {
background-color: #ccc;
display: flex;
padding: 0.5em;
width: 25%;
margin-right: 1%;
margin-bottom: 20px;
}
.list-content {
width: 100%;
}
<ul class="list">
<li class="list-item">
<div class="list-content">
<h2>box 1</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h1>h1</h1>
</div>
</li>
</ul>
答案是否定的。
原因在flexbox規范中提供:
6.柔性線
在多行flex容器中,每行的交叉尺寸是容納該行中flex項目所需的最小尺寸。
換句話說,當基于行的flex容器中有多行時,每行的高度(“交叉尺寸”)是包含該行上的flex項目所需的最小高度。
但是,在CSS網格布局中,等高行是可能的:
CSS網格布局中的等高行 否則,考慮JavaScript替代方案。
現在,您可以使用display: grid:
.list {
display: grid;
overflow: hidden;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 1fr;
grid-column-gap: 5px;
grid-row-gap: 5px;
max-width: 500px;
}
.list-item {
background-color: #ccc;
display: flex;
padding: 0.5em;
margin-bottom: 20px;
}
.list-content {
width: 100%;
}
<ul class="list">
<li class="list-item">
<div class="list-content">
<h2>box 1</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h1>h1</h1>
</div>
</li>
</ul>
Flexbox:使所有flex項目高度相同?
在子項中
align-self: stretch;
或者在父容器中
justify-content: stretch;
對于橫向問題,您可以使用flexbox:
.flex-list {
padding: 0;
list-style: none;
display: flex;
align-items: stretch;
flex-wrap: wrap;
justify-content: center;
gap: .5rem;
}
.flex-list li {
width: 120px;
padding: .5rem;
border-radius: 1rem;
background: yellow;
}
<ul class="flex-list">
<li>title 1</li>
<li>title 2</li>
<li>title 3<br>new line</li>
<li>title 4<br>new line</li>
<li>title 5<br>new<br>line</li>
<li>title 6</li>
</ul>
不,如果不設置一個固定的高度(或使用腳本),你就無法實現這一點。
以下是我的兩個回答,展示了如何使用腳本來實現這樣的事情:
如何從卡片或類似物上獲得與flex box相同高度的標題?
伸縮方向列伸縮容器中伸縮項的高度相同
這似乎適用于父母身高固定的情況(在Chrome和Firefox中測試過):
.child {
height : 100%;
overflow : hidden;
}
.parent {
display: flex;
flex-direction: column;
height: 70vh; // ! won't work unless parent container height is set
position: relative;
}
如果因為某種原因無法使用網格,也許這就是解決方案。
如果您知道要映射的項目,可以通過一次一行來完成。我知道這是一種變通方法,但確實有效。
對我來說,每行有4個項目,所以我把它分成兩行,每行4個:50%,去掉flex-grow,have & ltRowOne />并且& ltRowTwo />在一個& ltdiv & gt帶彈性柱。這將達到目的
<div class='flexbox flex-column height-100-percent'>
<RowOne class='flex height-50-percent' />
<RowTwo class='flex height-50-percent' />
</div>
你應該為你的flex顯示使用justify-content:stretch和align-items:stretch屬性,我認為這會使flex中的每個元素的高度相等
您可以通過以下方式實現這一目標:
align-items: stretch;
這將把每個項目拉伸到flex中具有最大高度的元素的高度。
使用flex-direction: row時,您可以通過項目上的heigh: auto來實現:
.parent {
display: flex;
flex-direction: row;
}
.item {
height: auto;
}
我也遇到了類似的問題,我使用了下面的CSS代碼:
.Box{
display: flex;
flex-direction: column;
align-items: center;
flex-wrap: wrap;
justify-content: center;
flex: 1;
}
但它的高度與屏幕不同,這就是為什么它看起來只是在中間放置了一個項目。
因此,我使用了下面的代碼,它將給出用戶的確切屏幕高度,并且由于flex,它將完美地響應:
var r = document.querySelector(':root');
let height = $(window).height()+"px";
r.style.setProperty('--height', height);
:root{
--height: 643px;
}
.Box{
display: flex;
flex-direction: column;
align-items: center;
flex-wrap: wrap;
justify-content: center;
flex: 1;
height: var(--height);
}
.btn-outline-primary{
/* border-top-left-radius: 25%;
border-top-right-radius: 25%;
border-bottom-left-radius: 25%;
border-bottom-right-radius: 25%; */
width: 100%;
border-radius: 25px;
margin: 0px 5px 5px 0px;
}
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
<link rel='stylesheet' href='./Welcome.css'>
<title>Point Of Sale</title>
</head>
<body>
<div class="Box border ">
<h1>Welcome TO POS</h1>
<div class="">
<button type="btn" class="btn btn-outline-primary btn-lg"> Log in</button>
<button type="btn" class="btn btn-outline-primary btn-lg"> Sign in</button>
</div>
</div>
<!-- Optional JavaScript; choose one of the two! -->
<!-- Option 1: jQuery and Bootstrap Bundle (includes Popper) -->
<!-- <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct" crossorigin="anonymous"></script> -->
<!-- Option 2: Separate Popper and Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js" integrity="sha384-+sLIOodYLS7CIrQpBjl+C7nPvqq+FbNUBDunl/OZv93DB7Ln/533i8e/mZXLi/P+" crossorigin="anonymous"></script>
<script src="./Welcome.js"></script>
</body>
</html>
有時候,容器的高度是動態的。在使用Flexbox的情況下,我的goto解決方案是:
在列表項中添加一個空標記。 用JS,設置高度(凌亂)。 在列表項中添加一個空標記:
只需在列表項中添加一個空標簽 比如說a & ltspan />標簽。
.parent {
display: flex;
}
.child {
display: inline-block;
align-self: flex-end;
}
這就行了。因為& ltspan />標記與flex-end對齊,它將移動到列表項的末尾。所有物品看起來都一樣高。同樣的道理也適用于寬度。
總之
只需根據您的要求在主flex-box中添加“調整內容”或“對齊項目”。
哇哦!
可以通過固定“P”標簽的高度或者固定“list-item”的高度來實現。
我已經固定了“P”的高度
溢出應該被隱藏。
.list{
display: flex;
flex-wrap: wrap;
max-width: 500px;
}
.list-item{
background-color: #ccc;
display: flex;
padding: 0.5em;
width: 25%;
margin-right: 1%;
margin-bottom: 20px;
}
.list-content{
width: 100%;
}
p{height:100px;overflow:hidden;}
<ul class="list">
<li class="list-item">
<div class="list-content">
<h2>box 1</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. </p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h1>h1</h1>
</div>
</li>
</ul>
在你的情況下,身高會自動計算,所以你必須提供身高 用這個
.list-content{
width: 100%;
height:150px;
}
對于相同的高度,你應該改變你的css“顯示”屬性。更多細節請參見給定示例。
.list{
display: table;
flex-wrap: wrap;
max-width: 500px;
}
.list-item{
background-color: #ccc;
display: table-cell;
padding: 0.5em;
width: 25%;
margin-right: 1%;
margin-bottom: 20px;
}
.list-content{
width: 100%;
}
<ul class="list">
<li class="list-item">
<div class="list-content">
<h2>box 1</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. </p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h1>h1</h1>
</div>
</li>