Web前端界面开发

前沿:介绍自适应和响应式布局

自适应布局:-----针对页面1个像素的变换而变化    就是我们上一个练习的效果

我们的页面效果,随着我们的屏幕大小而发生适配的效果(类似等比例)

如:rem适配 和 vw/vh适配

响应式布局:  ---针对我们的设备宽度变化,做出不同的页面设计(突变)

例子:

------》


1,vw/vh适配 

必要性:现在比较流行的是rem制作方法,但是现在大厂(b站等)已经开始尝试使用vw、vh技术了,所以要学习vw 技术,vw技术的优点就在于不用引入js文件等,相对于rem比较简单。

概念:

vw和vh是CSS3中引入的一个相对单位(之前的rem也是),他们分别代表视口宽度和视口高度的百分比。

vw(viewport width)表示相对视口(用户可以看见的页面部分)的宽度。1个vw等于视口宽度的1%,比如如果视口宽度是1000px,则50vw表示占整个宽度的50%,就是500px。

vh(viewport height)表示相对视口的高度。原理同vw。1vh表示视口高度的1%。

vw/vh不考虑视口的宽高,类似于rem。效果一致。

vw/vh的计算:

假设一个设备的视口宽度是375px,那么1vw就是3.75px;

则如果要设一个宽度为50px的div,应该设(50/3.75=13.333)vw

vh同理;

实操:

注意事项:

开发中,vw和vh不能混用。因为我们的手机的长度比宽度长很多,所以我们一般不对高度进行vh的替换,否则会导致我们的页面元素变形。

练习1:

需求:①:外部div的宽为100%,高为200px;每个item宽为屏幕的一半,高200px

操作如下:

代码:

<!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;  
        }
        .wrap{
            width:100%;
            height: 200px;
            background-color: skyblue;
        }
        .item{
            width:50vw;
            height:200px;
            float: left;
        }
        img{
            width:50vw;
            height: 200px;

        }
        span{
            color: red;
        }
    </style>
</head>
<body>
    <div class="wrap">
        <div class="item">
            <img src="C:\Users\honor\Desktop\OIP-C.jpg" alt="图片1">
            <div class="text">美丽小姐姐
                <br>
                <span>No.1</span>
            </div>
        </div>
        <div class="item">
            <img src="C:\Users\honor\Desktop\OIP-C.jpg" alt="图片1">
            <div class="text">美丽小姐姐
                <br>
                <span>No.1</span>
            </div>
        </div>
        <div class="item"></div>

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

提示:style里面的*{},是为了去除外边距;br是换行。hr是水平线;span是标签;

效果:


2,Flex弹性盒子布局

与浮动的区别:float:有局限性,使用不方便需要清除浮动

更好的方法:flex弹性盒子;

概率:

Flex 布局也叫弹性布局,是浏览器提倡的布局模型,非常适合结构化布局,提供了强大的空间分布和对齐能力。 Flex 模型不会产生浮动布局中脱离标准文档流现象,布局网页更简单、更灵活。

更适配移动端

flex的设置:

设置方式:给父元素设置display:flex子元素可以自动挤压或拉伸。

