使用 CSS Grid 实现两栏四列布局:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.container {
display: grid;
grid-template-columns: repeat(2, 1fr); /* 两列 */
grid-template-rows: repeat(4, auto); /* 四行 */
gap: 20px; /* 控制每个元素之间的间距 */
}
.item {
background-color: lightgray;
padding: 10px;
margin: 5px;
}
</style>
<title>Two Columns Four Rows Layout</title>
</head>
<body>
<div class="container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
<div class="item">Item 7</div>
<div class="item">Item 8</div>
</div>
</body>
</html>
关键点:
-
grid-template-columns: repeat(2, 1fr)
: 将网格分为两列,每列占据均等宽度(1fr
表示 "1 fraction")。 -
grid-template-rows: repeat(4, auto)
: 网格共有四行,行高根据内容自动调整。 -
gap: 20px
: 控制每一项之间的间距。 -
margin: 5px
和padding: 10px
: 可以设置每个元素的外边距和内边距。
问题处理:如果 margin
导致了段落之间的对齐问题:
-
可以通过调节
margin
和padding
来确保内容始终对齐。 -
如果不同列的内容长度不同而导致不对齐,可以使用
grid-auto-rows
设置固定的行高,或通过flexbox
布局来自动调整元素的高度。
使用 Flexbox 实现类似布局:
如果你想使用 flexbox
,可以通过以下代码实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.container {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.item {
flex: 1 1 calc(50% - 20px); /* 每个元素占50%宽度并减去间距 */
box-sizing: border-box;
background-color: lightgray;
padding: 10px;
margin: 5px;
}
</style>
<title>Two Columns Four Rows Layout</title>
</head>
<body>
<div class="container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
<div class="item">Item 7</div>
<div class="item">Item 8</div>
</div>
</body>
</html>
Flexbox 关键点:
-
flex-wrap: wrap
: 使元素自动换行,从而实现两列的布局。 -
flex: 1 1 calc(50% - 20px)
: 每个元素占据50%的宽度,并减去20px
的间距。
通过以上方案,应该能解决你提到的布局问题,以及通过灵活调整 margin
和 padding
来确保元素间对齐。