里会导致内边距丢失、文字对齐错乱,因为.card本身不提供内容区填充。Bootstrap 4 的卡片设计逻辑是:.card只负责容器边框和圆角,所有内容填充必须显式由.card-body承担。
常见错误是写成这样:<div class="card"><form>...</form></div>——表单控件会紧贴卡片边缘,.form-control的上下间距也会塌陷。
-
.card-body是必加的中间层,它提供1.25rem内边距和flex布局基础
- 表单标签(
<label></label>)、输入框(<input class="form-control">)等仍按标准表单结构组织,无需额外改类名
- 如果表单带标题,建议用
<h5 class="card-title"></h5>放在.card-body外侧顶部,或放在.card-body内部但需注意margin-top可能被重置
表单按钮放.card-footer还是.card-body里?
取决于你是否需要底部固定定位或视觉分离。.card-footer自带浅灰背景和上边框,适合做操作区域;而放在.card-body里更紧凑,但按钮会和其他表单项共享垂直间距。
典型场景下,注册/登录类表单推荐用.card-footer:它自动右对齐(配合text-right或justify-content-end),且与主体内容有明确分隔,避免用户误点其他输入项。
Bootstrap
Bootstrap 5.3.8 编译版包含可直接用于项目的 CSS、JavaScript 和插件文件,适合快速搭建响应式网页。
下载
- 使用
.card-footer时,按钮需加btn类(如btn btn-primary),否则无样式
- 若按钮需居中,不要依赖
text-center,改用class="d-flex justify-content-center"——因为.card-footer默认是display: flex
- 禁用状态(
disabled)对.card-footer内按钮依然生效,但不会影响整个卡片的交互反馈
内联表单(.form-inline)和.card一起用要注意宽度断点
Bootstrap 4 的.form-inline在屏幕宽度 .card默认宽度是100%,这会导致小屏下表单项被压缩甚至换行错位。
解决办法不是删.form-inline,而是给.card加响应式宽度控制:
- 加
class="w-100 w-md-75 w-lg-50"——在小屏保持全宽,中屏缩到75%,大屏缩到50%,避免撑开
- 避免用
style="width: 300px"硬编码,破坏响应式逻辑
-
.form-inline内的<label></label>不能省略for属性,否则小屏堆叠时焦点关联失效
验证提示(invalid-feedback)位置容易错乱
当表单启用客户端验证(required、pattern等),.invalid-feedback默认显示在.form-control下方,但如果.form-control在.card-body里,而.invalid-feedback没紧跟其后,就会脱离上下文,飘到卡片外或重叠。
关键约束:每个.invalid-feedback必须作为.form-control的**直接后续兄弟节点**,且二者同级包裹在.form-group里。
- 错误写法:
<div class="card-body"><input class="form-control"></div>
<div class="invalid-feedback">...</div>
- 正确写法:
<div class="form-group">
<input class="form-control" required><div class="invalid-feedback">必填</div>
</div>
- 如果用了
.col-*-栅格,确保.invalid-feedback也在同一列内,否则flex换行会破坏位置关系
卡片和表单组合最易忽略的是
.card-body的flex方向——它默认是
flex-direction: column,所以表单项天然垂直排列;但一旦你手动加了
flex-row或
flex-wrap,就必须同步调整所有子元素的
margin和
width,否则
.form-control会溢出卡片边界。