1.选择器
1.1 结构伪类选择器

代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>结构伪类选择器</title>
    <style>
        /* 第一个 */
        /* li:first-child {
            background-color: green;
        } */
        /* 最后一个 */
        /* li:last-child {
            background-color: orange;
        } */
        /* 写数字几就选第几个 */
        li:nth-child(3) {
            background-color: green;
        }
    </style>
</head>
<body>
    <ul>
        <li>li 1</li>
        <li>li 2</li>
        <li>li 3</li>
        <li>li 4</li>
        <li>li 5</li>
        <li>li 6</li>
        <li>li 7</li>
        <li>li 8</li>
    </ul>
</body>
</html> 
效果:

1.2 结构伪类选择器公式

通过公式可以快速找到多个元素
代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>结构伪类选择器</title>
    <style>
        /* 写数字几就选第几个 */
        /* 偶数 */
        /* li:nth-child(2n) {
            background-color: green;
        } */
        /* 奇数 */
        /* li:nth-child(2n+1) {
            background-color: green;
        } */
        /* 5的倍数 */
        /* li:nth-child(5n) {
            background-color: green;
        } */
        /* n是从0开始计算,即寻找5及以后的数 */
        /* li:nth-child(n+5) {
            background-color: green;
        } */
        /* 找第5个及以前 */
        li:nth-child(-n+5) {
            background-color: green;
        }
    </style>
</head>
<body>
    <ul>
        <li>li 1</li>
        <li>li 2</li>
        <li>li 3</li>
        <li>li 4</li>
        <li>li 5</li>
        <li>li 6</li>
        <li>li 7</li>
        <li>li 8</li>
    </ul>
</body>
</html> 
效果:查找-n+5

1.3 伪元素选择器

用来生成假标签
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>伪元素选择器</title>
    <style>
        div {
            height: 300px;
            width: 300px;
            background-color: pink;
        }
        /* 必须设置content属性,没有content,伪元素选择器不生效 */
        div::before {
            content: "老鼠";
        }
        div::after {
            content: "大米";
        }
    </style>
</head>
<body>
    <!-- 标签内容:老鼠爱大米 -->
    <div>爱</div>
</body>
</html> 
比如我们只有一个div标签,内容是爱,但是想生成老鼠爱大米,就可以在div前后加假标签来显示
加完之后就正确显示:

假标签是生效的

2.PxCook软件
用来查找设计图中各元素距离等
3.盒子模型
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 {
            width: 200px;
            height: 200px;
            background-color: pink;
            /* 内边距:内容和盒子边缘 */
            padding: 20px;
            /* 边框线 */
            border: 1px solid #000;
            /* 外边距:出现在盒子外面,拉开两个盒子之间的距离 */
            margin: 50px;
        }
    </style>
</head>
<body>
    <div>div标签</div>
</body>
</html> 
效果:
初始:

修改后:


3.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 {
            width: 200px;
            height: 200px;
            background-color: pink;
            /* 实线 */
            /* border: 1px solid #000; */
            /* 虚线 */
            /* border: 2px dashed red; */
            /* 点线 */
            border: 3px dotted green;
        }
    </style>
</head>
<body>
    <div>div标签</div>
</body>
</html> 
效果:

3.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>
        div {
            width: 200px;
            height: 200px;
            background-color: pink;
            border-top: 1px solid #000;
            border-right: 2px dashed red;
            border-bottom: 5px dotted green;
            border-left: 10px solid orange;
        }
    </style>
</head>
<body>
    <div>div标签</div>
</body>
</html> 
效果:

四个方向都可以单独设置边框线
3.4 内边距

内边距也可以单独设置四个方向的距离
代码:
<!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 {
            width: 200px;
            height: 200px;
            background-color: pink;
            /* padding: 20px; */
            
            /* 与上边缘的距离 */
            padding-top: 10px;
            /* 与右边缘的距离 */
            padding-right: 20px;
            /* 与下边缘的距离 */
            padding-bottom: 40px;
            /* 与左边缘的距离 */
            padding-left: 100px;
        }
    </style>
</head>
<body>
    <div>div标签</div>
</body>
</html> 
效果:


3.5 内边距多值写法

代码:
<!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 {
            width: 200px;
            height: 200px;
            background-color: pink;
            /* 四值;   上 右 下 左  */
            /* padding: 10px 20px 80px 100px; */
            /* 三值: 上  左右  下 */
            /* padding: 10px 40px 80px; */
            /* 两值: 上下  左右 */
            padding: 10px 80px;
            /* 从上开始顺时针转一圈,如果当前方向没有数值,取值和对面一样 */
        }
    </style>
</head>
<body>
    <div>div标签</div>
</body>
</html> 
规律:从上开始顺时针转一圈,如果当前方向没有数值,取值和对面一样
 3.6 盒子模型尺寸计算
 
