HTML5前端第五章节

发布于:2025-03-29 ⋅ 阅读:(27) ⋅ 点赞:(0)

一.选择器

1.结构伪类选择器

作用:

根据元素的结构关系查找元素

使用方式:

(1).类名:first-child(查找第一个元素)

(2).类名:last-child(查找最后一个元素)

(3).类名:nth-child(N)(查找第N个元素)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  /* 查找第一个元素 */
  div:first-child {
    background-color: aqua;
  }

  /* 查找最后一个元素 */
  div:last-child {
    background-color: bisque;
  }

  /* 查找第3个元素 */
  div:nth-child(3) {
    background-color: blueviolet;
  }
</style>
</head>
<body>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
</body>
</html>
注意:

我们还可以利用类名:nth-child(N)的公式根据元素的结构关系查找多个元素

①:查找偶数标签(2n)
​
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  /* 偶数标签 */
  div:nth-child(2n) {
    background-color: blueviolet;
  }
</style>
</head>
<body>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
</body>
</html>

​
②:查找奇数标签(2n-1或2n+1)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  /* 奇数标签(2n + 1和2n - 1没区别) */
  div:nth-child(2n + 1) {
    background-color: blueviolet;
  }
</style>
</head>
<body>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
</body>
</html>
③:查找3的倍数的标签(3n)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  /* 3的倍数的标签 */
  div:nth-child(3n) {
    background-color: blueviolet;
  }
</style>
</head>
<body>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
</body>
</html>
④:查找第3个以后的标签(n+3)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  /* 第3个以后的标签(包括3) */
  div:nth-child(n + 3) {
    background-color: blueviolet;
  }
</style>
</head>
<body>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
</body>
</html>
⑤:查找第三个之前的标签(-n+3)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  /* 第3个之前的标签(包括3) */
  div:nth-child(-n + 3) {
    background-color: blueviolet;
  }
</style>
</head>
<body>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
  <div>div标签</div>
</body>
</html>

2.伪元素选择器

作用:

创建虚拟元素(伪元素),用来摆放装饰性的内容

使用方式:

(1).类名::before(在标签里最前面添加一个伪元素)
(2).类名::after(在标签里面最后面添加一个伪元素)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  /* 伪元素选择器 */
  div {
    width: 300px;
    height: 300px;
    background-color: blueviolet;
  }

  /* 在伪元素选择器中必须添加content元素 */
  div::before {
    content: "伪元素选择器";

    width: 100px;
    height: 100px;
    background-color: red;

    display: block;
  }

  div::after {
    content: "器择选素元伪";

    width: 100px;
    height: 100px;
    background-color: orange;

    display: block;
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>
注意:

(1).必须设置content:""属性用来设置伪元素的内容,如果没有内容,则在引号内留空

(2).伪元素的显示模式默认是行内

(3).伪元素选择器的权重和标签选择器相同

二.PxCook(像素大厨)

PxCook是一款切面设计工具软件,支持PSD文件的文字,颜色,距离的自动智能识别

1.开发面板(自动智能识别)
2.设计面板(手动测量尺寸和颜色)

三.盒子模型

1.作用:

布局网页,摆放盒子和内容

2.盒子模型的组成部分:

(1).内容区域(width,height)

(2).内边距padding(存在于内容和盒子边缘之间)

注意:

内边距会把盒子撑大(四个方向都会增加与我们设置的内边距相同的大小),读者最好自己试试内边距撑大盒子的效果

作用:

设置内容与盒子边缘之间的距离

属性名:

padding(四个方向设置的样式相同)或padding-方位名词(但方向设置)

内边距简单案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  div {
    width: 300px;
    height: 300px;
    background-color: orange;

    /* 设置四个方向的内边距都为50像素 */
    padding: 50px;

    /* 上方的内边距 */
    padding-top: 10px;
    /* 底部的内边距 */
    padding-bottom: 20px;
    /* 左边的内边距 */
    padding-left: 30px;
    /* 右边的内边距 */
    padding: 40px;

    /* 注意padding和padding-方位名词是不能连用的哦 */
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>
padding中还有一种多值写法

①:如果只写一个值,表示四个方向设置的内容都相同

②:如果写两个值则表示上下为第一个值,左右为第二个值

③:如果写三个值则是上为第一个值,左右为第二个值,下为第三个值

④:四个值对应的顺序就是上,右,下,左

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  div {
    width: 300px;
    height: 300px;
    background-color: orange;

    /* 四个方向的内边距都相同 */
    padding: 10px;

    /* 上下,左右 */
    padding: 10px 20px;

    /* 上,左右,下 */
    padding: 10px 20px 30px;

    /* 上,右,下,左 */
    padding: 10px 20px 30px 40px;
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>

(3).边框线(border)

属性名:

border(简写为bd)

属性值:

边框线粗细,线条样式(常用的线条样式有:solid(实线),dashed(虚线),dotted(点线)),颜色(不区分顺序)

三种线条样式简单案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  div {
    width: 300px;
    height: 300px;
    background-color: orange;

    /* 实线 */
    border: 1px solid #000;
    /* 虚线 */
    border: 2px dashed #000;
    /* 点线 */
    border: 3px dotted #000;
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>
我们还可以在单方向设置边框线:
属性名:

border-方位名词(缩写为bd+方位名词首字母(lrtb))

属性值:

边框线粗细,线条样式,颜色(同样不区分顺序)

单方向边框线简单案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  div {
    width: 300px;
    height: 300px;
    background-color: orange;

    /* 上边框线 */
    border-top: 1px solid #000;
    /* 下边框线 */
    border-bottom: 2px dashed  red;
    /* 左边框线 */
    border-left: 3px dotted green;
    /* 右边框线 */
    border-right: 4px solid blue;
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>

(4).外边距margin(存在于盒子外侧)

作用:

拉开两个盒子之间的距离

属性名:

margin

属性值:

和内边距padding的用法相同,读者有兴趣的话,在margin的属性值中最为特别的就是有一个auto属性,能够使得外边距自动适应两侧的长度,实现居中的效果

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  div {
    width: 300px;
    height: 300px;
    background-color: blueviolet;

    /* 左右方向都自动计算,表现形式为盒子居中 */
    margin: auto;
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>
注意:

①:外边距是不会撑大盒子的

②:要利用auto属性实现居中的效果的话,盒子必须要有宽度(如果没有宽度的话就会直接占满一行,也就无所谓居中了)

在外边距中还有两种经常遇见的问题:
①:合并现象

合并现象的具体表现:垂直排列的兄弟元素的上下margin会合并(取两个margin中的较大值生效)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  /* 如果两个外边距都起作用的话应该是50+100=150px的距离,但是实际在页面上显示的效果
  却是两者之中较大的那一个,这就是外边距中的合并现象 */
  .test_one {
    width: 300px;
    height: 300px;
    background-color: red;
    margin-bottom: 50px;
  }

  .test_two {    
    width: 300px;
    height: 300px;
    background-color: blueviolet;
    margin-top: 100px;
  }

</style>
</head>
<body>
  <div class="test_one">div标签</div>
  <div class="test_two">div标签</div>
</body>
</html>

②:塌陷问题

在父子级的标签中,子级如果添加了上边距就会产生塌陷问题(导致父级一起向下移动)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  /* 塌陷问题,子级的上边距导致父级一起塌陷 */
  .test_one {
    width: 900px;
    height: 900px;
    background-color: red;
  }

  .test_two {    
    width: 300px;
    height: 300px;
    background-color: blueviolet;

    margin-top: 300px;
  }

</style>
</head>
<body>
  <div class="test_one">
    <!-- 如果在子级之前随便添加一些内容就不会导致父级塌陷 -->
    <div class="test_two">div标签</div>
  </div>
</body>
</html>
解决方法:

①:取消子级的margin,转而在父级中设置padding

②:父级设置overflow:hidden

③:父级设置border-top

(5).盒子模型的各个组成部分的简单案例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  div {
    width: 300px;
    height: 300px;
    background-color: orange;

    /* 内边距 */
    padding: 100px;
    /* 边框线 */
    border: 1px solid #000;
    /* 外边距 */
    margin: 100px;
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>

3.对盒子模型的尺寸进行计算

(1).默认情况:

盒子模型的尺寸 = 内容尺寸 + border尺寸 + 内边距尺寸

所以我们在给盒子加border和padding属性会撑大盒子(之前提到过)

对此的解决方式一共有两种:
①:手动做减法:

手动减掉border和padding撑大的盒子的尺寸

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  div {
    /* 手动方式 */
    /* 原有的width为300px,height为300px,但是加上了一个30px的padding,所以我们需要
    减去padding撑大的盒子的那一部分 */
    width: 240px;
    height: 240px;
    background-color: blueviolet;

    padding: 30px;
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>
②:使用编译软件提供的内减模式: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">
<style>
  div {
    /* 自减模式 */
    width: 300px;
    height: 300px;
    background-color: blueviolet;

    box-sizing: border-box;
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>

4.清除默认样式

作用:

清除我们不需要的,标签默认的样式

使用方式:

其实是有两种方式的,一种是直接使用*选中所有样式,另一种则是逐一列出有我们不需要的标签的样式,但是第二种方式实在太过麻烦,也不怎么实用,所以只看第一种方式即可

简单案例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  /* 读者可以自己看看清除默认样式与否的区别 */
  * {
    margin: 0;
    padding: 0;
    /* 使用内减模式防止盒子被撑大 */
    box-sizing: border-box;
  }

  /* 去除列表的项目符号 */
  li {
    list-style: none;
  }
</style>
</head>
<body>
  <div>div标签</div>
  <h1>h1标签</h1>
  <p>p标签</p>
  <ul>
    <li>li标签</li>
  </ul>
</body>
</html>

5.元素溢出

作用:

控制溢出元素的内容的显示方式

属性名:

overflow

属性值:

hidden(隐藏溢出),scroll(溢出滚动,无论是否溢出都显示出滚动条的位置),auto(溢出滚动,溢出时才显示滚动条的位置)

简单案例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  div {
    width: 300px;
    height: 300px;
    background-color: blueviolet;

    /* 建议读者首先不控制元素溢出,看看最后呈现出的效果如何 */
    /* 使用hidden,只要是超出了盒子大小的内容都会被直接清除 */
    overflow: hidden;

    /* 无论是否溢出都会显示滚动条 */
    overflow: scroll;

    /* 只有元素溢出时才显示滚动条 */
    overflow: auto;
  }
</style>
</head>
<body>
  <div>
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
    div标签div标签div标签div标签div标签div标签div标签div标签
  </div>
</body>
</html>

6.在行内元素中存在着内外边距的问题

具体表现为我们在行内元素中添加margin和padding时无法改变元素的垂直位置

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  /* 塌陷问题,子级的上边距导致父级一起塌陷 */
  .test_one {
    width: 900px;
    height: 900px;
    background-color: red;
  }

  .test_two {    
    width: 300px;
    height: 300px;
    background-color: blueviolet;

    margin-top: 300px;
  }

</style>
</head>
<body>
  <div class="test_one">
    <!-- 如果在子级之前随便添加一些内容就不会导致父级塌陷 -->
    <div class="test_two">div标签</div>
  </div>
</body>
</html>

解决方法为:给行内元素添加line-height就可以改变垂直位置

7.圆角属性

作用:

设置元素的外边框为圆角

属性名:

border-radius

属性值:

可以为数字+px或百分比两种形式(属性值表示的是圆角半径)

圆角属性的简单应用:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  div {
    width: 300px;
    height: 300px;
    background-color: blueviolet;

    border-radius: 30px;
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>
在border-radius的属性值赋值中也是可以赋多值的,顺序为从左上开始顺时针旋转

即:

四值时:左上,右上,右下,左下

三值时:左上,右上左下,右下

两值时:左上右下,右上左下

我们常用的设置盒子模型的形状为:

①:正圆形

将正方形盒子(必须是正方形的盒子)设置圆角属性值为宽或高的一半(50%)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  div {
    width: 300px;
    height: 300px;
    background-color: blueviolet;

    /* 正圆形 */
    border-radius: 50%;
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>

②:胶囊形:

将长方形盒子设置圆角属性值为盒子高度的一半

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  div {
    width: 600px;
    height: 300px;
    background-color: blueviolet;

    /* 胶囊形 */
    border-radius: 150px;
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>

注意:设置属性值时不能超过50%,否则是不会生效的

8.添加阴影

作用:

给元素添加阴影效果

属性名:

box-shadow

属性值:

X轴偏移量 Y轴偏移量 模糊半径 扩散半径 颜色 内外阴影

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  div {
    width: 600px;
    height: 300px;
    background-color: blueviolet;

    /* X轴偏移量10px Y轴偏移量10px 模糊半径10px 扩散半径1px 颜色black 外阴影 */
    box-shadow: 10px 10px 10px 1px black;
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  div {
    width: 600px;
    height: 300px;
    background-color: blueviolet;

    /* X轴偏移量5px Y轴偏移量5px 模糊半径5px 扩散半径3px 颜色black 内阴影 */
    box-shadow: 5px 5px 5px 3px black inset;
  }
</style>
</head>
<body>
  <div>div标签</div>
</body>
</html>

注意:在属性值中两个偏移量是必须书写的参数,内外阴影这个参数则默认是外阴影,如果需要使用内阴影则需要添加inset