移动端开发

news2024/10/7 10:25:46

1. 视口

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, 
    minimum-scale=1.0, user-scalable=no">
    <title>Document</title>
    <!-- 
        meta视口标签:
            属性:
                (1) width:            宽度设置的是viewport宽度, 可以设置device-width特殊值; 
                (2) inital-scale:     初始缩放比, 大于0的数字; 
                (3) maximum-scale:    最大缩放比, 大于0的数字;
                (4) minimum-scale:    最小缩放比, 大于0的数字;
                (5) user-scalable:    用户是否可以缩放, yes|no(1|0); 
     -->
</head>
<body>
    <div>ljljsflksl </div>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 二倍图

2.1 init

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 
            我们需要在移动端显示一个50*50的图片, 直接放到iphone8里面会放大2倍变成100*100, 此时就会模糊;
            那么就需要我们事先准备一张本身就是100*100的图片, 然后手动将这个图片给缩放为 50*50;
            我们准备的图片比我们实际需要的大小 大2倍, 这种方式就是2倍图; 
        */
        img:nth-child(2) {
            width: 50px;
            height: 50px;
        }
    </style>
</head>
<body>
    <!-- 模糊的 -->
    <img src="../images/apple50.jpg" alt="">
    <!-- 2倍图 -->
    <img src="../images/apple100.jpg" alt="">
</body>
</html>

在这里插入图片描述
2.2 背景缩放

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- 
        background-size: 图片的宽度 图片的高度; 
     -->
    <style>
        div {
            width: 500px;
            height: 500px;
            border: 2px solid red;
            background: url(../images/dog.jpg) no-repeat;

            /* 0.background-size: 500px 200px; */

            /* 1.只写一个参数: 指定宽度,高度省略了,会等比例缩放 */
            /* background-size: 500px; */

            /* 2.里面的单位可以跟%:  相对于父盒子来说的; (以下语句表示图片宽度是父盒子的一半) */
            /* background-size: 50%; */

            /* 3.cover 等比例拉伸 要完全覆盖div盒子  可能有部分背景图片显示不全 */
            /* background-size: cover; */

            /* 4.contain 高度和宽度等比例拉伸; 当宽度 或者高度 铺满div盒子就不再进行拉伸了 可能有部分空白区域 */
            background-size: contain;
        }
    </style>
</head>

<body>
    <div></div>
    <p></p>
</body>

</html>

在这里插入图片描述