代码:
<!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 {
            width: 200px;
            height: 200px;
            /* 手动减法实现盒子 200x200 */
            /* width: 160px;
            height: 160px; */
            background-color: pink;
            padding: 20px;
            /* 内减模式:不需要手动减法,加padding和border不会撑大盒子 */
            box-sizing: border-box;
        }
    </style>
</head>
<body>
    <div>div标签</div>
</body>
</html> 
我们想要让div这个盒子大小不变,加了padding等属性之后可以用手动减法去设置原来的w和h大小,或者使用内减模式


3.7 盒子模型外边距及版心居中

添加外间距后,盒子大小不变


像京东界面,让版心内容居中
代码:
<!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 {
            /* 版心居中要求:盒子必须要有宽度 */
            width: 1000px;
            height: 200px;
            background-color: pink;
            /* 外间距不会撑大盒子 */
            /* margin: 50px; */
            /* margin-left: 50px; */
            /* margin的多值写法和padding是一样的 */
            /* margin: 50px 100px; */
            /* 版心居中 */
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div>版心内容</div>
</body>
</html> 
版心居中必须要有width值,因为浏览器auto计算的逻辑是用整个的宽减去width再除以2得出左右外间距
/* 版心居中 */
margin: 0 auto; 
效果:

3.8 清除标签默认样式

清除标签默认样式,方便之后按照设计稿修改,我们使用京东模式
代码:
<!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;
            
            /* 使用内减,方便之后修改不会撑大盒子 */
            box-sizing: border-box;
        } 
        /* 去掉列表的项目符号 */
        li {
            list-style: none;
        }
    </style>
</head>
<body>
    <h1>h1标题</h1>
    <p>p</p>
    <ul>
        <li>
            li
        </li>
    </ul>
</body>
</html> 
 
 
 
修改前:

清除后

但是li的小圆点只是挪到浏览器外面了,没有被清除
添加这行代码即可:
/* 去掉列表的项目符号 */
li {
    list-style: none;
} 
 
 
3.9 盒子模型-元素溢出


内容已经超出了盒子范围
hidden:

超出的部分会被隐藏
scroll:


无论内容多少,scroll都有滚动条
auto:
多的时候有滚动条,少的时候没有

3.10 外边距合并现象

代码:
<!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>
        .one {
            width: 100px;
            height: 100px;
            background-color: pink;
            margin-bottom: 80px;
        }
        .two {
            width: 100px;
            height: 100px;
            background-color: orange;
            margin-top: 50px;
        }
    </style>
</head>
<body>
    <div class="one">one</div>
    <div class="two">two</div>
</body>
</html> 
 
 

发现较小的margin会被大的合并,这里是下面的two的margin top被上面的one的margin bottom合并了
3.11 外边距塌陷问题

添加前:

添加后:

发现添加之后父级这个盒子也下去了
代码:
<!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 {
            width: 300px;
            height: 300px;
            background-color: pink;
            padding-top: 50px;
            box-sizing: border-box; 
            /* 内容溢出就会隐藏 */
            /* overflow: hidden; */
            /* border-top: 1px solid #000; */
        }
        .son {
            width: 100px;
            height: 100px;
            background-color: orange;
             /* margin-top: 50px;  */
        }
    </style>
</head>
<body>
    <div class="father">
        <div class="son">son</div>
    </div>
</body>
</html> 
 

取消子级margin,只设置父级padding(推荐使用)

父级设置hidden和border top都可以产生一样的效果
3.12 行内元素内外间距问题


添加margin和padding都不能改变行内元素垂直位置

添加行高即可
代码:
<!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>
        span {
            margin: 50px;
            padding: 20px;
            line-height: 100px;
        }
    </style>
</head>
<body>
    <span>span标签</span>
    <span>span标签</span>
</body>
</html> 
 
3.13 盒子模型-圆角

代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=            , initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            margin: 50px auto;
            width: 200px;
            height: 200px;
            background-color: orange;
            /* border-radius: 20px; */
            /* 圆角写多值,从左上角顺时针赋值,没有取值的角与对角取值相同 */
            /*   左上  右上   右下    左下 */
            /* border-radius: 10px 20px 40px 80px;  */
            /*  左上  右上+左下  右下*/
            /* border-radius: 10px 40px 80px; */
            /* 左上+右下  右上+左下 */
            border-radius: 10px 80px;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html> 
 

圆角效果

四值写法

三值写法
3.14 圆角的应用

代码:
<!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>
        img {
            /* 盒子本身要是正方形才能做圆形 */
            width: 200px;
            height: 200px;
            /* border-radius: 100px; */
            /* 做成正圆形,50%是最大值,超过50%也跟50%一样 */
            border-radius: 50%;
        }
        div {
            /* 盒子本身是长方形才能做胶囊 */
            width: 200px;
            height: 80px;
            background-color: orange;
            /* 高度的一半 */
            border-radius: 40px;
        }
    </style>
