JS in CSS:一键支持响应式布局

news2025/1/15 13:09:37

前言

如今网速不再成为适配移动端时选择响应式设计的限制因素,在资源充足的条件下,针对各端各自设计应用界面能达到应用最佳用户体验,毕竟不同类型的设备交互体验是不同的,但在团队前端资源拮据时,相比无脑自适应,响应式设计自然是最为经济适用的。

JS in CSS 与响应式

我们见过很多 CSS 特性 Polyfill 库是由 JS 编写的,却几乎没有反过来的情况,多数时候新特性出现的兼容问题,CSS 新特性必须等待浏览器厂商的跟进和用户自己本地升级来解决,而 JS 很容易利用特性判定的方式为不支持的内容做兼容,甚至是 JS 新语法都可通过各种工具编译到 ES5 来支持,其能力的边界远非 CSS 可及。

就拿近期大家最为期待的容器查询特性 @container 来说,这相比之前屏幕查询适配的方式更加灵活了,无疑是下一代响应式页面设计的利器,按惯例打开 caniuse 看下:

离大规模应用还有些距离。然而用 JS 的同等实现不过分分钟的事情,iofod 里仅需新建一个状态表达式借助模型变量实现:

default:$parentWidth < 800 

响应式拓展

回到主流的响应式方案上,CSS 媒体查询也有不少毛病,容器查询普及后估计情况能得到改善(附带一波新语法~),于此同时,JS in CSS 表示一切正常,它的起点就是 CSS 未来的努力终点(误)。那么 JS in CSS 的方案如何支持主流方案的呢?

当下媒体查询基于屏幕去适配,因此我们首先需监听屏幕窗口的变动,保存屏幕尺寸值,接着在表达式里引用它们去计算即可。比如我们把屏幕值保存到 device 的模型变量 vw, vh 上,接下来我们响应屏幕的值去改变样式,如:

default:$vw<device> <= 1024
default:$vh<device> > 500 

当然,CSS 媒体查询避免不了的样板代码,JS in CSS 也避免不了,我们适配多少类屏幕就需要多少条查询表达式:

default:$vw<device> <= 1920
default:$vw<device> <= 1440
default:$vw<device> <= 1024
default:$vw<device> <= 768
default:$vw<device> <= 425
default:$vw<device> <= 375 

写模板代码不可避免,但工程师的偷懒天性阻止你这么干,我们需要工具生成这些!来来来接下让我们欢迎今天的女主——响应式布局工具闪亮登场!搭配 JS in CSS 一键生成响应式模板,结合工具内置的视口切换功能,快速获得反馈快速修正样式。

安装与使用

响应式布局拓展默认添加到 iofod 拓展区,假如你是老用户或者还没安装该拓展的用户,可在 iofod 编辑器里点击超级菜单里的【拓展管理】按钮唤起拓展管理面板,点击【添加拓展】,搜索关键词【响应式】:

点击搜索结果进去,即可看到拓展详情界面,点击【安装拓展】,

关闭拓展管理面板,可以发现响应式布局拓展已经添加到右下角的拓展区里。

需要注意的是,默认只有 PC 类型的项目才支持响应式设计(当然你可以通过定制移动端模板去支持,但一般只建议用于 PC 模板),我们点击开启响应式布局拓展,点击【应用响应式】为当前项目开启响应式功能:

可以看到,拓展内置了多个断点条件,与 CSS 媒体查询的条件断点是类似的,我们选择需要适配的尺寸范围即可。

紧接着,选中需要应用响应式设计的目标组件,再点击【生成模板】为当前组件生成响应式状态模板。组件的状态面板已经根据我们配置的范围生成子状态,接下来根据实际需要调整状态模板:

一般,我们根据刚刚的断点范围,在脑海里初步给出各个断点状态的数值,只需要有个大概范围就行不要求很准确,接下来通过不同视口下的表现去调整或者理想的数值,我们点击拓展的【视口】菜单,该栏目列出了常用的设备视口,点击即可切换当前视口大小为所选设备的尺寸:

案例:知乎的适配

接下来我们以知乎电脑版首页为例实战多端适配(PC,平板以及手机三端适配)。

首先,新建项目,将电脑版首页剔除无关元素,主体内容用 iofod 配合 Material UI 拓展实现:

接着点击【应用响应式】为当前项目开启响应式功能,选择如下基础断点条件:

需要注意的是,断点条件的选择不是固定这几个,有些组件的适配只需要一个,有些则需要四个或以上才能很好适配,我们需根据实际情况调整。为了快速定位应用响应式的组件,在右下角的使用习惯-界面设置配置开启【标记响应式组件】选项即可在结构栏目标记这些组件,

我们分别对顶部导航的所有子组件以及左右两栏应用响应式模板,修改模板状态的样式属性,利用响应式拓展来回切换视口微调它们,这里同样根据实际需要切换视口,调整完成后三端最终的适配效果如下:

  • 桌面电脑/笔记本
  • 平板电脑
  • 手机

不妨自己动手试试呗,前往【项目主页】查看实现细节。

结语

媒体查询,弹性布局和相对布局的综合运用构成了响应式设计的三板斧,iofod 利用 JS in CSS 把它们应用范围从 Web 拓展到全平台,于此同时向后兼容新响应式设计。JS in CSS 与模块化 CSS,CSS in JS 一样都属于一种弥补原生 CSS 缺陷的方法论,目前我们在低代码领域应用实践取得不少经验,未来尝试引入到传统开发链路中,以框架或打包工具插件的形态面世,敬请期待~


最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

基于Java+jquery+SpringMVC校园网站平台设计和实现

基于JavajquerySpringMVC校园网站平台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联…

临时白名单

临时白名单介绍 相关常量 临时白名单列表介绍 前两个临时白名单可以豁免后台启动Service、豁免uid后台1min后进入idle状态等&#xff0c;最后一个临时白名单可以后台启动FGS。 // 由于高优先级消息而暂时允许逃避后台检查的一组应用程序 ID&#xff0c;短信/彩信 Composite…

【Vue路由】路由守卫、生命周期钩子、路由器工作模式

文章目录生命周期钩子案例实现总结路由守卫全局路由守卫独享守卫组件内守卫总结路由器的两种工作模式总结生命周期钩子 我们在News组件列表中的第一行加一个渐变文字。同时原来的路由缓存功能也要保存。 案例分析&#xff1a; 我们实现这个渐变的效果&#xff0c;是使用周期定…

Go select底层原理

在对Channel的读写方式上&#xff0c;除了我们通用的读 i <- ch, i, ok <- ch&#xff0c;写 ch <- 1 这种阻塞访问方式&#xff0c;还有select关键字提供的非阻塞访问方式。 在日常开发中&#xff0c;select语句还是会经常用到的。可能是channel普通读写的使用频率比…

基于Node.js和vue的博客系统的设计与实现

摘要随着互联网技术的高速发展&#xff0c;人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以在线发布博客文章&#xff0c;简单、快捷的方便了人们的日常生活。同样的&#xff0c;在人们的工作生活中&#xff0c;也需要互联网技术来…

【Java寒假打卡】Java基础-日期类对象

【Java寒假打卡】Java基础-日期类对象Date概述Date类常用成员方法SimpleDateFormat案例:秒杀活动案例&#xff1a;在当前时间加上一天时间JDK8新增日期类获取时间中的一个值LocalDateTime转换方法LocalDateTime格式化和解析LocalDateTime 增加或者减少时间的方法修改时间的方法…

【JAVA程序设计】(C00099)基于SpringBoot的外卖订餐小程序(原生开发)

基于SpringBoot的外卖订餐小程序&#xff08;原生开发&#xff09;项目简介项目获取开发环境项目技术运行截图项目简介 基于SpringBootvue开发的原生外卖点餐微信小程序&#xff0c;包括用户小程序登录以及网页端的商家登录。本系统分为三个权限&#xff1a;商家、用户和游客&…

第七章.机器学习 Scikit-Learn—最小二乘法回归,岭回归,支持向量机,K_means聚类算法

第七章.机器学习 Scikit-Learn 7.1 Scikit-Learn简介 Scikit-Learn简称(SKlearn)是Python的第三方模块&#xff0c;是机器学习领域当中知名的Python模块之一&#xff0c;对常用的机器学习算法进行了封装&#xff0c;包括回归(Regression)&#xff0c;降维(Dimensionality Redu…

地质灾害监测预警系统构成,功能,监测设备介绍

平升电子地质灾害监测预警系统&#xff0c;应用平升物联网遥测终端机、专业测量仪器和传感设备、预警广播设备、地质灾害监测预警平台&#xff0c;基于4G/5G/NB-IoT/LoRa/光纤/北斗卫星通信网络&#xff0c;实时在线监测地质灾害隐患点的地表位移、地表裂缝、深部位移、降雨量、…

Simulink-过零检测与代数环