2.3 背景图片2倍图

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    
    <style>
        /* 1. 我们有一个 50 * 50的盒子需要一个背景图片,但是根据分析这个图片还是要事先准备成2倍, 100*100;  */
        /* 2. 然后把这个图片缩放一半,也就是 50*50; 可以利用 background-size属性; */
        
        div {
            width: 50px;
            height: 50px;
            border: 1px solid red;
            background: url(../images/apple100.jpg) no-repeat;
            background-size: 50px 50px;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

在这里插入图片描述

在这里插入图片描述

3. 移动端开发选择

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        1. 移动端开发选择:
            目前市场上常见的移动端开发有 单独制作移动端页面 和 响应式页面 两种方案;
            现在市场上主流的选择还是单独制作移动端页面; 
            通常情况下, 网上域名前面加m(mobile)可以打开移动端; 通过判断设备, 如果是移动设备打开, 则跳转到移动端页面;
     -->
     <!-- 
        2. 移动端技术解决方案:
            移动端浏览器基本以webkit内核为主, 因此我们就考虑webkit兼容性问题;
            我们可以放心使用H5标签和CSS3样式;
            同时我们浏览器的私有前缀只需要考虑添加webkit即可; 
      -->
    <!-- 
        3. CSS初始化 normalize.css 
            移动端初始化推荐使用 normalize.css; 
                保护了有价值的默认值;
                修复了浏览器的bug;
                是模块化的;
                拥有详细的官方文档; 
            官方网站:http://necolas.github.io/normalize.css/
    -->
    <!-- 
        4. 特殊样式:
            (1) 传统 or CSS3盒子模型?
                    a. 移动端可以完全使用CSS3盒子模型;
                    b. PC端如果完全要兼容, 我们就用传统模式, 如果不考虑兼容性, 我们就选择CSS3盒子模型;
            (2) 点击高亮需要手动清除(在移动端, 点击a时存在高亮背景) 
                    -webkit-tap-highlight-color: transparent; 
            (3) -webkit-appearance: none;
            (4) 禁用长按页面时的弹出菜单

     -->
     <style>
         a {
             -webkit-tap-highlight-color: transparent;
         }
         input {
             -webkit-appearance: none;
         }
         img, a {
             -webkit-touch-callout: none;
         }
     </style>
</head>
<body>
    <a href="#">好吧</a>
    <input type="button" value="按钮">
</body>
</html>

4. 移动端常见布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        移动端布局和以前我们所学的PC端布局有所区别:
            1. 单独制作移动端页面(主流)
                (1) 流式布局(百分比布局);
                (2) flex弹性布局(强烈推荐);
                (3) less+rem+媒体查询布局;
                (4) 混合布局; 
            2. 响应式页面兼容移动端(其次)
                (1) 媒体查询; 
                (2) bootstarp; 
     -->
</head>
<body>
    
</body>
</html>

5. 流式布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        流式布局:  
            1. 就是百分比布局, 也称之为非固定像素布局;
            2. 通过盒子的宽度设置成百分比来根据屏幕的宽度来进行伸缩, 不受固定像素的限制, 内容向两侧填充;
            3. 流式布局方式是移动web开发使用的比较常见的布局方式; 
     -->
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        section {
            width: 100%;
            max-width: 980px;
            min-width: 320px;
            margin: 0 auto;
        }
        section div {
            float: left;
            width: 50%;
            height: 400px;
        }
        section div:nth-child(1) {
            background-color: red;
        }
        section div:nth-child(2) {
            background-color: green;
        }
    </style>
</head>
<body>
    <section>
        <div></div>
        <div></div>
    </section>
</body>
</html>

在这里插入图片描述

京东移动端案例
https://gitee.com/xingweicoding/studys

在这里插入图片描述

6. flex布局

6.1 init

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        传统布局 和 flex弹性布局:
            1. 传统布局:  
                (1) 兼容性好; 
                (2) 布局繁琐; 
                (3) 局限性, 不能在移动端很好的布局; 
            2. flex弹性布局:
                (1) 操作方便, 布局极为简单, 移动端应用很广泛; 
                (2) PC端浏览器支持情况较差; 
                (3) IE11或更低版本, 不支持或仅部分支持; 
            3. 建议:
                (1) 如果是PC端页面布局, 我们还是选择传统布局; 
                (2) 如果是移动端或者不考虑兼容性问题的PC端页面布局, 我们还是建议使用flex弹性布局; 
     -->
    <style>
        div {
            display: flex;      
            width: 80%;
            height: 300px;
            background-color: pink;
            justify-content: space-around;
        }

        /* 因为父级添加了flex布局, 所以尽管子元素是行内元素, 它也可以直接设置宽高;  */
        div span {
            /* width: 150px; */
            height: 100px;
            background-color: purple;
            margin-right: 5px;
            flex: 1;
        }
    </style>
</head>

<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
    </div>
</body>

</html>

在这里插入图片描述

6.2 flex布局原理

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        1. flex: flexible Box, 意为“弹性布局”, 用来为盒状模型提供最大的灵活性, 任何一个容器都可以指定为flex布局;
            (1)当为父盒子指定为flex布局后, 子元素的float,clear,vertical-align属性将失效;
            (2)伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 = flex布局;
        
        2. 采用flex布局的元素, 我们称之为flex容器, 简称容器; 
           它的所有子元素自动成为容器成员, 简称flex项目, 简称项目; 

        3. 总结flex布局原理:
            就是通过给父盒子添加flex属性, 来控制盒子的位置和排列方式; 
     -->
</head>
<body>
    
</body>
</html>

6.3 flex父项常见属性

6.3.1 init

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        flex布局父项常见属性:
            1. flex-direction:      设置主轴的方向; 
            2. justify-content:     设置主轴上的子元素排列方式; 
            3. flex-wrap:           设置子元素是否换行; 
            4. align-items:         设置侧轴上的子元素排列方式(单行);
            5. align-content:       设置侧轴上的子元素的排列方式(多行);
            6. flex-flow:           复合属性, 相当于同时设置了flex-direction 和 flex-wrap; 
     -->
    <style></style>
</head>

<body>
</body>

</html>

6.3.2 flex-direction

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        1. flex-direction:      设置主轴的方向; 
            (0) 默认主轴方向是x轴方向, 默认侧轴方向是y轴方向; 
            (1) flex-direction属性决定主轴的方向(即项目的排列方向)
            (2) 主轴和侧轴是会变化的, 就看flex-direction设置谁为主轴, 那么剩下的就是侧轴, 我们的子元素是根据主轴来排列的;
            (3) 取值: row(默认自左至右) | row-reverse(自右至左) | column(自上至下) | column-reverse(自下至上);
     -->
    <style>
        div {
            display: flex;
            width: 80%;
            height: 300px;
            background-color: pink;
            flex-direction: row;
        }

        div span {
            width: 150px;
            height: 100px;
            background-color: purple;
        }
    </style>
</head>

<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
    </div>
</body>

</html>

在这里插入图片描述

6.3.3 justify-content

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        1. justify-content:     设置主轴上的子元素排列方式; 
            (0) 使用该属性之前一定要确认好主轴是谁; 
            (1) flex-start:         [默认值], 从头部开始 (如果主轴是x轴, 则从左到右)
                flex-end:           从尾部开始排列 (如果主轴是x轴, 则从右到左)
                center:             在主轴居中对齐(如果主轴是x轴则水平居中)
                space-around:       平分剩余空间
                space-between:      先两边贴边, 再平分剩余空间
     -->
    <style>
        div {
            display: flex;
            width: 80%;
            height: 600px;
            background-color: pink;
            flex-direction: row;                    /* 默认的主轴就是x轴(此句可省略) */
            justify-content: space-between;          /* 变化试试 */
        }

        div span {
            width: 150px;
            height: 100px;
            background-color: purple;
        }
    </style>
</head>

<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
        <!-- <span>4</span> -->
    </div>
</body>

</html>

在这里插入图片描述

6.3.4 flex-wrap

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        flex-wrap:    设置子元素是否换行; (默认不换行)
            (1) no-wrap; 
            (2) wrap;
     -->
    <style>
        div {
            display: flex;
            width: 800px;
            height: 600px;
            background-color: pink;
            flex-wrap: wrap;
        }

        div span {
            width: 150px;
            height: 100px;
            background-color: purple;
            margin: 10px;
        }
    </style>
</head>

<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
        <span>3</span>
        <span>3</span>
        <span>3</span>
    </div>
</body>

</html>

在这里插入图片描述

6.3.5 align-items

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        align-items:    设置侧轴上的子元素排列方式(单行);
            (1) flex-start: 自上至下;
            (2) flex-end:   自下至上;
            (3) center:     垂直居中; 
            (4) stretch:    拉伸(默认值)
     -->
    <style>
        div {
            display: flex;
            width: 800px;
            height: 600px;
            background-color: pink;
            justify-content: center;
            align-items: stretch;
        }

        div span {
            width: 150px;
            height: 100px;
            background-color: purple;
            margin: 10px;
        }
    </style>
</head>

<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
    </div>
</body>

</html>

在这里插入图片描述

6.3.6 align-content

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        align-content:       设置侧轴上的子元素的排列方式(多行);
                             并且只能用于子项[出现换行的情况](多行), 在单行下是没有效果的; 
            (1) flex-start:     默认值, 从侧轴的头部开始排列;
            (2) flex-end:       从侧轴的尾部开始排列; 
            (3) center:         在侧轴中间显示; 
            (4) space-around:   子项在侧轴平分剩余空间; 
            (5) space-between:  子项在侧轴先分布在两头, 再平分剩余空间;
            (6) stretch:        设置子项元素高度, 平分父元素高度; 
     -->
     <!-- 
         align-items 和 align-content的区别:
            (1) align-items适用于单行情况下, 只有上对齐, 下对齐, 居中和拉伸; 
            (2) align-content适用于换行(多行)的情况下(单行情况下无效), 可以设置上对齐, 下对齐, 居中, 拉伸以及平均分配剩余空间等属性值;
            (3) 总结: 单行找align-items, 多行找align-content; 
      -->
    <style>
        div {
            display: flex;
            width: 800px;
            height: 600px;
            background-color: pink;
            flex-wrap: wrap;
            align-content: space-around;
        }

        div span {
            width: 150px;
            height: 100px;
            background-color: purple;
            margin: 10px;
        }
    </style>
</head>

<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
        <span>4</span>
        <span>5</span>
        <span>6</span>
    </div>
</body>

</html>

在这里插入图片描述

6.3.7 flex-flow

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            display: flex;
            width: 600px;
            height: 300px;
            background-color: pink;
            /* 1. */
            /* flex-direction: column; */
            /* flex-wrap: wrap; */

            /* 2. 以上两句可以简写:  */
            flex-flow: column wrap;
        }

        div span {
            width: 150px;
            height: 100px;
            background-color: purple;
        }
    </style>
