兼容

pc web:比如 MA Station。基于chrome,可以手机访问(需要业务做适配)。 android 上兼容 微信浏览器 和 QQ浏览器,safari 支持 iOS > 8(safari 的版本随系统版本)。比较任性。

mobile web:比如 下单系统。主要在微信浏览器内访问。

safari 的兼容测试可以用 mac 自带的模拟器 simulator 来测试,非常方便。

bootstrap

基于老牌的 bootstrap,相对简单易用。v4 现在还在 beta 中,如果正式了还是可以考虑迁移的。或者 beta 阶段迁移。

less

因为 bootstrap3 是 less ,移动端基于所以也就用了 less, 实际上 sass 更强大。bootstrap4 也采用了 sass。等迁移到 bootstrap4 后我们也会采用 sass 的,就是这么任性。

less 函数有个特性有点奇怪,我用过,不过不具备可维护性,不建议大家用。

// 正常情况.fun1(){background: red;
}.aaa{.fun1();
}
// 一个类名也可以当函数用,不建议用
.class1{background: red;
}.aaa{.class1();
}

flex

web 开发都是基于 flex 的,这给我们的布局很大的方便,非常的灵活,可以很简单的。

上面系统的整体兼容性也基本是考虑 flex 的兼容上。

要特别注意的地方是 flex-shrink 即项目的缩小比例,默认为1,即如果空间不足,该项目缩小。 但是不推荐直接操作 flex-shrink,而是用 flex: none 或者 flex: auto。

移动端高清屏1px

