当前位置: 首页 > news >正文

css 右上角 翻开动画_「冷知识」为什么不要随意操作 CSS?

在WEB开发中,HTML负责网页的结构,CSS负责网页上各个元素的展示样式,JS则负责网页和用户的交互。想要成为一名优秀的前端工程师,首先要做的就是遵守这三者各司其职的原则,让我们的代码易于维护和扩展。

33a5f829a168fa14742856f567ff5b41.png

但是,有时候我们常常一不小心就破坏了这个原则。又或者,我们为了实现业务需求,根本不管这个规则。这都会导致我们的代码结构混乱,维护困难。

比如,我们有一个任务,它的具体需求是这样的:给一个网页实现一个深色系和浅色系主题的切换,以使得在夜晚访问这个网页的读者能够使用“夜间模式”。

这个网页的HTML大概是这样的:

  深夜食堂    

深夜食堂

012f313549dd698bbbc4dccbbbf31bff.png

这是一间营业时间从午夜十二点到早上七点的特殊食堂。这里的老板,不太爱说话,却总叫人吃得热泪盈 眶。在这里,自卑的舞蹈演员偶遇隐退多年舞界前辈,前辈不惜讲述自己不堪回首的经历不断鼓舞年轻人,最终令其重拾自信;轻言绝交的闺蜜因为吃到共同喜爱的美食,回忆起从前的友谊,重归于好;乐观的绝症患者遇到同命相连的女孩,两人相爱并相互给予力量,陪伴彼此完美地走过了最后一程;一味追求事业成功的白领,在这里结交了真正暖心的朋友,发现真情比成功更有意义。食物、故事、真情,汇聚了整部剧的主题,教会人们坦然面对得失,对生活充满期许和热情。每一个故事背后都饱含深情,情节跌宕起伏,令人流连忘返 [6] 。

现在的页面,在手机上看起来是这样的效果:

cbf22fdad09a811fc8ea12d78765ce7b.png

需求是当用户点击网页右上角的太阳图标时,将网页变为深夜模式,即用深色背景、浅色字体来显示网页内容,同时太阳标记变为月亮标记。

这个任务很简单,你可能非常快的就写出以下代码:

const btn = document.getElementById('modeBtn');btn.addEventListener('click', (e) => {  const body = document.body;  if(e.target.innerHTML === '') {    body.style.backgroundColor = 'black';    body.style.color = 'white';    e.target.innerHTML = '';  } else {    body.style.backgroundColor = 'white';    body.style.color = 'black';    e.target.innerHTML = '';  }});

这个代码当然是可以work的。

这是点击按钮后切换的网页呈现效果:

43ba5186e13a1c582f2d007f6762ff47.png

看起来,我们完美地实现了产品的需求,可以交差了。但是实际上,上面的代码存在以下三个问题:

  1. 对于其他不了解需求的同事,阅读这段代码能够直接理解这个按钮按下的含义吗?
  2. 如果产品需求变更,要求用深灰色背景、浅黄色文字来显示夜间模式,JS代码可以避免修改吗?
  3. 如果要给切换过程增加动画效果,能方便添加吗?
4d6536b943e84cb27772c49739fe1969.png

那么,我们怎么实现以上需求更好呢?

大家可以思考一下,然后给我们留言。

以上内容的答案,在《前端进阶十日谈》中有详细描述哦。

2fee93aa1f18649a246761b29e3fbd2a.png

相关文章:

  • 熊出没机器人光头强_《熊出没》五大兵器,天才威与光头强的战斗机器人谁更厉害?...
  • 北邮 复习 软件工程_重磅!厦大、北邮改考408!反向抄底厦大,面朝大海?
  • ambari hdfs 启动报错_HDFS这些问题你会处理吗?
  • cvc 降噪_耳机降噪技术-ANC、ENC、DSP、CVC
  • 怎么看mmdetection版本_kaggle notebook运行mmdetection并提交结果采坑记
  • matlab hsi图像分割_图像分割之阈值分割(matlab)
  • imx6 配置串口波特率_STM32F103 串口的使用方法
  • 十天征服单片机百度云_单片机学习「1」 初始51单片机
  • jpa删除数据后数据库无修改_Java编程第46讲——强大、奇妙的数据库操作工具JPA...
  • 有赞小程序源码_有赞小程序商城怎么开通,如何收费?
  • docker pycharm 连接_七、连Pycharm都不知道怎么用,学什么Python
  • github图片_通过这个 Go 项目搭建一个图片服务器竟然这么简单
  • pecs_神奇的PECS是什么?看看BCaBA教师们怎么说
  • 仿生蛇类机器人 特点_仿生科技成为机器人技术发展最快的领域之一
  • ue4 曲线图实现 蓝图_UE4[蓝图]只需一秒!最速实现【二段跳】
  • ----------
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【node学习】协程
  • 【翻译】babel对TC39装饰器草案的实现
  • 11111111
  • 5、React组件事件详解
  • CentOS6 编译安装 redis-3.2.3
  • ECMAScript入门(七)--Module语法
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • JavaScript学习总结——原型
  • Js基础——数据类型之Null和Undefined
  • Laravel 菜鸟晋级之路
  • React+TypeScript入门
  • 产品三维模型在线预览
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 前端_面试
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 如何利用MongoDB打造TOP榜小程序
  • 使用权重正则化较少模型过拟合
  • 写代码的正确姿势
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • hi-nginx-1.3.4编译安装
  • postgresql行列转换函数
  • 阿里云ACE认证学习知识点梳理
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • $refs 、$nextTic、动态组件、name的使用
  • (1)(1.13) SiK无线电高级配置(六)
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (3)(3.5) 遥测无线电区域条例
  • (C语言)字符分类函数
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (六)c52学习之旅-独立按键
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)基于IDEA的JAVA基础1
  • (转)setTimeout 和 setInterval 的区别
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ... 是什么 ?... 有什么用处?