</head>

<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
        <span>4</span>
        <span>5</span>
    </div>
</body>

</html>

在这里插入图片描述

6.4 flex子项常见属性

6.4.1 init

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        1. flex属性:       子项目所占的份数; 
        2. align-self属性: 控制子项目已在侧轴的排列方式; 
        3. order属性:       定义子项的排列顺序(前后顺序); 
     -->
</head>
<body>
    
</body>
</html>

6.4.2 flex属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        flex属性:用于给指定的子项目分配剩余空间, 用flex来表示占多少份数;
     -->
     <style>
         section {
             display: flex;
             width: 60%;
             height: 150px;
             background-color: red;
             margin: 0 auto;
         }
         section div:nth-child(1) {
            width: 100px;
            height: 150px;
            background-color: blue;
         }
         section div:nth-child(2) {
            flex: 1;
            background-color: yellow;
         }
         section div:nth-child(3) {
            width: 100px;
            height: 150px;
            background-color: green;
         }

         p {
            display: flex;
             width: 60%;
             height: 150px;
             background-color: pink;
             margin: 100px auto;
         }
         p span {
             flex: 1;
         }
         p span:nth-child(2) {
             flex: 2;
             background-color: blue;
         }
     </style>
</head>
<body>
    <section>
        <div></div>
        <div></div>
        <div></div>
    </section>
    <p>
        <span>1</span>
        <span>2</span>
        <span>3</span>
    </p>
</body>
</html>

在这里插入图片描述

