flex布局容器内按钮设置flex-end不生效该如何解决?
解决方案
你只需要给按钮添加margin-top: auto即可实现需求,原理如下:
- 你的
.total容器是flex-direction: column的纵向Flex布局,主轴为纵向,align-*系列属性控制横向对齐,无法调整元素的纵向位置 - Flex布局中,子元素的主轴方向auto margin会自动占据该方向所有剩余可用空间,给按钮设置
margin-top: auto后,按钮上方的所有剩余空间会被该margin填满,自然被推到容器底部,前面的其他元素保持在顶部不动
修改步骤:
- 删除你媒体查询中给按钮设置的
align-self: flex-end,该属性仅控制横向对齐,你的按钮宽度为100%,该属性完全不生效 - 给按钮添加
margin-top: auto,可根据需求选择全局生效还是仅桌面端生效:
- 所有断点都需要按钮在底部,修改全局按钮样式:
.total button { background-color: var(--Strong-cyan); color: var(--Very-dark-cyan); font-size: large; font-weight: 700; width: 100%; max-width: 100%; margin-top: auto; /* 新增这行 */ }
- 仅桌面端(宽度≥900px)需要按钮在底部,修改媒体查询部分:
@media (min-width: 900px) { .total { height: 100%; grid-column-start: 2; grid-row-start: 1; grid-row-end: 4; justify-self: center; } .total button { margin-top: auto; /* 替换原有的align-self: flex-end */ } }
补充说明
你之前给容器子元素设置的justify-self: flex-start在Flex布局中不生效,该属性仅适用于Grid布局,不需要的话可以直接删除。
内容的提问来源于stack exchange,提问作者Carlos Ramirez
相关产品推荐
相关产品推荐

