一、盒子模型
1.盒子的组成
content(内容) height(高度) width(宽度) padding(内边距) margin(外边距) border(边框)
下面是创建一个简单盒子的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
background-color: antiquewhite;
height: 200px;
width: 200px;
border: 1px solid #000;
padding: 10px;
margin: 10px;
}
</style>
</head>
<body>
<div>你好蓝旭!</div>
</body>
</html>
效果如下:
1.1盒子类别
页面上 区域、图片、导航、列表、段落等都可以是盒子。
1.2盒子的宽和高
一个盒子的实际宽度和高度:content+padding+border (margin不会撑大盒子)
2.外边距margin
2.1表示方法
margin的表示方法:
1. margin: 1px; 该盒子的上下左右外边距均为1px
2.margin: 1px 2px 1px 3px; 分别对应盒子的上、右、下、左外边距
3.margin: 1px 2px; 盒子的上下外边距为1px 左右外边距为2px
4.margin: 1px 2px 3px; 盒子的上外边距为1px 下外边距为3px 左右外边距为2px
2.2 margin的合并
垂直方向合并,水平方向不合并 (哪一个盒子的外边距更高 则优先显示)
2.3区域的水平居中
margin: 0 auto;
3.清除默认样式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<h1>你好卓音!</h1>
</body>
</html>
4.外边距问题——塌陷问题
场景:父子级的标签,子级的添加上外边距,会产生塌陷问题。
**现象:**导致父级一起向下移动
解决方法:
1.取消子级margin,父级设置padding(需要注意的是:设置padding会撑大盒子,所以要设置box-sizing:border-box;
)
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.father{
background-color: orange;
width: 200px;
height: 200px;
padding: 20px;
}
.son{
background-color: pink;
width: 100px;
height: 50px;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
效果如下:
2.父级设置overflow:hidden;
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.father{
background-color: orange;
width: 200px;
height: 200px;
overflow: hidden;
}
.son{
background-color: pink;
width: 100px;
height: 50px;
margin: 20px;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
3.父级设置border-top
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.father{
background-color: orange;
width: 200px;
height: 200px;
border-top: 1px solid #000;
}
.son{
background-color: pink;
width: 100px;
height: 50px;
margin: 20px;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
5.行内元素——内外边距问题
场景:行内元素添加 margin
和padding
,无法改变元素的垂直位置
**解决方法:**给行内元素添加line-height
可以改变垂直位置
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
background-color: pink;
width: 200px;
height: 200px;
}
span{
margin: 50px;
line-height: 200px;
}
</style>
</head>
<body>
<div>
<span>你好蓝旭!</span>
</div>
</body>
</html>
效果如下:
6.overflow
属性
当盒子内容溢出盒子框时,可用overflow属性取值
1.hidden
:超出部分不可见
效果如图:
2.scroll
:显示滚动条(无论是否溢出,都显示滚动条)
效果如图:
3.auto
:如果有超出部分,显示滚动条
7.圆角和阴影
7.1圆角
**作用:**设置元素的外边框为圆角
属性名:border-radius
**属性值:**数字+px / 百分比 (半径)
7.2圆角的表示方法
对角取值相同
border-radius的表示方法:
1.border-radius: 1px;四个角的半径均为1px
2.border-radius: 1px 2px 1px 3px; 分别对应左上圆角半径为1px 右上为2px 右下为1px 左下为3px
3.border-radius: 1px 2px; 左上和右下圆角半径为1px 右上和左下圆角半径为2px
4.border-radius: 1px 2px 3px; 左上圆角半径为1px 右下半径为3px 右上和左下半径为2px
7.3圆角常见应用
1.**正圆形状:**给正方形盒子设置圆角属性值为宽高的一半
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
background-color: orange;
width: 200px;
height: 200px;
border-radius: 100px;
}
</style>
</head>
<body>
<div>
</div>
</body>
</html>
效果如下:
2.**胶囊形状:**给长方形盒子设置圆角属性值为盒子高度的一半
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
background-color: pink;
width: 300px;
height: 200px;
border-radius: 100px;
}
</style>
</head>
<body>
<div>
</div>
</body>
</html>
效果如下:
7.4阴影
**作用:**给元素设置阴影效果
属性名:box-shadow
属性值:x轴偏移量 y轴偏移量 模糊半径 扩散半径 颜色 内外阴影 (前两个是必须要书写的)
内外阴影默认是外阴影,内阴影需要添加inset
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
color: black;
background-color: pink;
width: 300px;
height: 200px;
box-shadow: 2px 2px 5px 2px rgba(0, 0, 0, 0.5);
}
</style>
</head>
<body>
<div>
你好蓝旭!
</div>
</body>
</html>
效果如下:
二、Flex布局(弹性布局)
1.Flex布局介绍和组成
1.1Flex布局介绍
flex布局又称弹性布局,提供了更强的空间分布和对齐能力,flex模型不会产生浮动布局中的脱标现象,布局网页更简单、更灵活。
1.2flex-组成
1.设置方式:给父元素设置 display:flex
,子元素可以自动挤压或拉伸
2.组成部分:弹性容器、弹性盒子、主轴:默认水平方向、侧轴:默认在垂直方向。
2.flex布局
描述 | 属性 |
---|---|
创建flex容器 | display:flex |
主轴对齐方式 | justify-content |
侧轴对齐方式 | align-items |
某个弹性盒子侧轴对齐方式 | align-self |
修改主轴方向 | flex-direction |
弹性伸缩比 | flex |
弹性盒子换行 | flex-wrap |
行对齐方式 | align-content |
3.主轴对齐方式
属性名:justify-content
属性值 | 效果 |
---|---|
flex-start | 默认值,弹性盒子从起点开始依次排列 |
flex-end | 弹性盒子从终点开始依次排列 |
center | 沿主轴居中排列 |
space-between | 沿主轴均匀排列,空白间距均分在弹性盒子之间 |
space-around | 沿主轴均匀排列,空白间距均分在弹性盒子两侧 |
space-evenly | 沿主轴均匀排列,弹性盒子与容器之间间距相等 |
4.侧轴对齐方式
属性名:
1.align-items
:当前弹性容器内所有弹性盒子的侧对齐方式(给弹性容器设置)
2.align-self
:单独控制某个弹性盒子的侧轴对齐方式(给弹性盒子设置)
属性值 | 效果 |
---|---|
stretch | 弹性盒子沿着侧轴线被拉伸至铺满容器(弹性盒子没有设置侧轴方向尺寸则默认拉伸) |
center | 弹性盒子沿侧轴线居中排列 |
flex-start | 弹性盒子从起点开始依次排列 |
flex-end | 弹性盒子从终点开始依次排列 |
5.修改主轴方向
主轴默认在水平方向,侧轴默认在垂直方向
属性名:flex-direction
属性值:column
(垂直方向,从上向下)
6.弹性伸缩比
作用:控制弹性盒子的主轴方向的尺寸
属性名:flex
属性值:整数数字 (表示占用父级剩余尺寸的份数)
默认情况下,主轴方向尺寸是靠内容撑开,侧轴默认拉伸
7.弹性盒子换行与行对齐方式
7.1弹性盒子换行
弹性盒子可以自动挤压或拉伸,默认情况下,所有弹性盒子都在一行显示
属性名:flex-wrap
属性值 | 效果 |
---|---|
wrap | 换行 |
nowrap | 不换行(默认效果) |
7.2行对齐方式
属性名:align-content
属性值 | 效果 |
---|---|
flex-start | 默认值,弹性盒子从起点开始排列 |
flex-end | 弹性盒子从终点开始排列 |
center | 弹性盒子沿主轴居中排列 |
space-between | 弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子之间 |
space-around | 弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子两侧 |
space-evenly | 弹性盒子沿主轴均匀排列,弹性盒子与容器之间间距相等 |
三、定位
1.关于定位
作用:灵活地改变盒子在网页中的位置
实现: 定位模式:position
边偏移:设置盒子的位置 left right top bottom
2.相对定位
position:relative
top left right bottom 设置偏移量
特点:
1.改变位置的参照物是自己原来的位置
2.不脱标,占位
3.标签显示模式特点不变
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.tupian {
position: relative;
left:100px;
top:70px;
background-color: orange;
width: 200px;
height: 200px;
}
</style>
</head>
<body>
<div>
<p>你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端</p>
<p>你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端</p>
<div class="tupian"></div>
<p>你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端</p>
<p>你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端</p>
</div>
</body>
</html>
效果如下:
3.绝对定位
position:absolute
top left right bottom 设置偏移量
使用场景:子级绝对定位,父级相对定位 (子绝父相)
特点:
1.脱标,不占位
2.参照物:先找最近的已经定位的祖先元素,如果所有祖先元素都没有定位,参照浏览器可视区改位置
3.显示模式特点改变,宽高生效(具备了行内块的特点)
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.tupian {
position: absolute;
left:100px;
top:70px;
background-color: orange;
width: 200px;
height: 200px;
}
</style>
</head>
<body>
<div>
<p>你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端</p>
<p>你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端</p>
<div class="tupian"></div>
<p>你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端</p>
<p>你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端你好前端</p>
</div>
</body>
</html>
效果如下:
4.定位居中
实现步骤:
1.绝对定位
2.水平、垂直边偏移为50%
3.子级向左、上移动为自身尺寸的一半:
a. 左、上的外边距为尺寸的一半(负值)
b. transform:translate(-50%,-50%)
第一种方法代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.tupian {
position: absolute;
top:50%;
left: 50%;
margin-top: -100px;
margin-left: -100px;
background-color: orange;
width: 200px;
height: 200px;
}
</style>
</head>
<body>
<div class="tupian">
你好前端
</div>
</body>
</html>
第二种方法代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.tupian {
position: absolute;
top:50%;
left: 50%;
transform: translate(-50%,-50%);
background-color: orange;
width: 200px;
height: 200px;
}
</style>
</head>
<body>
<div class="tupian">
你好前端
</div>
</body>
</html>
两种方法效果如下:
5.固定定位
position:fixed
场景:元素的位置在网页滚动时不会改变
特点:
1.脱标,不占位
2.参照物:浏览器窗口
3.显示模式特点:具备行内块特点
6.堆叠层级
z-index
: 取值是整数,取值越大,显示顺序越靠上
默认效果:按照标签书写顺序,后来者居上
作用:设置定位元素的层级顺序,改变定位元素的显示顺序
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.first {
position: absolute;
z-index: 2;
background-color: orange;
width: 200px;
height: 200px;
}
.second{
position: absolute;
top:100px;
left: 100px;
z-index: 1;
background-color: blue;
width: 200px;
height: 200px;
}
</style>
</head>
<body>
<div class="whole">
<div class="first">
你好前端
</div>
<div class="second">你好前端</div>
</div>
</body>
</html>
效果如下:
7.字体图标
7.1介绍
字体图标:展示的是图标,本质是字体
作用:在网页中添加简单的、颜色单一的小图标
7.2使用字体
1.引入字体样式表 (iconfont.css)
2.标签使用字体图标类名
a. iconfont:字体图标基本样式
b. icon-xxx:图标对应类名