组成部分:

  • 弹性容器(display父元素)
  • 弹性盒子(指的是父元素当中的子元素,直接子元素,“子元素的子不算父元素的直接子”
  • 主轴:默认在水平方向;就是弹性子元素默认在主轴上排列;
  • 侧轴/交叉轴:默认在垂直方向;  (始终和主轴垂直)

实践一下:

设置flex前:   (在盒子里设置)

------->

布局属性:

主轴对齐方式

属性名:justify-content

属性值:

  • flex-start          默认值,弹性盒子从起点开始依次排列
  • flex-end           弹性盒子从终点开始依次排列

                       

       ------》

  • center              弹性盒子沿主轴居中排列

                               

                                       

  • space-between     弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子之间,两边贴边,其余空间,平均分配。

                             

                                

  • space-around       弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子两侧。

                            

                                  

around和between区别:

between是先占后分。around(如下图)是先分后占,先每个盒子两边均分间距,然后排列。

侧轴对齐方式

属性名:

  • align-items:当前弹性容器内所有弹性盒子的侧轴对其方式(给弹性盒子设置)
  • align-self:单独控制某个弹性盒子的侧轴对齐方式(给弹性盒子设置)

属性值:

  • stretch            弹性盒子沿着侧轴线拉伸至铺满容器(弹性盒子没有设置侧轴方向尺寸则默认拉伸)

---------》

  • center     弹性盒子沿侧轴居中排列
  • flex-start    弹性盒子从起点开始依次排列
  • flex-end      弹性盒子从终点开始依次排列

弹性盒子换行

弹性盒子可以自动挤压或拉伸,默认情况下,所有弹性盒子都在一行显示。这就造成一种情况,就是,当子元素的宽度之和超过了父元素的宽度时,所有的弹性盒子仍挤压在同一行。

换行设置:

属性名:flex-wrap      ---找到父元素,加上这个属性就行了;

属性值:

  • wrap     换行
  • nowrap   不换行

设置单个与其他项目不一样的对齐方式属性名:align-self

属性值:

  • start      默认从头开始
  • end       从结尾开始

目的效果:

实操:先给需要设置的弹性盒子独起类名,然后设置就可以了.

----->

主轴方向的更改

主轴默认在水平方向,侧轴默认在垂直方向

属性名:flex-direction

属性值:

  • row          水平方向,从左到右(默认)
  • column         垂直方向 ,从上到下
  • row-reverse            水平方向,从右到左
  • column-reverse         垂直方向,从上到下

实践一下:

                                    

--------》

                                   

                                    

这里仅展示两个。

弹性伸缩比

作用:控制弹性盒子的主轴方向的尺寸                 跟我们的vw基本一致,只不过表示方式不一样。

属性名:flex

属性值:整数数字,表示占用父级剩余尺寸的份数。

实践一下:

--------》

练习2

要求:请使用flex弹性盒子布局完成网某云精选推荐效果

需求:①:外部div的宽为100%(即父元素宽度的100%),高为195px;每个item宽145px,高195px.

<!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>
        .wrap{
            width: 100%;
            height: 195px;
            border: 1px solid black;
            display: flex;
            justify-content: space-between;

        }
        .item{
            height: 195px;
            width: 145px;
            background-color: skyblue;
            border: 1px solid black;
            border-radius: 4px;
            background-image: url("C:/Users/honor/Desktop/OIP-C.jpg");
            background-size: 100% 100%;
        }

    </style>
</head>
<body>
    <div class="wrap">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</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">
    <title>Document</title>
    <style>
        .wrap{
            width: 100%;
            height: 195px;
            border: 1px solid black;

        }
        .item{
            height: 195px;
            width: 145px;
            background-color: skyblue;
            border: 1px solid black;
            border-radius: 4px;
            float: left;
            margin-right: 81.5px;
        }
        .last{
            margin-right: 0px;
        }
    </style>
</head>
<body>
    <div class="wrap">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item last">7</div>
    </div> 
</body>
</html>

效果:

缺点:宽度一变,就会出现下面这种情况,flex就没有这种缺点。

但flex也有一个缺点。如下:

当我们的设备宽度特别窄的时候,我们的图片看起来就不美观了。

那么我们来认识一下新的布局,媒体查询


3,媒体查询

当设备宽度越来越小时,flex可以帮助我们依然保持item在一行,确保布局正常。 但是,大家发现,布局没问题,对应的时每个item都发生了变形。

正确的逻辑应该是是 监测设备宽度 →容器宽度小于 item宽度之和 →样式更改

概念:

媒体:各种设备(移动设备,pc设备)

查询:检测属于哪种设备

媒体查询:通过查询当前属于哪种设备,让网页能够再不同的设备下正常的预览

作用:

  • 媒体查询能够检测视口的宽度,然后编写差异化的css样式
  • 当某个条件成立时,执行对应的css样式。

语法:

all(媒体类型):此条媒体查询适用于所有设备

and(查询条件):可以将多个媒体特性连接到一起,相当于“且”的意思

min-width(设备屏幕宽度断点):表示设备宽度最小为320px的时候适用

注意:不能少敲一个空格

媒体类型:

查询条件:                 

我们大多数用的是and

设备屏幕宽度断点


注意:我们一般情况只用min-width,或者max-width。不能混用,因为二者是矛盾的。

练习3

我们这里只是改颜色,当然我们可以盖其他的样式

需求:div宽高为200px 

1:设备宽度小于等于1200px时,div颜色为skyblue 2:

设备宽度小于等于992px时,div颜色为yellow

3:设备宽度小于等于750px时,div颜色为green

<!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: purple;
        }
        @media all and (max-width:1200px){
            div{
                background-color: skyblue;
            }
        }
        @media all and (max-width:992px){
            div{
                background-color: yellow;
            }
        }
        @media all and (max-width:750px){
            div{
                background-color: green;
            }
        }
    </style>