6.4.3 align-self属性

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        align-self属性:控制子项自己在侧轴上的排列方式; 
            align-self属性允许单个项目有与其他项目不一样的对齐方式, 可覆盖align-items属性;
            默认是auto, 表示继承父元素的align-items属性,如果没有父元素, 则等同于stretch; 
     -->
    <style>
        div {
            display: flex;
            width: 800px;
            height: 600px;
            background-color: pink;
            /* align-items: flex-end;      此时3个子盒子沿着侧轴底侧对齐 */
        }
        div span {
            width: 150px;
            height: 100px;
            background-color: purple;
            margin-right: 5px;
        }
        /* 只让第三个盒子沿着侧轴底侧对齐 */
        div span:nth-child(3) {
            align-self: flex-end;
        }
    </style>
</head>

<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
    </div>
</body>

</html>

在这里插入图片描述

6.4.4 order属性

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <!-- 
        order属性:数值越小, 排列越靠前, 默认为0; 
        注意:和z-index不一样; 
     -->
    <style>
        div {
            display: flex;
            width: 800px;
            height: 600px;
            background-color: pink;
        }

        /* 此时2号盒子就到了1号盒子的前面 */
        div span:nth-child(2) {
            order: -1;
        }

        div span {
            width: 150px;
            height: 100px;
            background-color: purple;
            margin-right: 5px;
        }
    </style>
</head>

<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
    </div>
</body>

</html>

在这里插入图片描述

6.5 携程网首页制作

在这里插入图片描述
gitte地址:
https://gitee.com/xingweicoding/studys

7. rem适配布局

7.1 em-rem认识

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        html {
            font-size: 12px;
        }

        /*div的大小是 180 * 180 */
        div {
            font-size: 12px;
            width: 15rem;           
            height: 15rem;
            background-color: purple;
        }

        p {
            /* [1.] em相对于父元素 的字体大小来说的; => p的大小是120*120; */
            /* width: 10em;  */
            /* height: 10em;  */

            /* [2.] rem 相对于 html元素 字体大小来说的; => p的大小是120*120; */
            width: 10rem;         
            height: 10rem;
            
            background-color: pink;
            /* [3.] rem的优点就是可以通过修改html里面的文字大小来改变页面中元素的大小可以整体控制; */
        }
    </style>
</head>

<body>
    <div>
        <p></p>
    </div>
</body>

</html>

在这里插入图片描述

7.2 媒体查询

7.2.1 init

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        媒体查询:(Media Query)是CSS3的新语法;
            (1) 使用@media查询, 可以针对不同的媒体类型定义不同的样式; 
            (2) @media可以针对不同的屏幕尺寸设置不同的样式; 
            (3) 当你重置浏览器大小的过程中, 页面会根据浏览器的宽度和高度重新渲染页面; 
            (4) 目前针对很多苹果手机, Android手机, 平板等设备都用得到媒体查询; 
    -->
    <!-- 
        语法格式:
            @media mediatype and|not|only (mediafeature) {
                ... ...
            }
            (1) mediatype: 是媒体类型;
                all: 用于所有设备; 
                print: 用于打印机和打印预览; 
                screen: 用于电脑屏幕, 平板电脑, 智能手机等; 

            (2) 关键字and not only; 
                and: 可以将多个媒体特性连接到一起, 相当于且的意思; 
                not: 排除某个媒体类型, 相当于非的意思, 可以省略; 
                only: 指定某个特定的媒体类型, 可以省略; 

            (3) mediafeature是媒体特性, 必须有小括号包含; 
                width:     定义输出设备中页面可见区域的宽度; 
                min-width: 定义输出设备中页面最小可见区域宽度; 
                max-width: 定义输出设备中页面最大可见区域宽度; 
     -->
     <style>
         /* 在屏幕上 并且 宽度 <= 600px时, 设置为我们想要的样式; */
         @media screen and (max-width: 600px){
             body {
                 background-color:red;
             }
         }

         /* 601px <= x <= 800px */
         @media screen and (min-width: 601px) and (max-width: 800px) {
             body {
                 background-color: green;
             }
         }

         /* 801px <= x <= 1000px */
         @media screen and (min-width: 801px) and (max-width: 1000px) {
             body {
                 background-color: blue;
             }
         }
     </style>
</head>
<body>
    
</body>
</html>

请添加图片描述

7.2.2 media-rem实现元素动态大小变化

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        @media screen and (min-width: 320px) {
            html {
                font-size: 50px;
            }
        }

        @media screen and (min-width: 640px) {
            html {
                font-size: 100px;
            }
        }

        .top {
            height: 1rem;
            font-size: .5rem;
            background-color: green;
            color: #fff;
            text-align: center;
            line-height: 1rem;
        }
    </style>
</head>

<body>
    <div class="top">HelloWorld</div>
</body>

</html>

请添加图片描述

7.2.3 引入资源

style320.css

div {
    width: 100%;
    height: 100px;
}
div:nth-child(1) {
    background-color: red;
}
div:nth-child(2) {
    background-color: green;
}

style640.css

