1. 什么是块级格式化上下文?【BFC(Block formatting context)】
BFC(Block FormattingContext,块级格式化上下文)是一个独立的渲染区域,其中的元素的布局不会受到外部元素的影响,反之亦然。BFC的创建有助于解决一些常见的布局问题,如清除浮动、避免外边距合并等
From:国内直连GPT:GPT4o
1.1如何触发BFC
可以通过以下几种方式来创建BFC:
浮动元素 (float 的值不为 none)
绝对定位元素 (position 的值为 `absolute` 或 `fixed`)
display 的值为 `inline-block、table-cell、table-caption` 或 `flex` 等
`overflow` 的值不为 `visible`
示例demo
2.关于页面布局
2.1 左侧固定宽度,右侧自适应的几种实现方式
2.1.1 Flex布局(推荐)
父容器设置display:flex,左侧子div设置一个固定宽度,右侧设置:flex:1,实现自适应宽度
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Flexbox Layout</title><style>.container {display: flex;}.left {width: 200px; /* 固定宽度 */background-color: lightcoral;}.right {flex: 1; /* 自适应宽度 */background-color: lightblue;}</style>
</head>
<body><div class="container"><div class="left">左侧固定宽度</div><div class="right">右侧自适应宽度</div></div>
</body>
</html>
2.1.2 Grid布局
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Grid Layout</title><style>.container {display: grid;grid-template-columns: 200px 1fr; /* 左侧固定宽度,右侧自适应 */}.left {background-color: lightcoral;}.right {background-color: lightblue;}</style>
</head>
<body><div class="container"><div class="left">左侧固定宽度</div><div class="right">右侧自适应宽度</div></div>
</body>
</html>
2.1.2 使用浮动和BFC(传统方法)
使用浮动和BFC来实现布局
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Float Layout</title><style>.container {overflow: hidden; /* 创建BFC */}.left {float: left;width: 200px; /* 固定宽度 */background-color: lightcoral;}.right {margin-left: 200px; /* 右侧宽度等于左侧固定宽度 */background-color: lightblue;}</style>
</head>
<body><div class="container"><div class="left">左侧固定宽度</div><div class="right">右侧自适应宽度</div></div>
</body>
</html>
2.2 圣杯布局
圣杯布局是一个经典的三栏布局,左右两侧固定宽度,中间栏自适应宽度。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Holy Grail Layout</title><style>body {display: flex;flex-direction: column;margin: 0;}.header, .footer {height: 50px;background-color: #ccc;}.main {display: flex;flex: 1;}.main > .left, .main > .right {width: 200px;background-color: #f0f0f0;}.main > .center {flex: 1;background-color: #e0e0e0;}</style>
</head>
<body><div class="header">Header</div><div class="main"><div class="left">Left Sidebar</div><div class="center">Main Content</div><div class="right">Right Sidebar</div></div><div class="footer">Footer</div>
</body>
</html>
2.3 卡片、网格布局
2.3.1使用grid布局
.grid-model-card {display: grid;/* grid-template-columns: repeat(4, 1fr); */grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));gap: 10px;padding: 10px;overflow: auto;
}
.kg-card-item {height: 288px;
}
2.3.1使用flex布局
使用flex布局有一点不方便,就是最后几个卡片可能会居中显示,而不是我们 想要的从左到右,所以需要在html补上占位元素,这样右边就有了”看不见的元素“占位置
.card_content {width: 100%;display: flex;flex-wrap: wrap;justify-content: center;}.child_content {width: 340px;padding: 16px;height: 170px;}i {width: 340px;margin-right: 20px;}
等待更新…