前端响应式布局方式及其优缺点大全

前端响应式布局方式及其优缺点大全

  • 1. 什么是响应式布局
  • 2. 响应式布局方式有哪些
    • 1. 媒体查询布局
    • 2. Flex弹性布局
    • 3. 百分比布局
    • 4. vw/vh响应式布局
    • 5. rem响应式布局
  • 3. 结语

1. 什么是响应式布局

对于不同宽度和高度的屏幕,通过一套代码使页面样式根据屏幕尺寸自适应展示。,目的是解决移动互联网浏览的问题,使网站能够在多种终端上(如智能手机、平板电脑和台式电脑)提供最佳的浏览体验。

2. 响应式布局方式有哪些

1. 媒体查询布局

  • 实现方案

    通过@media 媒体查询,可以给不同尺寸的屏幕,编写不同的样式来实现响应式布局。简单的来说:告诉浏览器或者其他运行环境,满足a条件时,a样式生效;满足b条件时,b样式生效

  • 可监听的属性
    1. 屏幕的高度(vh)和宽度(vw
    2. 设备的高度与高度
    3. 设备方向(比如手机的竖屏和横屏)
    4. 分辨率(resolution)等等
  • 使用方法
    • css中使用:
      	@media not|only mediatype and (mediafeature and|or|not mediafeature{// 自定义样式}
      
    • html中使用
      	<!-- 宽度大于 900px 的屏幕使用该样式 --><link rel="stylesheet" media="screen and (min-width: 900px)" href="widescreen.css"><!-- 宽度小于或等于 600px 的屏幕使用该样式 --><link rel="stylesheet" media="screen and (max-width: 600px)" href="smallscreen.css">
      
  • 优缺点
    • 优点:
      • 原生支持,无需插件:@media 规则可以直接在 CSS 中使用。
      • 使用简单:只需在CSS中添加@media screen属性,就可以开始定义不同屏幕尺寸下的样式规则。
    • 缺点:
      • 若浏览器大小改变,需要改变的样式太多,多套样式代码会很繁琐。

2. Flex弹性布局

  • 定义

    Flex布局是一种用于构建灵活和响应式用户界面的布局模型。它由Flexbox CSS 模块提供支持,并允许在容器中对齐和分布子元素。

  • 简单使用示例
    • 父元素设置 display:flex;
    • 子元素设置 flex:1; // 表示子元素的伸缩比例,默认为 1 。
  • 优缺点
    • 优点:
      • 使用简单性:FlexboxCSS规范的一部分,是现代浏览器支持的标准功能。
      • 对齐容易:Flexbox提供了一套完整的对齐工具,可以快速对齐子项。
    • 缺点:
      • 存在兼容性问题,有些浏览器可能不支持,需要做兼容性处理。

3. 百分比布局

  • 定义

    当浏览器的宽度或者高度发生变化时,通过百分比单位可以使得浏览器中的组件的宽和高随着浏览器的变化而变化,从而实现响应式的效果。

  • 百分比实现规则
    1. heightwidth 属性的百分比依托于父标签的宽高。
    2. 子元素的 topbottom 如果设置百分比,则相对于直接非 static 定位(默认定位)的父元素的高度,同样,子元素的 leftright 如果设置百分比,则相对于直接非 static 定位(默认定位的)父元素的宽度。
    3. 子元素的 paddingmargin 如果设置百分比,不论是垂直方向或者是水平方向都相对于直接父亲元素的 width,而与父元素的 height 无关。
    4. border-radius 为百分比,则是相对于自身的宽度
  • 优缺点
    • 优点:
      自适应性强:使用百分比设置元素的宽度,可以使布局在不同尺寸的屏幕上自适应调整,提供良好的响应式设计体验
    • 缺点:
      计算困难,如果我们要定义一个元素的宽度和高度,按照设计稿,必须换算成百分比单位。

4. vw/vh响应式布局

  • vw/vh定义

    vwvh 分别相对的是视图窗口的宽度和视口窗的高度。100vw = 视图窗宽度 ,100vh = 100 视图窗高度,实际开发中可利用 vscode 的插件 px to vw 来实现单位的自动转换。

  • 优缺点
    • 优点
      • 视口单位不依赖父元素的尺寸,可以独立控制元素的大小和位置
    • 缺点
      • 如果屏幕尺度跨度太大可能会导致页面元素被拉伸变形,字体大小无法随屏幕大小发生变化。
      • 设置盒模型的不同属性时,其百分比设置的参考元素不唯一,容易使布局问题变得复杂

5. rem响应式布局

  • rem定义

    rem 是相对于 html 根元素的字体大小的单位。我们通过修改 htmlfont-size 的字体大小来控制 rem 的大小。

  • rem使用示例
    html { font-size: 10px;}.box { width: 10rem; height: 20rem;}
    
    htmlfont-size: 10px; 时,此时 1rem = 10px,所以 box 盒子的宽高分别为:100px 和 200px;
    当我们把 htmlfont-size: 20px; 时,此时 1rem = 20px,此时 box 盒子的宽高就为 200px 和 400px;
    我们通过修改 htmlfont-size 的字体大小来控制 rem 的大小。
  • 优缺点
    • 优点
      兼容性:现代浏览器普遍支持REM单位,因此REM布局具有良好的兼容性。
    • 缺点
      • iframe引用问题:使用iframe引用时,REM布局可能会遇到问题。
      • 高度自适应问题:rem对于高度的自适应不够理想。对于高度和元素间距有特殊要求的设计来说,可能不是一个完美的解决方案。
      • 内容展示问题:随着屏幕尺寸的变化,内容可能不会展示更多或更少,这可能不符合用户期望的体验。

3. 结语

综合以上不同响应式实现方案的优缺点,目前还没有完美的实现方案,可以根据实际的需求选择合适的实现方式。

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

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

相关文章

OpenHarmony开发——Makefile方式组织编译的库移植

以yxml库为例&#xff0c;其移植过程如下文所示。 源码获取 从仓库获取yxml源码&#xff0c;其目录结构如下表&#xff1a; 表1 源码目录结构 名称描述yxml/bench/benchmark相关代码yxml/test/测试输入输出文件&#xff0c;及测试脚本yxml/Makefile编译组织文件yxml/.gitat…

基于机器学习的识别准确率不高问题

识别准确率不高&#xff0c;可能存在以下几个方面的原因&#xff1a; 数据质量&#xff1a;数据集中可能存在错误、不完整或与实际情况偏离的情况。数据清洗和预处理是解决这个问题的关键。 数据不平衡&#xff1a;某些类别的样本过多&#xff0c;而其他类别的样本过少&#x…

sklearn的LabelEncoder 遇到新值的解决办法

问题&#xff1a;sklearn的LabelEncoder函数遇到新值报错 sklearn的LabelEncoder函数&#xff0c;在fit结束后&#xff0c;对dataframe数据进行transform的时候&#xff0c;如果遇到了没在fit时编码规则里的新值&#xff0c;会出现代码报错&#xff0c;不同于spark的LabelEnco…

SQL中的INNER JOIN与笛卡尔积:区别与实例详解

SQL中的INNER JOIN与笛卡尔积&#xff1a;区别与实例详解 引言1. 笛卡尔积&#xff08;Cartesian Product&#xff09;定义与概念结果特点 2. INNER JOIN定义与概念结果特点 3. 区别与比较4. 实例演示5. 总结 引言 在SQL查询中&#xff0c;INNER JOIN和笛卡尔积&#xff08;Car…

【示例】Mybatis-标签学习+Mybatis工作流程

前言 本文主要学习Mybatis相关标签的使用及Mybatis的工作流程。 文中用到的示例&#xff0c;代码存储位置&#xff1a; GitHubhttps://github.com/Web-Learn-GSF/Java_Learn_Examples父工程Java_Framework_Mybatis 基础 示例 | 初始Mybatis 数据库初始化 -- 建表 CREATE…

深入探索自然语言处理:用Python和BERT构建文本分类模型

在当今的信息时代&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术正在改变我们理解和处理自然语言的方式。NLP使计算机能够解读、理解和生成人类语言&#xff0c;从而在多种应用中实现自动化&#xff0c;如聊天机器人、情感分析和文本分类。本文将详细介绍如何使用Py…

Elasticsearch安装、启动异常问题总结

安装es、kibana、ik分词器可参考&#xff1a;http://t.csdnimg.cn/59mEG 1. 内核过低 我们使⽤的是 centos6 &#xff0c;其 linux 内核版本为 2.6 。⽽ Elasticsearch 的插件要求⾄少 3.5 以上版 本。不过没关系&#xff0c;我们禁 ⽤这个插件即可。 修改 elasticsearch.ym…

俄罗斯游戏市场分析与海外营销策略洞察

俄罗斯作为全球十大经济体之一&#xff0c;拥有广阔的游戏市场。以下是对俄罗斯游戏市场的一些关键要素的分析&#xff1a; 人口基础&#xff1a;俄罗斯人口众多&#xff0c;游戏用户群体庞大。根据统计数据&#xff0c;俄罗斯的游戏人口超过7000万&#xff0c;占其总人口的相当…

spring boot整合Redis监听数据变化

一、前言 Redis提供了数据变化的通知事件&#xff0c;可以实时监测key和value的变化&#xff0c;客户端可以通过订阅相关的channel来接收这些通知事件&#xff0c;然后做相应的自定义处理&#xff0c;详细的介绍可以参考官方文档Redis keyspace notifications | Docs 使用Red…

使用element-plus中的表单验证

标签页代码如下&#xff1a; // 注意&#xff1a;el-form中的数据绑定不可以用v-model&#xff0c;要使用:model <el-form ref"ruleFormRef" :rules"rules" :model"userTemp" label-width"80px"><el-row :gutter"20&qu…

一次http访问超时服务器端调试

问题&#xff1a;http访问服务器时没有返回&#xff0c;没有超时&#xff0c;一直在阻塞 处理过程&#xff1a;telnet端口能连上&#xff0c;服务端程序也不存在处理时间过长的情况。 说明tcp连接没问题。推测是客户端连接后再发起请求&#xff0c;服务端阻塞了。因为很多客户…

关于 TDengine 的时区(timeZone)问题

背景 在学习SagooIOT物联网平台使用docker部署TDengine时序数据库&#xff0c;根据时间戳&#xff08;timestamp&#xff09;ts查询上报设备数据时 发现结果跟查询条件不匹配。查询问题原因竟然是timezone时区设置问题。 查询数据结果&#xff1a; 查看容器时区&#xff1a; …

分类算法——sklearn转换器和估计器(一)

转换器&#xff08;特征工程的父类&#xff09; 实例化&#xff08;实例化的是一个转换器类&#xff08;Transformer&#xff09;&#xff09;调用fit_transform&#xff08;对于文档建立分类词频矩阵&#xff0c;不能同时调用&#xff09; 把特征工程的接口称之为转换器&…

什么是跨域?

跨域&#xff08;Cross-Origin&#xff09;指的是在Web开发中&#xff0c;一个网页的资源&#xff08;例如脚本、样式表、图片等&#xff09;请求另一个源的资源时&#xff0c;两个源的协议、域名或端口不相同。简单来说&#xff0c;当浏览器试图从一个源加载来自不同源的资源时…

当你的项目体积比较大?你如何做性能优化

在前端开发中&#xff0c;项目体积优化是一个重要的环节&#xff0c;它直接影响到网页的加载速度和用户体验。随着前端项目越来越复杂&#xff0c;引入的依赖也越来越多&#xff0c;如何有效地减少最终打包文件的大小&#xff0c;成为了前端工程师需要面对的挑战。以下是一些常…

汽车咨询|基于SprinBoot的汽车资讯管理系统设计与实现(源码+数据库+文档)

汽车资讯管理系统目录 基于SprinBoot的汽车资讯管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff…

npm 切换成淘宝源,以及遇到npm 报错如何解决

淘宝源&#xff1a;npm config set registryhttps://registry.npmmirror.com/ 然后再npm下 package-lock.json这个删了 npm i再试一下

MySQL——创建和插入

一、插入数据 INSERT 使用建议; 在任何情况下建议列出列名&#xff0c;在 VALUES 中插入值时&#xff0c;注意值和列的意义对应关系 values 指定的值顺序非常重要&#xff0c;决定了值是否被保存到正确的列中 在指定了列名的情况下&#xff0c;你可以仅对需要插入的列给到…

【已解决】VMware Horizon Client: 无法建立安全加密链路连接

文章目录 问题原因解决方法方法1&#xff1a;在HTTPS拦截中添加VMware忽略列表 (推荐)方法2&#xff1a; 只拦截 浏览器进程的请求 / 取消 HTTPS 拦截&#xff08;如果没有拦截HTTPS的必要 / 只针对浏览器请求&#xff0c;可以使用此方法&#xff09; 当前使用mac 编辑&#xf…

Vue中$attrs的作用和使用方法

Vue中$attrs的作用和使用方法 1. 使用场景举例2. 官方解释3. 使用示例 $attrs是 vue2.4.0版本以上新增的属性&#xff1b; 1. 使用场景举例 假如我们现在要二次封装一个组件&#xff0c;我们需要把当前组件获取到的所有的props都传递给子组件&#xff0c;我们可以在当前组件中…