过零检测过零检测即通过Simulink为模块注册若干过零函数&#xff0c;当模块变化趋势剧烈时&#xff0c;过零函数将会发生符号变化。每个采样点仿真结束时&#xff0c;Simulink检测过零函数是否有符号变化&#xff0c;如果检测到过零点&#xff0c;则Simulink将在前一个采样点和…

院内导航方案怎么样,低成本的智慧医院室内导航一站式解决方案

很多智慧医院的方案里都提到了院内导航&#xff0c;它俨然已经成为智慧医院套餐中的“招牌菜”&#xff0c;甚至被打上了“导航神器”的绰号&#xff0c;其中电子地图作为大家最喜闻乐见的高效应用形式&#xff0c;可以高效的为病患提供导医服务&#xff0c;实现院内导航功能&a…

集群多机ROS通信中间件:swarm_ros_bridge

最近写了一个无线网络环境下&#xff08;比如WIFI&#xff09;多机ROS通信的项目swarm_ros_bridge&#xff1a; https://gitee.com/shu-peixuan/swarm_ros_bridge A lightweight middle interface that enables specified ROS message transmission among swarm robots throu…

国内出海企业常见的跨境网络问题分析及解决方案

经济全球化趋势发展得如火如荼&#xff0c;越来越多的中国企业走出国门&#xff0c;兴起包括跨境电商、虚拟商品、游戏出海等新贸易形式。但在业务开拓过程中&#xff0c;由于远距离传输的特殊性&#xff0c;出海企业经常面临网络传输慢、不稳定、延迟、掉线等网络问题&#xf…

0基础如何开始学习计算机知识?

一、计算机的基本操作 计算机中只有文件和文件夹 计算机中&#xff0c;只有两样东西&#xff0c;文件和文件夹。 文件夹&#xff1a;本身不存储数据内容。文件夹是用来组织和管理文件的。 文件&#xff1a; 所有的txt文本文档&#xff0c;音乐&#xff0c;视频&#xff0c;图…

2022年国外LEAD收入情况

欢迎关注勤于奋每天12点准时更新国外LEAD相关技术这个收入情况&#xff0c;最喜欢关心&#xff0c;最喜欢看的人应该是新手和观望的人最想知道的&#xff0c;LEAD收入只要操作了&#xff0c;赚钱肯定是没问题&#xff0c;我一直这样说&#xff0c;而且我公众号叫勤于奋&#xf…

【Spring(四)】万字详解bean的实例化

文章目录前言1.bean实例化1.1 bean的基础配置1.2 bean的实例化-构造方法1.3 bean的实例化-静态工厂1.4 bean的实例化-实例工厂与FactoryBean总结前言 在上篇文章&#xff0c;我们已经完成了入门案例的学习&#xff0c;在入门案例中&#xff0c;我们讲了三块东西&#xff0c;首先…

《Kotlin核心编程》笔记:函数和Lambda表达式

高阶函数和lambda表达式 函数式语言⼀个典型的特征就在于函数是头等公民——我们不仅可以像类⼀样在顶层直接定义⼀个函数&#xff0c;也可以在⼀个函数内部定义⼀个局部函数&#xff0c;如下所示&#xff1a;所谓的高阶函数&#xff0c;你可以把它理解成“ 以其他函数作为参数…

Debian10,docker单机安装ThingsBoard-3.3.2

1.编译项目源码 源代码编译ThingsBoard-3.3.2 2.环境准备 修改ssh登录配置 sudo vi /etc/ssh/sshd_config 打开密码登录和root用户登录3.安装docker 更新apt sudo apt update安装必备软件 sudo apt install apt-transport-https ca-certificates curl gnupg2 software-p…

SpringBoot异步方法(官方案例)

在线文档项目结构 1.源码克隆&#xff1a;git clone https://github.com/spring-guides/gs-async-method.git 2.包含两个项目initial和complete&#xff0c;initial可以根据文档练习完善&#xff0c;complete是完整项目 3.功能描述&#xff1a;构建查找服务&#xff0c;异步查询…

Linux搭建Docker版FTP,命令与Dockerfile两种方式以及容器编码解决

Linux搭建Docker版FTP&#xff0c;命令与Dockerfile两种方式以及容器编码解决一、Linux搭建Docker版FTP二、修改 Docker 容器内部 locale 系统编码最终待实现效果&#xff0c;这个方式容器内部编码并未永久改变三、编写Dockerfile方式加载带UTF-8编码环境的镜像3.1Dockerfile构…