热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端范例(ES6\BEM\OOCSS\SMACSS)

前端范例在现实开辟中,因为团队成员编码习气不一,手艺条理差别,开辟前定制并遵照一种代码范例能进步代码质量,增添开辟效力。JavascriptJavascript范例直接参考airb
前端范例

在现实开辟中,因为团队成员编码习气不一,手艺条理差别,开辟前定制并遵照一种代码范例能进步代码质量,增添开辟效力。

Javascript

Javascript范例直接参考airbnb:

ES6 Javascript Style Guide

ES5 Javascript Style Guide

React/JSX Style Guide

CSS

BEM

Block Element Modifier,它是一种前端定名要领,旨在协助开辟者完成模块化、可复用、高可维护性和构造化的CSS代码。

BEM是定义了一种css class的定名范例,每一个称号及其构成部分都是存在肯定的寄义。

BlockElementModifier
自力且有意义的实体, e.g. header, container, menu, checkbox, etc.Block的一部分且没有自力的意义, e.g. header title, menu item, list item, etc.Blocks或Elements的一种标志,可以用它转变其表现形式、行动、状况. e.g. disabled, checked, fixed, etc.

Naming

由拉丁字母, 数字, -构成css的单个称号.

Block

运用简约的前缀名字来定名一个自力且有意义的笼统块或组件。

e.g.

.block

.header

.site-search

Element

运用__衔接符来衔接BlockElement

e.g.

.block__element

.header__title

.site-search__field

Modifier

运用--衔接符来衔接BlockElementModifier

e.g.

.block--modifier

.block__element--modifier

.header--hide

.header__title--color-red

.site-search__field--disabled

实例

HTML




CSS

.form {
}
.form--theme-xmas {
}
.form--simple {
}
.form__input {
}
.form__submit {
}
.form__submit--disabled {
}

Buttons实例

《前端范例(ES6\BEM\OOCSS\SMACSS)》

HTML



CSS

.button {
display: inline-block;
border-radius: 3px;
padding: 7px 12px;
border: 1px solid #D5D5D5;
background-image: linear-gradient(#EEE, #DDD);
font: 700 13px/18px Helvetica, arial;
}
.button--state-success {
color: #FFF;
background: #569E3D linear-gradient(#79D858, #569E3D) repeat-x;
border-color: #4A993E;
}
.button--state-danger {
color: #900;
}

FAQ

BEM – FAQ

OOCSS

Object Oriented CSS,面向对象的CSS,旨在编写高可复用、低耦合和高扩大的CSS代码。

OOCSS是以面向对象的思想去定义款式,将笼统和完成星散,抽离大众代码。

辨别构造和款式

在定义一个可重用性的组件库时,我们仅建立基础的构造(html)和基础的类名,不应当建立类似于border, width, height, background等款式划定规矩,如许使组件库更天真和可扩大性。组件库在差别环境下的款式所请求不一样,若未能辨别其构造和款式,给其增加款式,会使其变成一个特定的组件库,而难以重用。

e.g.

以下是一个基础库建立的款式:

.metadata{
font-size: 1.2em;
text-align: left;
margin: 10px 0;
}

若在给其增加更多的款式:

.metadata{
font-size: 1.2em;
margin: 10px 0;
/*在基础组件上新加的款式*/
width: 500px;
background-color: #efefef;
color: #fff;
}

如许就使前面建立的基础组件metadata变成了一个特定的组件了,使其在其他场景下较难复用。

辨别容器和内容

把容器和内容自力分区,使内容能作用于任何容器下。

e.g.

#sidebar h3 {
font-family: Arial, Helvetica, sans-serif;
font-size: .8em;
line-height: 1;
color: #777;
text-shadow: rgba(0, 0, 0, .3) 3px 3px 6px;
}

上面我们定义了一个id为sidebarh3的款式,然则我们发如今footerh3的款式也基础一致,仅一般不一样,那末我们可以会如许写款式:

#sidebar h3, #footer h3 {
font-family: Arial, Helvetica, sans-serif;
font-size: 2em;
line-height: 1;
color: #777;
text-shadow: rgba(0, 0, 0, .3) 3px 3px 6px;
}
#footer h3 {
font-size: 1.5em;
text-shadow: rgba(0, 0, 0, .3) 2px 2px 4px;
}

以至我们可以会用更蹩脚的体式格局来写这个款式:

#sidebar h3 {
font-family: Arial, Helvetica, sans-serif;
font-size: 2em;
line-height: 1;
color: #777;
text-shadow: rgba(0, 0, 0, .3) 3px 3px 6px;
}
#footer h3 {
font-family: Arial, Helvetica, sans-serif;
font-size: 1.5em;
line-height: 1;
color: #777;
text-shadow: rgba(0, 0, 0, .3) 2px 2px 4px;
}

我们可以看到上面的代码中涌现了不必要的duplicating styles。而OOCSS勉励我们应当思索在差别元素中哪些款式是通用的,然后将这些通用的款式从模块、组件、对象等中抽离出来,使其能在任何地方可以复用,而不依赖于某个特定的容器。

.title-heading {
font-family: Arial, Helvetica, sans-serif;
font-size: 2em;
line-height: 1;
color: #777;
text-shadow: rgba(0, 0, 0, .3) 3px 3px 6px;
}
#footer .title-heading {
font-size: 1.5em;
text-shadow: rgba(0, 0, 0, .3) 2px 2px 4px;
}

SMACSS

Scalable and Modular Architecture for CSS,可扩大模块化的CSS,它的中心就是构造化CSS代码,提出了一种CSS分类划定规矩,分为五种范例:

  • Base

  • Layout

  • Module

  • State

  • Theme

SMACSS定义了一种css文件的构造体式格局,其横向的切分,使css文件更具有构造化、高可维护性。

Base

Base是默许的款式,是对单个元素选择器(包含其属性选择器,伪类选择器,孩子/兄弟选择器)的基础款式设置,比方html, body, input[type=text], a:hover, etc.

e.g.

html, body {
margin: 0;
padding: 0;
}
input[type=text] {
border: 1px solid #999;
}
a {
color: #039;
}
a:hover {
color: #03C;
}

CSS Reset/Normalize就是一种Base Rule的运用.

Note:

  • 在基础款式中不应当运用!important

Layout

不明思议,是对页面规划元素(页面架构中主要和次要的组件)的款式设置,比方header, navigation, footer, sidebar, login-form, etc.

e.g.

.header, footer {
margin: 0;
}
.header {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 9999;
}
.navs {
display: inline-block;
margin: 0 auto;
}

Modules

对大众组件款式的设置,比方dropdown, tabs, carousels, dialogs, etc.

e.g.

.dropdown, .dropdown > ul {
display: inline-block;
border: 1px solid #283AE2;
}
.dropdown li:hover {
background-color: #999;
}
.tabs {
border: 1px solid #e8e8e8;
}
.tabs > .tab--active {
border-bottom: none;
color: #29A288;
}

State

对组件、模块、元素等表现行动或状况的款式润饰,比方hide, show, is-error, etc.

e.g.

.hide {
display: none;
}
.show {
display: block;
}
.is-error {
color: red;
}

Theme

对页面团体规划款式的设置,可以说是一种皮肤,它可以在特定场景下掩盖base, layout等的默许款式。

e.g.

.body--theme-sky {
background: blue url(/static/img/body--theme-sky.png) repeat;
}
.footer--theme-sky {
background-image: blue url('/static/img/header--theme-sky.png') no-repeat center;
}

Others

  • SUITCSS

  • Atomic

  • Airbnb CSS Style Guide

Web Components

这么多CSS范例,貌似照样有争执等题目,咋办呀?

世上没有圆满计划,只要适宜/最好计划~

让我门一同期待Web Components到来吧~

资本

在线实例

源代码


推荐阅读
  • 使用jqTransform插件美化表单
    jqTransform 是由 DFC Engineering 开发的一款 jQuery 插件,专用于美化表单元素,操作简便,能够美化包括输入框、单选按钮、多行文本域、下拉选择框和复选框在内的所有表单元素。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 题目《BZOJ2654: Tree》的时间限制为30秒,内存限制为512MB。该问题通过结合二分查找和Kruskal算法,提供了一种高效的优化解决方案。具体而言,利用二分查找缩小解的范围,再通过Kruskal算法构建最小生成树,从而在复杂度上实现了显著的优化。此方法不仅提高了算法的效率,还确保了在大规模数据集上的稳定性能。 ... [详细]
  • 在 LeetCode 的“有效回文串 II”问题中,给定一个非空字符串 `s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。 ... [详细]
  • 二分查找算法详解与应用分析:本文深入探讨了二分查找算法的实现细节及其在实际问题中的应用。通过定义 `binary_search` 函数,详细介绍了算法的逻辑流程,包括初始化上下界、循环条件以及中间值的计算方法。此外,还讨论了该算法的时间复杂度和空间复杂度,并提供了多个应用场景示例,帮助读者更好地理解和掌握这一高效查找技术。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
author-avatar
廖汉林1026_843
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有