布局✅
水平垂直居中
答案
- align-content
- 网格布局
- Flex布局
- Flex+margin
- absolute+transform
- absolute+margin
- table-cell
延伸阅读
- CSS 居中对齐的各种方法
- centering-in-css chrome css centering
实现三栏布局?
答案
- flex
- grid
- float
实现圣杯布局
答案
- flex
- grid
实现类似 Bootstrap 的栅格布局
答案
- grid
- flex
- percent
实现砖块布局(Masonry Layout)
答案
- column
- grid
- grid-masonry
延伸阅读
如何实现响应式断点设计?
答案
核心概念
响应式断点是指在不同屏幕尺寸下切换布局和样式的临界点。合理的断点设计能确保网站在各种设备上都有良好的显示效果。
常见断点规范
/* Bootstrap 5 断点 */
/* Extra small devices (portrait phones) */
/* 默认样式,无需媒体查询 */
/* Small devices (landscape phones, 576px and up) */
@media (min-width: 576px) { }
/* Medium devices (tablets, 768px and up) */
@media (min-width: 768px) { }
/* Large devices (desktops, 992px and up) */
@media (min-width: 992px) { }
/* Extra large devices (large desktops, 1200px and up) */
@media (min-width: 1200px) { }
/* Extra extra large devices (larger desktops, 1400px and up) */
@media (min-width: 1400px) { }
自定义断点系统
/* 定义CSS变量 */
:root {
--breakpoint-xs: 480px;
--breakpoint-sm: 768px;
--breakpoint-md: 1024px;
--breakpoint-lg: 1200px;
--breakpoint-xl: 1440px;
}
/* 使用容器查询(现代方案) */
@container (min-width: 768px) {
.card {
display: flex;
flex-direction: row;
}
}
/* 传统媒体查询 */
.grid {
display: grid;
gap: 1rem;
grid-template-columns: 1fr;
}
@media (min-width: 480px) {
.grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (min-width: 768px) {
.grid {
grid-template-columns: repeat(3, 1fr);
gap: 1.5rem;
}
}
@media (min-width: 1024px) {
.grid {
grid-template-columns: repeat(4, 1fr);
gap: 2rem;
}
}
断点选择策略
-
基于内容的断点
- 根据内容的自然断裂点设置
- 测试实际内容在不同尺寸下的表现
-
基于设备的断点
- 参考主流设备的屏幕尺寸
- 考虑目标用户群体的设备使用情况
-
基于设计的断点
- 配合设计稿的栅格系统
- 保持视觉层次的一致性
实际应用示例
/* 响应式卡片布局 */
.card-container {
display: grid;
gap: 20px;
padding: 20px;
/* 自适应列数 */
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
}
/* 响应式导航 */
.navigation {
display: flex;
flex-direction: column;
}
@media (min-width: 768px) {
.navigation {
flex-direction: row;
justify-content: space-between;
align-items: center;
}
}
/* 响应式字体大小 */
.heading {
font-size: clamp(1.5rem, 5vw, 3rem);
line-height: 1.2;
}
/* 响应式间距 */
.section {
padding: clamp(2rem, 5vw, 4rem) clamp(1rem, 5vw, 2rem);
}
最佳实践
- 优先考虑内容的自然断裂点
- 使用相对单位(rem、em、%)
- 测试真实设备而非仅依赖浏览器调试工具
- 考虑横竖屏切换的影响
- 使用现代CSS特性如clamp()、container queries
CSS 如何实现固定长宽比的元素
答案
- column
- pesudo
提示
注意 padding 采用 百分比单位时是相对于父元素宽度的。基于这个原理,在不设置高度的情况下就可以实现 任意比例的元素。然后通过内层元素绝对定位填充整个容器。
提示
采用伪类设置 padding-top 的方式实现长宽比。
延伸阅读