CSS “对象”是重复的视觉模式,可以抽象为HTML,CSS以及可能的JavaScript 的独立代码段。然后可以在整个站点中重复使用该对象. OOCSS的两个主要原则:
结构与皮肤分开. 这意味着将重复的视觉特征(例如背景和边框样式)定义为单独的“皮肤”,您可以将它们与各种对象混合搭配,从而无需太多代码即可实现大量的视觉多样性。将结构和外观分开也可能意味着使用类来命名我们的对象及其组件,而不是仅依赖于HTML的语义。例如,媒体对象用命名class="media",其组件用class="img"(对于图像/视频组件)和class="bd"(对于正文/文本组件)命名。
容器和内容分开. 本质上,这意味着“很少使用与位置相关的样式”。无论放置在何处,对象都应该看起来相同。因此,不要使用样式特定对象,而是.myObject h2 {...}创建并应用描述问题的类,例如class="book"。这样可以保证:(1)所有未分类的标签看起来都一样;(2)所有具有类别的元素(称为mixin)将看起来相同;(3)当我们想.myObject h2看起来像法线的情况下,无需为这种情况创建替代样式。
可重用,减少CSS代码体积
选择器简洁易懂
可扩展,可组合,灵活度更大
风格与内容分离,内容与容器分离
更具有语义化,可以独立成库
BEM代表块(Block),元素(Element),修饰符(Modifier)。
块 是页面中独立存在的区块,可以在不同场合下被重用。每个页面都可以看做是多个Block组成。
元素 是构成Block的元素,只有在对应Block内部才具有意义,是依赖于Block的存在。
修饰符 是描述Block或Element的属性或状态。同一Block或Element可以有多个Modifier。
风格如下:
.header-card__title {
}
.header-card__active {
}
解决了命名空间的问题
更易懂,方便团队协作开发
更易于维护
方案一: 使用OOCSS模式,通过js动态切换公共类名来达到换肤效果
方案二: 点击不同的按钮切换不同的样式表,如下:
theme-green.css
theme-red.css
theme-black.css 方案三: localStorage存储主题,js动态获取本地存储换肤 方案四: element和antd的动态换肤,需要实时编译style样式表
let getRadomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min
function swap(a , b) {
[a, b] = [b, a]
return [a,b]
}
// 在async环境下可以使用sleep实现类似后端的睡眠函数功能
const sleep = (timeout, data) => {
return new Promise(resolve => {
setTimeout(() => {
resolve(data)
}, timeout)
})
}
[参考答案]
防抖
在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时
function debounce(fn, interval = 300) {
let timeout = null
return function () {
clearTimeout(timeout)
timeout = setTimeout(() => {
fn.apply(this, arguments)
}, interval)
}
}
节流
规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效
function throttle(fn, interval = 300) {
let canRun = true
return function () {
if (!canRun) return
canRun = false
setTimeout(() => {
fn.apply(this, arguments)
canRun = true
}, interval)
}
}
实现思路如下:
建立焦点图和控制点的对应关系
初始化页面时只让第一个焦点图有宽度,其他宽度都设置为零,当控制点激活时,然控制点对应的目标对象的宽度设置为正常值,其他的非目标对象都设置为零
给焦点图添加transition过渡动画
优化焦点图和控制点样式
1. 用javascript和css实现一个九宫格抽奖游戏
参考答案: 用60行代码实现一个高性能的圣诞抽抽乐H5小游戏(含源码)
2. 实现一个滑动验证码(待定,后续会给出完整答案,如果有实现的小伙伴,可以在群里分享回复哦)
知识汇总系列推荐
web性能优化的15条实用技巧
用60行代码实现一个高性能的圣诞抽抽乐H5小游戏(含源码)
前端必不可少的Git使用技巧
《javascript高级程序设计》核心知识总结
前端开发中不可忽视的知识点汇总(一)
css3实战汇总(附源码)
让你瞬间提高工作效率的常用js函数汇总(持续更新)
欢迎关注下方公众号,获取更多前端知识精粹和加入学习社群:
回复 Webpack,可获得 用webpack4.0撸单页/多页脚手架思维导图
回复 lodash,将获得 本人亲自翻译的lodash API中文思维导图
回复 学习路径,将获取 笔者多年从业经验的前端学习路径的思维导图
趣谈前端
Vue、React、小程序、Node
前端 算法|性能|架构|安全