</head>
<body>
    <div></div>
    
</body>
</html>

等等。

注意事项:

用max-width表示断点的时候,大的断点放上面。 反过来,用min-width表示断点的时候,小的断点放上面

练习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>
      .wrap {
        max-width: 1130px;
        min-width: 750px;
        margin: 0 auto;
      }
      .cci-text1,
      .cci-text2 {
        margin-top: 15px;
        color: #333;
        text-align: center;
      }
      .cci-text2 {
        margin-top: 10px;
        color: #afafaf;
        font-size: 13px;
      }
      .cci-top {
        width: 100%;
        height: 202px;
        background-color: white;
        background-size: 100% 100%;
      }
      .c-content-item {
        width: 350px;
        height: 292px;
        margin-bottom: 40px;
        box-shadow: 0 15px 30px rgba(0, 0, 0, 0.1);
        margin: 0 5px;
      }
      .content-box {
        display: flex;
        justify-content: space-between;
        flex-wrap: wrap;
        margin-top: 25px;
      }
      .cci-top {
        width: 100%;
        height: 202px;
        background-color: white;
        background-size: 100% 100%;
      }
      /* item项图片设置 */
      .content-box .c-content-item:nth-child(1) .cci-top {
        background-image: url("C:/Users/honor/Documents/WeChat Files/wxid_dh7dkcoymkso22/FileStorage/File/2024-10/day14/imgs/agimg1.jpg");
      }
      .content-box .c-content-item:nth-child(2) .cci-top {
        background-image: url("C:/Users/honor/Documents/WeChat Files/wxid_dh7dkcoymkso22/FileStorage/File/2024-10/day14/imgs/agimg2.jpg");
      }
      .content-box .c-content-item:nth-child(3) .cci-top {
        background-image: url("C:/Users/honor/Documents/WeChat Files/wxid_dh7dkcoymkso22/FileStorage/File/2024-10/day14/imgs/agimg3.jpg");
      }
      .content-box .c-content-item:nth-child(4) .cci-top {
        background-image: url("C:/Users/honor/Documents/WeChat Files/wxid_dh7dkcoymkso22/FileStorage/File/2024-10/day14/imgs/agimg4.jpg");
      }
      .content-box .c-content-item:nth-child(5) .cci-top {
        background-image: url("C:/Users/honor/Documents/WeChat Files/wxid_dh7dkcoymkso22/FileStorage/File/2024-10/day14/imgs/agimg5.jpg");
      }
      .content-box .c-content-item:nth-child(6) .cci-top {
        background-image: url("C:/Users/honor/Documents/WeChat Files/wxid_dh7dkcoymkso22/FileStorage/File/2024-10/day14/imgs/agimg6.jpg");
      }
      @media all and (max-width:992px){
        .content-box{
          justify-content: space-around;
        }
      }
      @media all and (max-width:800px){
        .content-box{
          justify-content: center;
        }
      }
    </style>
  </head>
  <body>
    <div class="wrap">
      <div class="content-box">
        <div class="c-content-item">
          <div class="cci-top"></div>
          <div class="cci-text1">我们的好产品</div>
          <div class="cci-text2">起飞页最快的建站平台...</div>
        </div>
        <div class="c-content-item">
          <div class="cci-top"></div>
          <div class="cci-text1">我们的好产品</div>
          <div class="cci-text2">起飞页最快的建站平台...</div>
        </div>
        <div class="c-content-item">
          <div class="cci-top"></div>
          <div class="cci-text1">我们的好产品</div>
          <div class="cci-text2">起飞页最快的建站平台...</div>
        </div>
        <div class="c-content-item">
          <div class="cci-top"></div>
          <div class="cci-text1">我们的好产品</div>
          <div class="cci-text2">起飞页最快的建站平台...</div>
        </div>
        <div class="c-content-item">
          <div class="cci-top"></div>
          <div class="cci-text1">我们的好产品</div>
          <div class="cci-text2">起飞页最快的建站平台...</div>
        </div>
        <div class="c-content-item">
          <div class="cci-top"></div>
          <div class="cci-text1">我们的好产品</div>
          <div class="cci-text2">起飞页最快的建站平台...</div>
        </div>
      </div>
    </div>
  </body>