框架用的方法是 scale(0.5) 方法。不过多介绍,(网上文章很多)[https://juejin.im/entry/584e4...

命名

没有前缀的 btn 是 bootstrap,前缀 gm- 是 react-gm 库的。 b- 是 业务内的。(连接符-)

模块内部的命名保留模块,即

// good 长是长了点,但是可维护性可读性很强
.b-home{.b-home-top{background: red;.b-home-top-btn{background: white;}}
}
// bad 因为可能其他库有定义了 top 这个样式。 这样就会有被覆盖的可能性。
.b-home{.top{background: red;}
}

特殊的类名除外,比如 disabled checked error in out on off 等除外。

.b-home{.b-home-top{.disabled{background: gray;}}
}

less 变量命名同上,只是换成了骆驼峰,去掉了连接符

命名上有个出名的 BEM ,不了解,哈哈。

组合思想

目标是开发者想实现什么样式,通过 react-gm bootstrap 提供的类名来组合即可,这要求他们提供的类名足够丰富。当然这个想法已经满足了。

至于可能会出现某些场景不满足的(肯定会有),做法是

1 是否场景不合理?也可能是故意约束,克制,不提供此功能。
2 提出来讨论,共同抽象,沉淀到 react-gm 上。
3 实在特殊的就特殊处理,直接写在style上。

那组合思想是,其实 bootstrap 也是组合思想

<div className="gm-border gm-padding-5 gm-bg"></div><btn className="btn btn-primary btn-lg disabled"></div>

组合思想带来的好处是

1 可读性和可维护性增强,通过 className 能想象出 UI。
2 速度快,直接写 jsx 即可。 不用来回切换 js/html css 文件。

分离css

以前 css 是通过 webpack 打包在 js 内的,这样带来的坏处是

  • js 要处理这些 css,自然需要花费时间。同时还阻塞其他 js 代码的执行时间。
  • 按照组合思想开发,理论上 css 会很少改动,js 确实常改动。这样 css 没法独立缓存。
  • 如果有 dom 的话,会是先 dom 出来,之后加载 js 处理 css 部分。这时会看到页面没样式,突然又有样式的闪烁,不太好。理论上 css 最好释放 head 提前 load。

所以就分离了呗。

降级处理

通过 autoprefixer 来做降级,比如

// 原来
display: flex;// 处理后
display: -webkit-box;
display: -webkit-flex;
display: flex;

细心的同学可以发现,只有 -webkit-,没有 -ms- -moz- -o-。从兼容性上来考虑,只处理 -webkit- 已足够。

css module

有短时间引入了 css module,不过现在用的很少了。 当成的目的是 css module 模块化,但是带来了一些问题

  • css(less) 模块化后随 js 的引入而引入,css 即异步加载的
  • 以此同时 less 并没有在主框架上,因此没法使用 变量 函数 等。

于是慢慢废弃。

随着 react-gm 提供的类名组件完善,后面真正用到 css module 的地方少之又少。 所以后面 css module 是会被废弃掉的。

react-gm.min.css

以前 react-gm 是提供 dist 文件的,即 js 和 css。这样在开发 Station 系统的时候没有问题。

但是 MA 要求换种颜色主题,那么就需要和 bootstrap 一样,提供一个 theme.css 的文件。 要抽出这 part 需要进行改造,工作量是挺大的。

后来 react-gm 废弃了 dist 形式,直接引入 src 的 index.js 和 index.less 文件。

库的 css 怎么引进来

基于上点

// ma index.js
import 'react-gm';
import './index.less'// ma index.less 覆盖主题色变量即完成换主题
@brand-primary: #2c9feb;// react-gm index.js
import './index.less'// react-gm index.less
@import "less/bootstrap.less";

浮层管理

这个话题也可以说 浮层的管理。开发者越少关心 z-index 越好,组件提供了封装。 当然就需要框架考虑的东西更多了。

层级大致是

  • 正常的文档流 1
  • modal 1000
  • tip 9999

另外 modal 衍生出来的 Dialog 形态即对话框,要求只有一个。不能出现弹窗中有弹窗。 技术上可以做到弹窗有弹窗,但克制,不提供相应的能力。

position fixed

移动端是禁用 position:fixed 的,不过多介绍 http://efe.baidu.com/blog/mob...

vm vh rem px

我个人是比较倾向于用 px 的。因为很简单,切和 pc web 的开发习惯一致,也是大家开发网页的默认单位。无须什么转换成本,上手就来。

当然如果是设计驱动的公司,要求高保真还原设计稿,就不太一样了,会考虑用 rem 方案。 基于兼容性考虑,我们可以直接用 vm vh。http://www.w3cplus.com/css/vw...

btw,个人还觉得 rem 在执行上很麻烦,也有对 rem 不了不深的原因。

毛玻璃

场景是对话框弹起来的时候背景出现毛玻璃效果。

这里的关键是 背景的 dom 和 对话框 不能是 包含关系,然后对背景 dom 做 filter:blue(2px)。 只要管理好 对话框的 dom 即可。

另外关键是,背景 dom 什么时机设置 filter,什么时候取消 filter。 于是引入了事件。 对话框 弹起 关闭都发出事件通知到 背景 dom 即可。

框架层架构

框架层采用了 flex 布局,给了指定区域做业务,业务只需也只能关心该区域,不能干扰其他区域,如需,需要讨论商量好。

业务区域做内滚动,这 part 其实不太好,后面想重构掉。 不好的地方有,1 滚动只要指定 dom 非 document.body。 2 跟随 dom 的弹窗不好做,需要计算位置。

css3

由于浏览器的环境很良好,所以可以尝试很多 css3 的特性,也不一定是 css3,大致意思是可以用上很多高级的功能。 比如 calc、filter 等。

图标

坚决不采用 img 来做图标。 采用 iconfont ,我们的字体托管在 iconfont.cn 平台。 iconfont 只能做单色,多色等不复杂的图片。如果满足不了则考虑 css3 或者 svg 方向。

从观麦前端框架的角度看css相关推荐

  1. GitChat·前端 | 从软件工程角度看大前端技术栈

    GitChat 作者:韩亦乐 前言 我们都知道,大学几乎是没有 Web 前端课的.以我所在的大学为例,唯一引导我们了解 JavaScript 的也只是'人机界面'和'Web应用开发'选修课.再者,由于 ...

  2. Web前端框架(JavaScript,CSS)、html组件、CSS规范与第三方库

    1.什么是前端框架 前端框架一般指用于简化网页设计的框架,使用广泛的前端开发套件,比如,jquery,extjs,bootstrap等等,这些框架封装了一些功能,比如html文档操作,漂亮的各种控件( ...

  3. 原生js-js类库-js框架-前端框架-区别

    原生js-js类库-js框架-前端框架-区别 1.原生js就是javascript ,也是网站前端核心内容,主要操作流程是,先获得DOM或切换DOM,然后修改DOM对象的属性或调用DOM对象的方法,存 ...

  4. 从软件工程角度看大前端技术栈

    从软件工程角度看大前端技术栈 优秀人才不缺工作机会,只缺适合自己的好机会.但是他们往往没有精力从海量机会中找到最适合的那个. 100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「 ...

  5. 从前端角度看网页渲染慢的原理及解决方案

    从前端角度看网页渲染慢的原理及解决方案 参考文章: (1)从前端角度看网页渲染慢的原理及解决方案 (2)https://www.cnblogs.com/joyho/articles/4455893.h ...

  6. 知乎问答:一年内的前端看不懂前端框架源码怎么办?

    知乎问答:一年内的前端看不懂前端框架源码怎么办?以下是我的回答,阅读量 1000+.现在转载到微信公众号中.链接:https://www.zhihu.com/question/350289336/an ...

  7. Turbopack 很火? 那么就从前端角度看 Rust

    关于 Rust rust 是一门强类型的.编译型的.内存安全的编程语言.最早版本的 Rust 原本是 Mozilla 基金会的一名叫 Graydon Hoare 的员工的私人项目,2009 年开始,M ...

  8. 看一看:不同Web前端框架的优缺点分别是什么?

    移动互联网的快速发展,多屏互动和多端兼容友好的界面成为目前所有系统重要的需求,Web前端开发工程师成为目前市场紧俏.火爆的人才.正在从事Web前端工作的小伙伴们一定不会对Web前端框架陌生,那么这么多 ...

  9. 从Java的角度理解前端框架,nodejs,reactjs,angularjs,requirejs,seajs

    从Java的角度理解前端框架,nodejs,reactjs,angularjs,requirejs,seajs [前端神秘的面纱] 对后端开发来说,前端是神秘的, 眼花缭乱的技术,繁多的框架, 如果你 ...

最新文章

  1. 接口抽象类继承父类和子类
  2. android通讯录上传服务器,Android 实现读取通讯录并上传服务器
  3. ajax 获取java数据_如何使用Ajax从服务端获取数据
  4. 02-HTTP的请求方法以及响应状态码
  5. Boostrap技能点整理之【bootstrap简介】
  6. 二维数组中最大连通子数组
  7. 浅析gcc、arm-linux-gcc和arm-elf-gcc的关系-转
  8. BZOJ.4650.[NOI2016]优秀的拆分(后缀数组 思路)
  9. POJ3275 Ranking the Cows【关系闭包】
  10. mysql source超时_mysql数据库连接超时
  11. 12. jQuery - 获得内容和属性
  12. 图形学笔记1.直线扫描转换与devC的图形库ege扩展
  13. 网络安全审计系统产品竞品分析
  14. 清风数学建模学习笔记——TOPSIS法(优劣解距离法)
  15. Verilog语法概述(一)
  16. Nginx服务器的gzip压缩详解
  17. 诺贝尔奖得主纳什夫妇因车祸去世
  18. 苟富贵倒萨忽然他确实
  19. Object类九大方法之notify和notifyAll方法
  20. 3D-2D三维重建:PnP

热门文章

  1. 牛客小黑月赛42---白字打不出来
  2. 感恩前行 秀兰集团成立22周年庆典举办
  3. No symbol table is loaded. Use the “file“ command
  4. golang_获取文件属性: os包中os.Stat的用法介绍
  5. mbr、gpt、grub4、efi 形象理解
  6. MinGW/MSYS development environment
  7. 计算机技术应用论文范文,计算机技术应用论文2400字_计算机技术应用毕业论文范文模板.doc...
  8. Cloneable接口
  9. 【Java SE】基本数据类型
  10. java nullable注解_【Java】idea @NotNull @Nullable 注解