学习来源:尚硅谷前端html+css零基础教程,2023最新前端开发html5+css3视频
文章目录
- 📚元素的显示模式
- 🐇CSS长度单位
- 🐇元素的显示模式
- ⭐️块元素(block)
- ⭐️行内元素(inline)
- ⭐️行内块元素(inline-block)
- 🐇总结各元素的显示模式
- 🐇修改元素的显示模式
- 📚CSS盒子模型
- 🐇盒子模型的组成
- 🐇盒子内容区(content)
- 🐇盒子的内边距(padding)
- 🐇盒子边框(border)
- 🐇盒子外边距(margin)
- ⭐️margin注意事项
- ⭐️margin塌陷问题
- ⭐️margin合并问题
- 🐇处理内容溢出
- 🐇隐藏元素的方式
- 🐇样式的继承
- 🐇默认样式
- 🐇布局小技巧🔥
- 🐇元素之间的空白问题
- 🐇行内块的幽灵空白问题
⭐️前文回顾:前端 | (五)CSS三大特性及常用属性 | 尚硅谷前端html+css零基础教程2023最新
⭐️前文对应p87-p112
,本文对应p113-p132
⭐️补充网站:W3school,MDN
📚元素的显示模式
🐇CSS长度单位
🐇元素的显示模式
⭐️块元素(block)
- 也即块级元素。
- 在页面中独占一行,不会与任何元素共用一行,是从上到下排列的。
- 默认宽度:撑满父元素。
- 默认高度:由内容撑开。
- 【
可以
通过CSS设置宽高】。
⭐️行内元素(inline)
- 也即内联元素。
- 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左到右排列。
- 默认宽度:由内容撑开。
- 默认高度:由内容撑开。
- 【
无法
通过CSS设置宽高】。
⭐️行内块元素(inline-block)
- 也即内联块元素。
- 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左到右排列。
- 默认宽度:由内容撑开。
- 默认高度:由内容撑开。
- 【
可以
通过CSS设置宽高】。
🐇总结各元素的显示模式
🐇修改元素的显示模式
通过CSS中的display
属性可以修改元素的默认显示模式,常用值如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>修改元素的显示模式</title>
<style>
div{
width: 200px;
height: 200px;
font-size: 20px;
/* 块元素改行内块元素,CSS可控制宽高且可一行显示 */
display: inline-block;
}
#d1{
background-color: pink;
}
#d2{
background-color: palegreen;
}
#d3{
background-color: blue;
}
a{
font-size: 20px;
width: 200px;
height: 200px;
/* 行内元素改块元素,css可控制宽高 */
/* 这时候点击整个框都能完成超链接跳转 */
display: block;
}
#s1{
background-color: pink;
}
#s2{
background-color: palegreen;
}
#s3{
background-color: blue;
}
</style>
</head>
<body>
<div id="d1">你好1</div>
<div id="d2">你好2</div>
<div id="d3">你好3</div>
<hr>
<a id="s1" href="https://www.baidu.com">去百度</a>
<a id="s2" href="https://www.jd.com">去京东</a>
<a id="s3" href="https://www.toutiao.com">去头条</a>
</body>
</html>
📚CSS盒子模型
🐇盒子模型的组成
CSS会把所有的HTML元素都看成一个盒子,所有的样式也都是基于这个盒子。
margin
(外边框):盒子与外界的距离。border
(边框):盒子的边框。padding
(内边距):紧贴内容的补白区域。content
(内容):元素中的文本或后代元素都是它的内容。
🐇盒子内容区(content)
关于默认宽度:
- 所谓的默认宽度,就是不设置width属性时,元素所呈现出来的宽度。
总宽度 = 父的content - 自身左右margin
。内容区的宽度 = 父的content - 自身左右margin - 自身左右border - 自身左右padding
。
🐇盒子的内边距(padding)
🐇盒子边框(border)
🐇盒子外边距(margin)
⭐️margin注意事项
⭐️margin塌陷问题
-
塌陷举例:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>margin塌陷问题</title> <style> .outer{ width: 400px; height: 400px; background-color: gray; } .inner1{ width: 100px; height: 100px; background-color: orange; /* 给inner1加下外边框,没问题 */ /* margin-bottom: 50px; */ /* 给inner1加上外边框,外边框动了,两个小框反而没动 */ margin-top: 50px; } .inner2{ width: 100px; height: 100px; background-color: green; /* 给inner2加上外边框,没问题 */ /* margin-top: 50px; */ } </style> </head> <body> <div class="outer"> <div class="inner1">inner1</div> <div class="inner2">inner2</div> </div> </body> </html>
-
解决举例:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>margin塌陷问题</title> <style> .outer{ width: 400px; height: 400px; background-color: gray; border: 3px solid red; } .inner1{ width: 100px; height: 100px; background-color: orange; /* 给inner1加下外边框,没问题 */ /* margin-bottom: 50px; */ /* 给inner1加上外边框,外边框动了,两个小框反而没动 */ margin-top: 50px; } .inner2{ width: 100px; height: 100px; background-color: green; /* 给inner2加上外边框,没问题 */ /* margin-top: 50px; */ } </style> </head> <body> <div class="outer"> <div class="inner1">inner1</div> <div class="inner2">inner2</div> </div> </body> </html>
-
最理想的解决方案:
overflow:hidden
,不影响大小<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>margin塌陷问题</title> <style> .outer{ width: 400px; height: 400px; background-color: gray; overflow: hidden; } .inner1{ width: 100px; height: 100px; background-color: orange; /* 给inner1加下外边框,没问题 */ /* margin-bottom: 50px; */ /* 给inner1加上外边框,外边框动了,两个小框反而没动 */ margin-top: 50px; } .inner2{ width: 100px; height: 100px; background-color: green; /* 给inner2加上外边框,没问题 */ /* margin-top: 50px; */ } </style> </head> <body> <div class="outer"> <div class="inner1">inner1</div> <div class="inner2">inner2</div> </div> </body> </html>
⭐️margin合并问题
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>margin合并问题</title>
<style>
.outer{
width: 400px;
height: 400px;
background-color: gray;
overflow: hidden;
}
.inner1{
width: 100px;
height: 100px;
background-color: orange;
margin-bottom: 100px;
}
.inner2{
width: 100px;
height: 100px;
background-color: green;
margin-top: 100px;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner1">inner1</div>
<div class="inner2">inner2</div>
</div>
</body>
</html>
🐇处理内容溢出
🐇隐藏元素的方式
🐇样式的继承
🐇默认样式
🐇布局小技巧🔥
<!DOCTYPE html>
<html lang="zn-CN">
<head>
<meta charset="UTF-8">
<title>布局技巧</title>
<style>
.outer{
width: 400px;
height: 400px;
background-color: gray;
overflow: hidden;
}
.inner{
width: 200px;
height: 100px;
background-color: orange;
padding: 5px;
border: 5px solid red;
/* 让橙色盒子在水平方向上居中 */
margin: 0 auto;
/* 让橙色盒子垂直居中,别忘了父元素的overflow */
/* (400-(100+10+10))/2 */
margin-top: 140px;
/* 让文字水平居中 */
text-align: center;
/* 让文字垂直居中 */
line-height: 100px;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner">inner</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="zn-CN">
<head>
<meta charset="UTF-8">
<title>布局技巧_2</title>
<style>
.outer{
width: 400px;
height: 400px;
background-color: gray;
/* 行内元素按文字处理,让inner水平居中 */
text-align: center;
/* 让inner垂直居中 */
line-height: 400px;
}
.inner{
background-color: orange;
font-size: 20px;
}
</style>
</head>
<body>
<div class="outer">
<span class="inner">出来玩啊?</span>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="zn-CN">
<head>
<meta charset="UTF-8">
<title>布局技巧_3</title>
<style>
.outer{
width: 400px;
height: 400px;
background-color: gray;
/* 行内元素按文字处理,让inner和img水平居中 */
text-align: center;
/* 让inner和img垂直居中 */
line-height: 400px;
/* 图片绝对垂直居中 */
font-size: 0px;
}
.inner{
background-color: orange;
font-size: 20px;
/* 每个元素都要 */
vertical-align: middle;
}
img{
vertical-align: middle;
border: 5px solid red;
}
</style>
</head>
<body>
<div class="outer">
<span class="inner">x出来玩啊?</span>
<img src="maomao.png" alt="maomao">
</div>
</body>
</html>
🐇元素之间的空白问题
给上边猫猫例子的font-size为0去掉——空格就看到了
<!DOCTYPE html>
<html lang="zn-CN">
<head>
<meta charset="UTF-8">
<title>布局技巧_3</title>
<style>
.outer{
width: 400px;
height: 400px;
background-color: gray;
/* 行内元素按文字处理,让inner和img水平居中 */
text-align: center;
/* 让inner和img垂直居中 */
line-height: 400px;
/* 图片绝对垂直居中 */
/* font-size: 0px; */
}
.inner{
background-color: orange;
font-size: 20px;
/* 每个元素都要 */
vertical-align: middle;
}
img{
vertical-align: middle;
border: 5px solid red;
}
</style>
</head>
<body>
<div class="outer">
<span class="inner">x出来玩啊?</span>
<img src="maomao.png" alt="maomao">
</div>
</body>
</html>
🐇行内块的幽灵空白问题
行内块元素与文本的基线对齐,而文本的基线与文本最底端之间是有一定距离的。如下所示:
<!DOCTYPE html>
<html lang="zn-CN">
<head>
<meta charset="UTF-8">
<title>行内块幽灵空白问题</title>
<style>
div{
width: 600px;
/* 没给高 */
background-color: pink;
}
</style>
</head>
<body>
<div>
<img src="maomao.png" alt="maomao">xg
</div>
</body>
</html>
以方案一解决
<!DOCTYPE html>
<html lang="zn-CN">
<head>
<meta charset="UTF-8">
<title>行内块幽灵空白问题</title>
<style>
div{
width: 600px;
background-color: pink;
}
img{
border: 2px solid red;
vertical-align: bottom;
}
</style>
</head>
<body>
<div>
<img src="maomao.png" alt="maomao">xg
</div>
</body>
</html>