</html>

效果如下:

完美的适配需要多种布局同时使用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习05-最小二乘法VS梯度求解

机器学习05-最小二乘法VS梯度求解 文章目录 机器学习05-最小二乘法VS梯度求解0-核心知识点梳理1-最小二乘法和梯度求解算法什么关系最小二乘法梯度求解算法两者的关系 2-最小二乘法可以求解非线性回归吗3-最小二乘法不使用梯度求解算法&#xff0c;给出一个简单的示例&#xff…

maven的简单介绍

目录 1、maven简介2、maven 的主要特点3、maven的下载与安装4、修改配置文件5、私服(拓展) 1、maven简介 Maven 是一个广泛使用的项目管理和构建工具&#xff0c;主要应用于 Java 项目。Maven 由 Apache 软件基金会开发和维护&#xff0c;它提供了一种简洁且一致的方法来构建、…

C++ 基础思维导图(三)异常-STL

1、异常 异常举例 BankAccount.h #ifndef BANK_ACCOUNT_H #define BANK_ACCOUNT_H#include <iostream> #include <stdexcept>class InsufficientFundsException : public std::runtime_error { public:InsufficientFundsException() : std::runtime_error("I…

【C++入门】详解(中)

目录 &#x1f495;1.函数的重载 &#x1f495;2.引用的定义 &#x1f495;3.引用的一些常见问题 &#x1f495;4.引用——权限的放大/缩小/平移 &#x1f495;5. 不存在的空引用 &#x1f495;6.引用作为函数参数的速度之快&#xff08;代码体现&#xff09; &#x1f4…

人工智能之数学基础:函数间隔和几何间隔

本文重点 在机器学习领域,尤其是支持向量机(SVM)算法中,函数间隔(Functional Margin)和几何间隔(Geometric Margin)是两个至关重要的概念。它们不仅用于描述数据点到超平面的距离,还直接影响到分类器的性能与泛化能力。本文将详细介绍这两个概念,并探讨它们之间的区…

UE5 打包项目

UE5 打包项目 flyfish 通过 “文件”->“打开项目”&#xff0c;然后在弹出的对话框中选择项目文件&#xff08;通常是以.uproject为后缀的文件&#xff09; 选择目标平台&#xff1a; 在 UE5 主界面中&#xff0c;找到 “平台”&#xff08;Platforms&#xff09;。根据…

.NET framework、Core和Standard都是什么?

对于这些概念一直没有深入去理解&#xff0c;以至于经过.net这几年的发展进化&#xff0c;概念越来越多&#xff0c;越来越梳理不容易理解了。内心深处存在思想上的懒惰&#xff0c;以为自己专注于Unity开发就好&#xff0c;这些并不属于核心范畴&#xff0c;所以对这些概念总是…

《python》——jieba库

jieba库 jieba简介 jieba 是一个非常受欢迎的中文分词库 中文分词&#xff1a;这是 jieba 库最主要的功能。它能够将一段中文文本按照词语进行切分。例如&#xff0c;对于句子 “我爱自然语言处理”&#xff0c;jieba 分词后可以得到 [“我”, “爱”, “自然语言”, “处理”…

实训云上搭建集群

文章目录 1. 登录实训云1.1 实训云网址1.2 登录实训云 2. 创建网络2.1 网络概述2.2 创建步骤 3. 创建路由器3.1 路由器名称3.1 创建路由器3.3 查看网络拓扑 4. 连接子网5. 创建虚拟网卡5.1 创建原因5.2 查看端口5.3 创建虚拟网卡 6. 管理安全组规则6.1 为什么要管理安全组规则6…

python-42-使用selenium-wire爬取微信公众号下的所有文章列表