</head>
<body>
    <!-- 正圆形--头像 -->
    <img src="../day04/image/3.jpg" alt="">
    <!-- 胶囊状--按钮 -->
    <div></div>
</body>
</html> 
效果:

3.15 盒子模型-阴影
给边框添加阴影更有层次感

代码:
<!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 {
            margin: 50px auto;
            width: 200px;
            height: 80px;
            background-color: orange;
            /* x轴偏移量  y轴偏移量  模糊半径  扩散半径  颜色  内外阴影(inset表示内阴影) */
            box-shadow: 2px 5px 10px 1px rgba(0, 0, 0, 0.5) inset;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html> 
效果:

这是加了内阴影inset的
案例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>
        * {
            /* 整体去除默认样式 */
            margin: 0;
            padding: 0;
            /* 使用内减,方便之后修改不会撑大盒子 */
            box-sizing: border-box;
        }
        body {
            /* 设置网页背景色 */
            background-color: #f1f1f1;
        }
        .product {
            margin: 50px auto;
            /* 图片上边缘和盒子的距离 */
            padding-top: 40px;
            width: 270px;
            height: 253px;
            background-color: #fff;
            /* 行内内容居中 */
            text-align: center;
            /* 设置圆角 */
            border-radius: 10px;
        }
        .product h4 {
            /* 与上面的盒子的距离 */
            margin-top: 20px;
            /* 与下面的盒子的距离 */
            margin-bottom: 12px;
            font-size: 18px;
            color: #333;
            /* 去粗 */
            font-weight: 400;
        }
        .product p {
            font-size: 12px;
            color: #555;
        }
        img {
            /* 把图片设置为圆形 */
            width: 70px;
            height: 70px;
            border-radius: 50%;
        }
    </style>
</head>
<body>
    <div class="product"> 
        <img src="../day04/image/3.jpg" alt="">
        <h4>优选产品</h4>
        <p>包含最好的产品</p>
    </div>
</body>
</html> 
效果:

案例2:新闻


整体新闻区域:w360+h200,且要版心居中

新闻标题区:w360+h34,去掉左边边框线

单新闻标题:w48+h34

新闻上面的描边:w48+h3
右边框线和父级一样

正文区域:内边距5px

两张图片,一个设置给li的背景,一个设置给a的背景

a标签里面文字的距离20px
代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>新闻</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        li {
            list-style: none;
        }
        a {
            text-decoration: none;
        }
        /* 整体新闻区域 */
        .news {
            margin: 100px auto;
            width: 360px;
            height: 200px;
            /* background-color: orange; */
        }
        /* 新闻标题区 */
        .news .hd {
            height: 34px;
            background-color: #eee;
            border: 1px solid #dbdee1;
            border-left: 0;
        }
        /* 单新闻标题 */
        .news .hd a {
            /* -1,盒子向上移动 */
            /* 超链接行内元素转块元素 */
            margin-top: -1px;
            display: block;
            /* 上边框线 */
            border-top: 3px solid #ff8400;
            /* 右边框线 */
            border-right: 1px solid #dbdee1;
            width: 48px;
            height: 34px;
            background-color: #fff;
            /* 文字居中 */
            text-align: center;
            line-height: 32px;
            font-size: 14px;
            color: #333;
        }
        /* 正文区域 */
        .news .bd {
            padding: 5px;
        }
        /* li负责的背景图 */
        .news .bd  li {  
            /* 装饰图片 */
            padding-left: 15px;
            background-image: url(./image/2.png);
            background-repeat: no-repeat;
            /* 图片最左边居中 */
            background-position: 0 center;
        }
        /* a负责的背景图 */
        .news .bd  li a {
            padding-left: 20px;
            /* 图片最左边居中 */
            background: url(./image/1.png) no-repeat 0 center;
            font-size: 12px;
            color: #666;
            line-height: 24px;
        }
        .news .bd  li a:hover {
            /* 鼠标悬停 */
            color:#ff8400;
        }
    </style>
</head>
<body>
    <!-- 新闻区域:标题+内容 -->
    <div class="news">
        <div class="hd"><a href="#">新闻</a></div>
        <div class="bd">
            <ul>
                <li><a href="#">点赞新农人温暖的伸手</a></li>
                <li><a href="#">在希望的田野上</a></li>
                <li><a href="#">中国天眼又有新发现 已在《自然》杂志发表</a></li>
                <li><a href="#">急!这个领域,缺人!月薪4万元还不好招!啥情况?</a></li>
                <li><a href="#">G9“带货”背后:亏损面持续扩大,竞争环境激烈</a></li>
                <li><a href="#">多地力推二手房“带押过户”,有什么好处?</a></li>
            </ul>
        </div>
    </div>
</body>
</html> 
效果:


















