如何让列表中的「View Listing」按钮始终固定在卡片底部?
问题:固定卡片底部按钮位置
我希望蓝色的「View Listing」按钮始终固定在卡片外框的底部,不受标题长度影响。目前按钮位置不一致,有的在中部,有的在底部。后续我会限制标题的最大字符数,避免过长标题导致所有列表卡片高度增加。这是我第一次独立使用HTML和CSS开发,代码可能存在不少问题。
我的HTML结构
<div className="listings-container"> <h2 className="listings-title">Latest Listings</h2> <div className='listings'> <div className="card"> <div className="card-image"> <img src={ebay1} alt="..." /> </div> <div className="card-content"> <h3>DARK GREEN FOREST NIKE AIR FORCE 1 LIMITED</h3> <p>$15</p> <button className="btn card-button">View Listing</button> </div> </div> <div className="card"> <div className="card-image"> <img src={ebay2} alt="..." /> </div> <div className="card-content"> <h3>NIKE AIR FORCE 1 UTILITY (GS) BLACK-GUM BROWN SZ 6Y-WOMENS [AJ6601-003]</h3> <p>$100</p> <button className="btn card-button">View Listing</button> </div> </div> <div className="card"> <div className="card-image"> <img src={ebay3} alt="..." /> </div> <div className="card-content"> <h3>nike air force 1 mid SF AF1 youth shoes size 6.5 mushroom</h3> <p>$30</p> <button className="btn card-button">View Listing</button> </div> </div> </div> </div>
我的CSS代码
*{ box-sizing: border-box; margin: 0; padding: 0; font-family: 'Kumbh Sans', sans-serif; } .listings { display: grid; grid-template-columns: auto auto auto; justify-content: center; } .card { width: min-content; padding: 20px; margin: 20px 20px; background: #fff; box-shadow: rgba(6, 24, 44, 0.4) 0px 0px 0px 2px, rgba(6, 24, 44, 0.65) 0px 4px 6px -1px, rgba(255, 255, 255, 0.08) 0px 1px 0px inset; transition: .4s ease; border-radius: 12px; -webkit-border-radius: 12px; -moz-border-radius: 12px; -ms-border-radius: 12px; -o-border-radius: 12px; } .card .card-image { width: 300px; padding: 0 20px; background: #f4f7f8; } .card .card-image img { width: 100%; max-height: 250px; border-radius: 12px; -webkit-border-radius: 12px; -moz-border-radius: 12px; -ms-border-radius: 12px; -o-border-radius: 12px; } .card .card-content h3 { color: #222; font-size: 22px; margin-top: 20px; } .card .card-content p { color: #555; font-size: 18px; font-weight: 500; margin: 8px 0 22px; text-align: justify; } .card-button { display: inline-block; text-decoration: none; color: white; font-weight: 700; font-size: 1.125rem; width: 100%; padding: .5em; background: var(--complimentary); border: none; border-radius: .25em; -webkit-border-radius: .25em; -moz-border-radius: .25em; -ms-border-radius: .25em; -o-border-radius: .25em; } .card-button:hover { background-color: var(--lightBlue); }
解决方案
只需修改几处CSS即可实现按钮固定在卡片底部:
- 修改
.card样式,设置固定宽度并转为垂直flex容器,确保所有卡片尺寸一致:
.card { /* 替换原width: min-content; */ width: 340px; display: flex; flex-direction: column; padding: 20px; margin: 20px 20px; background: #fff; box-shadow: rgba(6, 24, 44, 0.4) 0px 0px 0px 2px, rgba(6, 24, 44, 0.65) 0px 4px 6px -1px, rgba(255, 255, 255, 0.08) 0px 1px 0px inset; transition: .4s ease; border-radius: 12px; }
- 修改
.card-content,让它占据卡片内剩余空间并转为垂直flex容器:
.card .card-content { flex: 1; display: flex; flex-direction: column; }
- 给按钮添加
margin-top: auto,自动将按钮推到内容区域底部:
.card-button { display: inline-block; text-decoration: none; color: white; font-weight: 700; font-size: 1.125rem; width: 100%; padding: .5em; background: var(--complimentary); border: none; border-radius: .25em; /* 新增该行 */ margin-top: auto; }
如果要提前处理标题过长问题,可以给标题添加多行省略样式:
.card .card-content h3 { color: #222; font-size: 22px; margin-top: 20px; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
内容的提问来源于stack exchange,提问作者Jango
相关产品推荐
相关产品推荐

