css基本功
为什么 ::first-letter 是伪元素?
::first-letter 的作用是选择并样式化元素的第一个字母,它创建了一个虚拟的元素来包裹这个字母,因此属于伪元素。
grid布局
案例一
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>CSS Grid布局完全指南</title>
<style>
.code-example {
background: #f4f4f4;
padding: 15px;
margin: 10px 0;
border-radius: 5px;
}
.grid-visual {
border: 2px solid #333;
margin: 20px 0;
padding: 10px;
}
.grid-item {
background: #4CAF50;
padding: 20px;
border: 2px solid #fff;
text-align: center;
color: white;
}
</style>
</head>
<body>
<section>
<h2>实战示例</h2>
<h3>基本网格布局</h3>
<div class="grid-visual" style="
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
">
<div class="grid-item">1</div>
<div class="grid-item">2</div>
<div class="grid-item">3</div>
<div class="grid-item">4</div>
<div class="grid-item">5</div>
<div class="grid-item">6</div>
</div>
<h3>复杂布局</h3>
<div class="grid-visual" style="
display: grid;
grid-template-columns: 200px 1fr;
grid-template-rows: 100px 1fr 50px;
grid-template-areas:
'header header'// 同样是header 的格子会自动合并
'sidebar main'
'footer footer';
height: 400px;
gap: 15px;
">
<div class="grid-item" style="grid-area: header">Header</div>
<div class="grid-item" style="grid-area: sidebar">Sidebar</div>
<div class="grid-item" style="grid-area: main">Main Content</div>
<div class="grid-item" style="grid-area: footer">Footer</div>
</div>
</section>
</body>
</html>
案例二
<!DOCTYPE html>
<html>
<head>
<style>
.container {
display: grid;
grid-template-columns: repeat(3, 100px);
/* 3列,每列100px */
grid-template-rows: repeat(3, 100px);
/* 3行,每行100px */
gap: 10px;
background: #eee;
padding: 20px;
}
.item {
background: #4CAF50;
border: 2px solid #333;
padding: 20px;
font-family: Arial;
color: white;
display: flex;
align-items: center;
justify-content: center;
}
</style>
</head>
<body>
<div class="container">
<div class="item item1">Item 1</div>
<div class="item item2">Item 2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
</div>
</body>
</html>
案例三
在案例二的基础上加上grid-area的效果,注意细品
<!DOCTYPE html>
<html>
<head>
<style>
.container {
display: grid;
grid-template-columns: repeat(3, 100px);
/* 3列,每列100px */
grid-template-rows: repeat(3, 100px);
/* 3行,每行100px */
gap: 10px;
background: #eee;
padding: 20px;
}
.item {
background: #4CAF50;
border: 2px solid #333;
padding: 20px;
font-family: Arial;
color: white;
display: flex;
align-items: center;
justify-content: center;
}
.item1 {
grid-column: 1 / 3;/* 列从第1线到第3线(占据第1、2列) */
/* 列范围 */
grid-row: 1 / 2;/* 行从第1线到第2线(占据第1行) */
/* 行范围 */
background: #2196F3;
}
.item2 {
grid-area: 2 / 2 / 4 / 4; /* 行开始/列开始/行结束/列结束 */
/* 简写语法 */
background: #FF5722;
}
</style>
</head>
<body>
<div class="container">
<div class="item item1">Item 1</div>
<div class="item item2">Item 2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
</div>
</body>
</html>
案例四
注意grid-auto-flow: row dense;这行的作用
<!DOCTYPE html>
<html>
<head>
<style>
.container {
display: grid;
grid-template-columns: repeat(2, 100px);
/* 显式列:2列 */
grid-template-rows: repeat(1, 50px);
/* 显式行:1行 */
grid-auto-columns: 100px;
/* 隐式列宽度 */
grid-auto-rows: 50px;
/* 隐式行高度 */
grid-auto-flow: row dense;
/* 自动排列方式 */
gap: 10px;
background: #eee;
padding: 20px;
}
.item {
background: #4CAF50;
padding: 20px;
border: 2px solid #333;
color: white;
display: flex;
align-items: center;
justify-content: center;
}
/* 特殊项目样式 */
.item.wide {
grid-column: span 2;
}
/* 横跨2列 */
.item.tall {
grid-row: span 2;
}
/* 竖跨2行 */
</style>
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item wide">2(跨2列)</div>
<div class="item">3</div>
<div class="item tall">4(跨2行)</div>
<div class="item">5</div>
<div class="item">6</div>
</div>
</body>
</html>
如果没有grid-auto-flow: row dense;,是以下效果
row dense填充了行的空白