在当今快速迭代的Web开发领域,构建可维护、可扩展且适应性强的用户界面成为了每个前端工程师面临的挑战。随着项目规模的扩大和团队成员的增加,如何确保代码的一致性、提升组件的重用率,以及加快新成员的融入速度,成为提升开发效率的关键因素。正是在这样的背景下,BEM(Block Element Modifier)这一革命性的前端开发方法论应运而生。
BEM(Block Element Modifier)是一种前端开发中用于组织CSS类名的命名约定,由Yandex公司提出。该方法论旨在提高代码的可维护性、可扩展性和团队协作效率,尤其适用于大型项目和组件化开发。BEM的核心理念围绕着三个基本概念展开:
这一模块是抖音应用中的常用功能(function),所以我们可以命名为dy-fc
总体布局可以分为上下两部分,我们可以将顶部模块当成头部命名为dy-fc__hd
而下面的各个功能的模块我们当作身体命名为dy-fc__bd
将顶部模块中的标题模块命名为dy-fc__title
将下面每个功能模块命名为dy-fc__item
<div class="dy-fc">
<div class="dy-fc__hd">
<span class="dy-fc__title">常用功能</span>
</div>
<div class="dy-fc__bd">
<a href="#" class="dy-fc__item">
<img src="" alt="">
<p class="dy__desc">我的钱包</p>
</a>
<a href="#" class="dy-fc__item">
<img src="" alt="">
<p class="dy__desc">券包</p>
</a>
<a href="#" class="dy-fc__item">
<img src="" alt="">
<p class="dy__desc">小程序</p>
</a>
<a href="#" class="dy-fc__item">
<img src="" alt="">
<p class="dy__desc">观看历史</p>
</a>
<a href="#" class="dy-fc__item">
<img src="" alt="">
<p class="dy__desc">内容偏好</p>
</a>
<a href="#" class="dy-fc__item">
<img src="" alt="">
<p class="dy__desc">离线模式</p>
</a>
<a href="#" class="dy-fc__item">
<img src="" alt="">
<p class="dy__desc">设置</p>
</a>
<a href="#" class="dy-fc__item">
<img src="" alt="">
<p class="dy__desc">稍后再看</p>
</a>
</div>
</div>
首先重置默认样式
* {
margin: 0;
padding: 0;
}
接着我们给整个界面设为暗白色,初始化<a>标签
body {
background-color: rgba(211, 209, 209, 0.25);
}
a{
text-decoration: none;
}
然后我们设置一下整个模块的样式:
设置宽占比为94%,
设置外边距为10px并居中
将背景颜色设为白色
调整边角弧度
.dy-fc {
width: 94%;
margin: 10px auto;
background-color: #fff;
border-radius: 10px;
}
再然后是设置头部模块和标题
.dy-fc__hd {
padding: 10px;
}
.dy-fc__title {
font-size: 18px;
font-weight: bold;
}
继续是身体模块
我们将其设置为弹性容器并定义换行属性,使容器内的元素能够按行或列排列,并且可以自动换行、自动调整元素的位置和大小。它使得布局更加灵活和方便。
.dy-fc__bd {
padding: 10px;
display: flex;
flex-wrap: wrap;
}
随后是各个功能模块,我们将宽度设置为33%,使得三个为一行
.dy-fc__item {
width:33%;
text-align: center;
line-height: 2.1em;
color: black;
padding-bottom: 10px;
}
再然后就是图片和底部文字的样式啦
img {
width: 30px;
height: 30px;
}
.dy__desc {
font-size: 14px;
font-weight: bold;
font-family: sans-serif;
}
在实际应用中,可以根据项目规模和需求灵活调整BEM的严格程度,例如引入简写规则或使用工具自动处理类名生成。 结合现代前端框架和工具(如Vue、React的CSS Modules或SASS的嵌套规则)可以进一步简化BEM的编写过程,同时保持其核心优点。
BEM不仅仅是一种命名方式,更是一种思维方式,它帮助开发者从模块化和可维护性的角度去设计和构建界面,是现代前端开发不可或缺的一部分。
平化风格由来已久,但自苹果公司库克接任总裁职位之后,iPhone更新系统值IOS7,扁平化风格才彻底火爆整个科技圈。如今今年过去了,慢慢的感觉到扁平化风格已经大不如前,其主要原因还是苹果在自身使用扁平化后,并没有出台一套扁平化的标准,似乎0高度,画面接近简约都可以称作扁平化,导致了扁平化的滥用,引起了人们的视觉疲劳。
另一方面还要归功于谷歌大力推广Material Design,我觉得扁平化设计出来的非常简洁,但是MD也能做到,而且MD设计出来的卡片式交互转场的时候非常好看,但是国内现在普及的还很少,有的app只是在一两个地方用到了MD里最基本的功能,可能还是考虑用户机型适配的原因,MD support库起步Android4.4,有的必须5.0以上才支持,有的Android6.0和5.0的库又不一样,而且因为机型繁多,兼容是个很大的问题,所以目前还没有普及。为此,外媒thenextweb对2018年的网页设计趋势进行了预测大致如下:
弹出式/插入式内容的终结
Google往往是网页趋势发展背后的驱动者。最近,这家搜索引擎公司宣布将处罚那些在搜索结果中使用弹出式或插入式内容等扰人政策的网站,例如屏蔽那些当用户点击弹出窗口上的“X(关闭)”按钮之后才会消息的内容。
不过并不是所有插入式内容都会消失,像年龄验证、登录窗口等内容则会被保留下来。
破碎/非常规网格布局
相信明年会有越来越多的网站开始尝试新的网格布局,非常规甚至破碎的网格将成为更加流行的设计美学。
Invision Studio就是一个很好的例子,最新发布的网站就在推动网格设计的边界,其对用户在滚动页面时候的网格布局进行了一番改变,甚至还在某些情况下通过在特定位置采用文本覆盖图片的方式“打破”边界。
衬线的回归
曾经的扁平化设计为了尽可能地扁平化甚至去掉了衬线。然而当扁平化设计开始走到尽头的时候,人们又开始看到了衬线的回归。
在众筹网站Kickstarter上大家就可以看到一些衬线。这为原本干净、现代的设计布局加入更多的个性,因为衬线就是增加个性化和真实性的方式之一。
圆角复活
看起来圆角并没有真正死去,实际上现在设计师们又将它带来了回来。看Twitter的新推文发布框就是一个很好的证明。
动画的存在不再分散用户注意力
多亏了jQuery和CSS3,动画在各大网站发展起来,然而到最近,设计师们想要网页上的所有东西都动起来。所以2018年预计网页会出现更多的动画和交互式内容,但它们出现的目的是为了体验而非分散用户的注意力。
就网页设计而言,2018年注定会是令人兴奋的一年。上面谈到的趋势在2017年最后几个月已经广受欢迎,所以相信到了明年它们势必将能大放异彩。
文讲述了 9 条非常强大的 JavaScript 技巧。
作者 | Klaus
译者 | 弯月,责编 | 屠敏
以下为译文:
全部替换
我们知道string.replace函数只会替换第一次出现的位置。在正则表达式末尾添加 /g 即可替换所有出现。
var example="potato potato";
console.log(example.replace(/pot/, "tom"));
// "tomato potato"
console.log(example.replace(/pot/g, "tom"));
// "tomato tomato"
提取唯一值
使用Set对象和spread操作符可以创建一个新的数组,仅包含唯一的值。
var entries=[1, 2, 2, 3, 4, 5, 6, 6, 7, 7, 8, 4, 2, 1]
var unique_entries=[...new Set(entries)];
console.log(unique_entries);
// [1, 2, 3, 4, 5, 6, 7, 8]
数字转为字符串
只需要将其与空字符串连接。
var converted_number=5 + "";
console.log(converted_number);
// 5
console.log(typeof converted_number);
// string
字符串转为数字
只需要使用 + 运算符。
注意这个技巧只能在“字符串形式的数字”上使用。
the_string="123";
console.log(+the_string);
// 123
the_string="hello";
console.log(+the_string);
// NaN
打乱数组的元素顺序
var my_list=[1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(my_list.sort(function {
return Math.random - 0.5
}));
// [4, 8, 2, 9, 1, 3, 6, 5, 7]
多维数组扁平化
只需使用spread运算符。
var entries=[1, [2, 5], [6, 7], 9];
var flat_entries=.concat(...entries);
// [1, 2, 5, 6, 7, 9]
短路条件
比如下面的例子:
if (available) {
addToCart;
}
只需将变量和函数写到一起即可:
available && addToCart
动态属性名
原来我以为必须先定义一个对象才能指定动态属性名,其实不需要:
const dynamic='flavour';
var item={
name: 'Coke',
[dynamic]: 'Cherry'
}
console.log(item);
// { name: "Coke", flavour: "Cherry" }
使用length属性来改变数组大小或清空数组
只需要重写数组的length即可。
要想改变数组大小:
var entries=[1, 2, 3, 4, 5, 6, 7];
console.log(entries.length);
// 7
entries.length=4;
console.log(entries.length);
// 4
console.log(entries);
// [1, 2, 3, 4]
要想清空数组:
var entries=[1, 2, 3, 4, 5, 6, 7];
console.log(entries.length);
// 7
entries.length=0;
console.log(entries.length);
// 0
console.log(entries);
//
原文:https://dev.to/razgandeanu/9-extremely-powerful-javascript-hacks-4g3p
本文为 CSDN 翻译,转载请注明来源出处。
【End】
*请认真填写需求信息,我们会在24小时内与您取得联系。