div {
    float: left;
    width: 50%;
    height: 100px;
}
div:nth-child(1) {
    background-color: red;
}
div:nth-child(2) {
    background-color: green;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!--
        当我们屏幕小于640px 我们让div一行显示一个; 
        当我们屏幕大于等于 640px以上的,我们让div 一行显示2个;  
        一个建议: 我们媒体查询最好的方法是从小到大;  
        引入资源就是 针对于不同的屏幕尺寸 调用不同的css文件;  
    -->
    <!-- 
        引入资源:
            当样式表比较繁多的时候, 我们可以针对不同的媒体使用不同的stylesheet; 
            原理:就是直接在link中判断设备的尺寸, 然后引入不同的css文件即可; 
     -->
     <!-- 
         语法规范:
            <link rel="stylesheet" media="mediatype and|not|only (mediafeature)" href="xxx.css">
      -->
     <link rel="stylesheet" href="./style320.css" media="screen and (min-width: 320px)">
     <link rel="stylesheet" href="./style640.css" media="screen and (min-width: 640px)">
</head>
<body>
    <div>1</div>
    <div>2</div>
</body>
</html>

请添加图片描述

7.3 less基础

style.css

/* 颜色变量 */
/* 字体变量 */
/* 运算 */
/* 单位 */
html {
  font-size: 50px;
}
div {
  color: blue;
  font-size: 14px;
}
p {
  width: 150px;
  height: 300px;
  border: 10px solid red;
  background-color: #444444;
}
img {
  width: 1.64rem;
  /* 除法需要用括号括起来 */
  height: 1.64rem;
}
img {
  width: 1.64px;
  /* 单位:px */
  height: 1.64rem;
  /* 单位:rem */
}
.header {
  width: 200px;
  height: 200px;
  background-color: green;
  /* 子元素的样式直接写到父元素里面就可以了; */
}
.header a {
  color: red;
}
.header a:hover {
  color: blue;
}
.nav .logo {
  color: purple;
}
.nav::before {
  content: '';
}

style.less

@color: blue;       /* 颜色变量 */
@font: 14px;          /* 字体变量 */
@border: 5px + 5;     /* 运算 */
@baseFont: 50px;      /* 单位 */
html {
    font-size: @baseFont;
}


div {
    color: @color;
    font-size: @font;
}

p {
    width: 200px - 50;
    height: 200px  * ( 1 + 0.5);
    border: @border solid red;
    background-color: #666 - #222;
}

img {
    width: (82 / 50rem);            /* 除法需要用括号括起来 */
    height: (82 / 50rem);
}

img {
    width: (82 / @baseFont);         /* 单位:px */   
    height: (82rem / @baseFont);    /* 单位:rem */
}

.header {
    width: 200px;
    height: 200px;
    background-color: green;
    /* 子元素的样式直接写到父元素里面就可以了; */
    a {
        color: red;
        &:hover {
            color: blue;
        }
    }
}

.nav {
    .logo {
        color: purple;
    }
}
.nav {
    &::before {
        content: '';
    }
}
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./style.css">

    <!-- 
        css的弊端:
            1. css需要书写大量看似没有逻辑的代码, css冗余度是比较高的; 
            2. 不方便维护及扩展, 不利用复用; 
            3. css没有很好的计算能力; 
     -->

    <!-- 
        1. 变量
            命名规范:
                (1) 必须有@前缀; 
                (2) 不能包含特殊字符; 
                (3) 不能以数字开头;  
                (4) 大小写敏感; 
        
        2. less 编译: 
            本质上, less包含一套自定义的语法及一个解析器, 用户根据这些语法定义自己的样式规则, 
            这些规则最终会通过解析器, 编译生成对应的css文件; 
            所以, 我们需要把我们的less文件, 编译生成css文件, 这样才能在HTML页面中使用; 

        3. 嵌套:
            如果有伪类, 交集选择器, 伪元素选择器, 我们内层选择器的前面需要加&; 

        4. less运算:
            (1) +, -, *, /; 
            (2) 运算符的左右两侧必须敲一个空格隔开;
            (3) 两个数参与运算, 如果只有一个数有单位, 则最后的结果就以这个单位为准; 
            (4) 两个数参与运算, 如果2个数都有单位, 并且单位不一样, 则最后结果的单位以第一个为准; 
    */
     -->
</head>

<body>
    <div>HelloWorld</div>

    <div class="header">
        <a href="#">文字</a>
    </div>

    <div class="nav">
        <div class="logo">好吧</div>
    </div>

    <p>HelloWorld</p>


</body>

</html>

在这里插入图片描述

7.4 rem适配方案

7.4.1 init

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        rem适配方案:
            1. 让一些不能等比自适应的元素, 达到当设备尺寸发生改变的时候, 等比例适配当前设备; 
            2. 使用媒体查询根据不同设备按比例设置html的字体大小, 然后页面元素使用rem做尺寸单位, 
               当html字体大小变化时, 元素尺寸也会发生变化, 从而达到等比缩放的适配; 

        rem实际开发适配方案:
            1. 按照设计稿与设备宽度的比例, 动态计算并设置html标签的font-size大小; (媒体查询)
            2. CSS中, 设计稿元素的宽、高、相对位置等取值, 按照同等比例换算为rem为单位值; 

        rem适配方案技术使用:
            技术方案1: less, 媒体查询, rem; 
            技术方案2(推荐): flexible.js, rem; 
     -->
</head>
<body>
    
</body>
</html>

7.4.2 rem实际开发适配方案

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        动态设置HTML标签的font-size大小:
            1. 假设设计稿是750px; 
            2. 假设把整个屏幕划分为15等份(划分标准不一样, 可20, 可10,,,); 
            3. 每一份的大小作为HTML标签的字体大小, 此时font-size: 50px;
            4. 那么假如在320px的时候, 字体大小就是320/15 = 21.33px ;
            5. 用我们页面元素的大小除以不同的HTML字体大小会发现它们的比例还是相同的; 

            6. 比如我们以750px为标准设计稿;
            7. 一个100*100的页面元素映射在750px的屏幕下, 此时 100px/50 = 2rem; 2rem * 2rem(宽高比例1:1)
            8. 320px屏幕下, html字体大小为21.33, 此时2em = 42.66px; 42.66px * 42.66px (宽高比例1:1)
            9. 此时已经实现了在不同屏幕下的页面元素盒子等比例缩放的效果; 
     -->
     <!-- 
         元素大小取值方法:
            1. 屏幕宽度/份数 = html元素font-size的大小; 
            2. 页面元素的rem值 = 页面元素值(px) / (屏幕宽度/份数);
            3. 页面元素的rem值 = 页面元素值(px) / html-font-size大小; 
      -->
      <!-- 
          rem适配方案:
            1. 首先我们选一套标准尺寸 750px为准;
            2. 我们用屏幕尺寸 除以 我们划分的份数 就得到了 html 里面的文字大小, 但是我们知道不同屏幕下得到的文字大小是不一样的; 
            3. 页面元素的rem值 =  页面元素在 750像素的下px值 / html 里面的文字大小 
       -->
    <style>
        @media screen and (min-width: 320px) {
            html {
                font-size: 21.33px;     /* 320/15份 */
            }
        }

        @media screen and (min-width: 750px) {
            html {
                font-size: 50px;        /* 750/15份 */
            }
        }

        div {
            width: 2rem;
            height: 2rem;
            background-color: pink;
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>

请添加图片描述

7.5 苏宁首页案例制作1
https://gitee.com/xingweicoding/studys

请添加图片描述

7.6 苏宁首页案例制作2
https://gitee.com/xingweicoding/studys

7.7 HMMM案例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./css/normalize.css">
    <link rel="stylesheet" href="./css/index.css">
    <link rel="stylesheet" href="./css/swiper.min.css">
    <script src="./js/flexible.js"></script>

</head>

<body>
    <section class="wrap">
        <header class="header">黑马面面</header>
        <nav class="nav">
            <a href="#" class="item">
                <img src="./icons/icon1.png" alt="">
                <span>HR面试</span>
            </a>
            <a href="#" class="item">
                <img src="./icons/icon2.png" alt="">
                <span>笔试</span>
            </a>
            <a href="#" class="item">
                <img src="./icons/icon3.png" alt="">
                <span>技术面试</span>
            </a>
            <a href="#" class="item">
                <img src="./icons/icon4.png" alt="">
                <span>模拟面试</span>
            </a>
            <a href="#" class="item">
                <img src="./icons/icon5.png" alt="">
                <span>面试技巧</span>
            </a>
            <a href="#" class="item">
                <img src="./icons/icon6.png" alt="">
                <span>薪资查询</span>
            </a>
        </nav>
        <div class="go">
            <img src="./images/go.png" alt="">
        </div>
    </section>
    <!-- 就业指导模块 -->
    <section class="content">
        <div class="content-hd">
            <h4>
                <span class="icon"><img src="./icons/i2.png" alt=""></span>
                就业指导
            </h4>
            <a href="#" class="more">更多>></a>
        </div>
        <section class="get-job-focus">
            <!-- Swiper -->
            <div class="swiper-container get-job-con">
                <div class="swiper-wrapper">
                    <div class="swiper-slide">
                        <a href="#"><img src="./images/pic.png" alt=""></a>
                        <p>老师教你应对面试技巧</p>
                    </div>
                    <div class="swiper-slide">
                        <a href="#"><img src="./images/ldh.jpg" alt=""></a>
                        <p>老师教你应对面试技巧</p>
                    </div>
                    <div class="swiper-slide">
                        <a href="#"><img src="./images/3.jpg" alt=""></a>
                        <p>老师教你应对面试技巧</p>
                    </div>
                </div>
            </div>
            <!-- Add Arrows 根据需求这个代码放到 container外面 添加左右箭头-->
            <div class="swiper-button-next"></div>
            <div class="swiper-button-prev"></div>
        </section>
        <!-- 充电学习模块 -->
        <section class="content study-cc">
            <div class="content-hd">
                <h4>
                    <span class="icon"><img src="./icons/i2.png" alt=""></span>
                    充电学习
                </h4>
                <a href="#" class="more">更多>></a>
            </div>
            <div class="study">
                <div class="swiper-container study-con">
                    <div class="swiper-wrapper">
                        <div class="swiper-slide">
                            <img src="./images/pic1.png" alt="">
                            <h5>说低调英语,告别中式英语</h5>
                            <p>156人学习</p>
                        </div>
                        <div class="swiper-slide">
                            <img src="./images/pic1.png" alt="">
                            <h5>说低调英语,告别中式英语</h5>
                            <p>156人学习</p>
                        </div>
                        <div class="swiper-slide">
                            <img src="./images/pic2.png" alt="">
                            <h5>说低调英语,告别中式英语</h5>
                            <p>156人学习</p>
                        </div>
                        <div class="swiper-slide">
                            <img src="./images/pic2.png" alt="">
                            <h5>说低调英语,告别中式英语</h5>
                            <p>156人学习</p>
                        </div>
                    </div>
                    <!-- Add Pagination -->
                    <div class="swiper-pagination"></div>
                </div>
            </div>
        </section>
        <!-- 底部模块 -->
        <footer class="footer">
            <a href="#" class="item">
                <img src="./icons/home.png" alt="" />
                <p>首页</p>
            </a>
            <a href="#" class="item">
                <img src="./icons/ms.png" alt="" />
                <p>模拟面试</p>
            </a>
            <a href="#" class="item">
                <img src="./icons/net.png" alt="" />
                <p>技术面试</p>
            </a>
            <a href="#" class="item">
                <img src="./icons/user.png" alt="" />
                <p>我的首页</p>
            </a>
        </footer>
        <!-- Swiper JS -->
        <script src="./js/swiper.min.js"></script>
        <!-- Initialize Swiper -->
        <script>
            (function () {
                var swiper = new Swiper('.get-job-con', {
                    slidesPerView: 2,
                    spaceBetween: 30,
                    centeredSlides: true,
                    loop: true,
                    navigation: {
                        nextEl: ".swiper-button-next",
                        prevEl: ".swiper-button-prev",
                    },
                });
            })();
            (function () {
                var swiper = new Swiper('.study-con', {
                    slidesPerView: 2.2,
                    spaceBetween: 10,
                });
            })();
        </script>
</body>

</html>

在这里插入图片描述

8. 响应式布局

https://gitee.com/xingweicoding/studys

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/574707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python坐标画图:从入门到精通

Python坐标画图&#xff1a;从入门到精通 在现代科技的时代&#xff0c;数据分析与可视化已经成为了各行各业不可或缺的环节。Python作为一个功能强大的脚本语言&#xff0c;被广泛应用于数据处理、科学计算和机器学习等领域。在本文中&#xff0c;我们将会介绍Python坐标画图…

chatgpt赋能python:Python局部变量的作用范围与全局变量的关系

Python局部变量的作用范围与全局变量的关系 在Python中&#xff0c;变量的作用范围非常重要&#xff0c;因为变量的作用范围决定了它们在程序中的可见度。在这篇文章中&#xff0c;我们将讨论Python中局部变量的作用范围与全局变量的关系&#xff0c;以及如何通过改变局部变量…

chatgpt赋能python:Python字符串反向-简单易学的方法

Python 字符串反向 - 简单易学的方法 介绍 Python 字符串是用于存储和操纵文本的一种数据类型。字符串是不可变的&#xff0c;这意味着一旦创建&#xff0c;就不能修改内容。 很多时候我们需要对字符串进行操作&#xff0c;比如反向。反转字符串是一个常见的操作&#xff0c…

chatgpt赋能python:Python小波分析介绍

Python小波分析介绍 小波分析是一种数学方法&#xff0c;适用于对非平稳信号&#xff08;非周期性信号&#xff09;进行分析和处理。Python作为一种强大的编程语言&#xff0c;提供了丰富的小波分析工具包&#xff0c;让人们更容易地应用小波分析。 小波分析的原理 小波分析…

chatgpt赋能python:Python小波变换——数据分析和信号处理方向的常见工具

Python小波变换——数据分析和信号处理方向的常见工具 介绍 Python是一种流行的编程语言&#xff0c;它具有简单易学和强大的内置库&#xff0c;能够轻松地完成各种任务。小波变换是一种用于数据分析和信号处理的常见工具&#xff0c;它可以捕获并描述信号和数据中的不同特性…

设计模式之订阅发布模式

一、简介 订阅发布模式&#xff08;Publish-Subscribe Pattern&#xff09;是一种行之有效的解耦框架与业务逻辑的方式&#xff0c;也是一种常见的观察者设计模式&#xff0c;它被广泛应用于事件驱动架构中。 在这个模式中&#xff0c;发布者&#xff08;或者说是主题&#x…

chatgpt赋能python:Python小波分解:一种更高效的数据处理方法

Python小波分解&#xff1a;一种更高效的数据处理方法 介绍 在现代科技时代&#xff0c;数据处理在各个领域都扮演着至关重要的角色。比如信号、图像、音频和视频等数据的处理&#xff0c;这些领域需要能够处理数据&#xff0c;核心是要可以提取出它们的特征。这正是小波变换…

【Python】正则表达式操作

知识目录 一、写在前面✨二、检查字符串首字符三、字符匹配四、总结撒花&#x1f60a; 一、写在前面✨ 大家好&#xff01;我是初心&#xff0c;希望我们一路走来能坚守初心&#xff01; 今天跟大家分享的文章是 Python函数式编程第二弹&#xff0c;再次以两个简单的例子带大…

Python之网络编程

一、操作系统基础 操作系统&#xff1a;&#xff08;Operating System&#xff0c;简称OS&#xff09;是管理和控制计算机硬件与软件资源的计算机程序&#xff0c;是直接运行在“裸机”上的最基本的系统软件&#xff0c;任何其他软件都必须在操作系统的支持下才能运行。 注&a…

一图看懂 typing_extensions 模块:允许在旧版Python上启用、实验新的类型系统特性,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 typing_extensions 模块&#xff1a;允许在旧版Python上启用、实验新的类型系统特性&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9c…

软件产品授权体系搭建

流程图 流程说明 1. 需要提供一个授权服务端、授权小程序客户端 2. 支持在线授权、离线授权、移动介质授权 3. 适应所有语言开发的产品体系

C++学习笔记(四): 类和对象

一个类定义了一个类型&#xff0c;以及与其关联的一组操作。类机制是C最重要的特性之一。实际上&#xff0c;C最初的一个设计焦点就是能定义使用上像内置类型一样自然的类类型&#xff08;class type&#xff09;。 #include <iostream>using namespace std;class Box {p…

chatgpt赋能python:Python坐标轴范围:如何设置?

Python 坐标轴范围&#xff1a;如何设置&#xff1f; 在 Python 中&#xff0c;通过 matplotlib 库绘图时&#xff0c;默认情况下该库会自动设置坐标轴范围。但是&#xff0c;在一些特殊情况下&#xff0c;我们可能需要手动设置坐标轴范围&#xff0c;以更好的呈现数据。那么&…

总结880

学习目标&#xff1a; 月目标&#xff1a;5月&#xff08;1800基础部分&#xff0c;背诵15篇短文&#xff0c;核心主词&#xff09; 周目标&#xff1a;1800高等数学部分并完成错题记录&#xff0c;英语背3篇文章并回诵 每日必复习&#xff08;5分钟&#xff09; 复习微分方…

014、检查点

检查点 检查点触发机制为什么需要检查点检查点工作流程检查点记录位置Database Recovery检查点调整checkpoint_completion_target检查点触发机制 在PostgreSQL中,检查点(后台)进程执行检查点;当发生下列情况之一时,其进程将启动: 检查点间隔时间由checkpoint_timeout设置…

chatgpt赋能python:Python倒序排序:如何通过Python实现快速高效地倒序排序?

Python倒序排序&#xff1a;如何通过Python实现快速高效地倒序排序&#xff1f; 在Python编程中&#xff0c;很可能遇到需要对列表、字典或其他数据结构进行排序的任务。排序可以按照从小到大或从大到小的顺序进行&#xff0c;本文将介绍如何使用Python进行倒序排序。倒序排序…

chatgpt赋能python:Python编译:Python程序变成机器可执行文件的过程

Python编译&#xff1a;Python程序变成机器可执行文件的过程 对于大多数Python编程人员来说&#xff0c;编译Python程序可能不是必须的&#xff0c;因为Python是一种解释型语言&#xff0c;我们可以直接运行源代码。但是&#xff0c;有时候&#xff0c;我们需要将Python程序编…

推箱子大冒险(SDL/C)

前言 欢迎来到小K的SDL专栏第三小节&#xff0c;本节将为大家带来小项目~C语言SDL版坤坤推箱子详细讲解&#xff0c;这里也为大家上传了源码和图片资源&#xff0c;需要的自取看完以后&#xff0c;希望对你有所帮助 ✨效果如下 文章目录 前言一、推箱子思路讲解二、加SDL绘图代…

chatgpt赋能python:Python字符串颠倒:如何用Python实现字符串颠倒操作

Python字符串颠倒&#xff1a;如何用Python实现字符串颠倒操作 在Python中&#xff0c;字符串颠倒是一种常见的操作。我们可以使用Python内置的方法和函数来轻松地完成字符串颠倒操作。在本篇文章中&#xff0c;我们将深入探讨Python字符串颠倒操作的实现方法。 什么是字符串…

Fiddler抓包MuMu模拟器中app的数据

第1步&#xff1a;下载Fiddler&#xff0c;并安装。 下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/105XDJ_KD54PUnsHM-BsZLQ?pwd0t8q 提取码&#xff1a;0t8q 第2步&#xff1a;配置Fiddler。 点击“Tools”→点击“Options” → 重启生效 设置HTTPS: …