文章目录 1 seleniumwire1.1 selenium-wire简介1.2 获取请求和响应信息2 操作2.1 自动获取token和cookie和agent2.3 获取所有清单3 异常解决3.1 请求url失败的问题3.2 访问链接不安全的问题4 参考附录1 seleniumwire Selenium WebDriver本身并不直接提供获取HTTP请求头(header…

【理论】测试框架体系TDD、BDD、ATDD、MBT、DDT介绍

一、测试框架是什么 测试框架是一组用于创建和设计测试用例的指南或规则。框架由旨在帮助 QA 专业人员更有效地测试的实践和工具的组合组成。 这些指南可能包括编码标准、测试数据处理方法、对象存储库、存储测试结果的过程或有关如何访问外部资源的信息。 A testing framewo…

详细全面讲解C++中重载、隐藏、覆盖的区别

文章目录 总结1、重载示例代码特点1. 模板函数和非模板函数重载2. 重载示例与调用规则示例代码调用规则解释3. 特殊情况与注意事项二义性问题 函数特化与重载的交互 2. 函数隐藏&#xff08;Function Hiding&#xff09;概念示例代码特点 3. 函数覆盖&#xff08;重写&#xff…

计算机系统组成(计算机组成原理 基础)

文章目录&#xff1a; 一&#xff1a;体系结构 1.系统组成 1.1 硬件系统 1.2 软件系统 2.工作原理 2.1 冯诺依曼体系 2.2 指令和指令系统 3.性能指标 二&#xff1a;硬件系统 1.主机 1.1 CPU 1.2 内存 2.外设 2.1 外存 2.2 输入设备 2.3 输出设备 2.4 适配器 …

STM32 : 波特率发生器

波特率发生器 1. 发送器和接收器的波特率 波特率寄存器 (BRR): 在串行通信中&#xff0c;发送器和接收器的波特率是由波特率寄存器&#xff08;BRR&#xff09;中的一个值 DIV 来确定的。 2. 计算公式 计算公式: 详细解释 1. 波特率寄存器 (BRR) BRR: 波特率寄存器是一…

全新市场阶段, Plume 生态不断壮大的 RWAfi 版图

加密市场在 2024 年迎来了新的里程碑。BTC 不仅成功推出 ETF&#xff0c;以 BTC 为代表的主流加密货币还在一系列传统金融机构的推动下逐步与主流金融市场接轨。与此同时&#xff0c;随着特朗普成功当选下一任美国总统&#xff0c;他承诺推出一系列友好的加密政策&#xff0c;并…

MySQL的小问题

编码问题 不管官方使用什么编码&#xff1a;latin1、gbk、utf8、utfmb4。统一使用utfmb4 MySQL中的utf8并不是utf-8&#xff0c;它省略了一个字节&#xff0c;只是用三个字节存储所有的符号&#xff0c;utfmb4才是utf-8 远程登录问题&#xff1a; MySQL官方默认没有启动远程…

单片机(MCU)-简单认识

简介&#xff1a; 内部集成了CPU&#xff0c;RAM&#xff0c;ROM&#xff0c;定时器&#xff0c;中断系统&#xff0c;通讯接口等一系列电脑的常用硬件功能。 单片机的任务是信息采集&#xff08;依靠传感器&#xff09;&#xff0c;处理&#xff08;依靠CPU&#xff09;&…

金融项目实战 01|功能测试分析与设计

前置内容&#xff1a;金融项目准备的内容笔记可直接看如下笔记 只看&#xff1a;一、投资专业术语 和 二、项目简介 两部分文章浏览阅读2.3k次&#xff0c;点赞70次&#xff0c;收藏67次。安享智慧理财金融系统测试项目&#xff0c;测试用例&#xff0c;接口测试&#xff0c;金…

vue-cli项目配置使用unocss

在了解使用了Unocss后&#xff0c;就完全被它迷住了。接手过的所有项目都配置使用了它&#xff0c;包括一些旧项目&#xff0c;也跟同事分享了使用Unocss的便捷性。 这里分享一下旧项目如何配置和使用Unocss的&#xff0c;项目是vue2vue-cli构建的&#xff0c;node<20平常开…

5个不同类型的数据库安装

各种社区版本下载官方地址&#xff1a;MySQL :: MySQL Community Downloads 一、在线YUM仓库&#xff08;Linux&#xff09; 选择 MySQL Yum Repository 选择对应版本下载仓库安装包&#xff08;No thanks, just start my download.&#xff09; 下载方法1&#xff1a;下载到本…