无废话网页重构系列——(6)HTML主干结构:站点(site)、页面(page)
语义化概念:通过丰富的语义关系对数据进行逻辑化描述,便于数据人机可读、检索挖掘和共享交换,实现信息处理的自动化和智能化;即人类提供良好结构的、作为人能识别的数据给机器,让不同机器能准确高效的意会和处理数据反馈给人类。
语义化实现方案有多种,如RDF、RDFa、Microformats、Microdata等规范,虽其复杂性、数据模型、属性类型等特性不尽相同,但都支持HTML5语言,项目如有特定需求可采用相关规范,实现丰富的语义关系。本篇Web语义化仅从HTML5语言标准下的“标签语义”和“属性命名语义”两部分展开。
标签语义
Web重构工作主要是语义化排版文档信息,构建语义明确、结构清晰的文档,便于浏览器解析渲染、搜索引擎建立索引抓取页面,提升内容的交互性、可读性和可维护性,视觉呈现上即使没有引入样式,人还是能“愉快”的阅读主体内容,如标题就是标题、段落就是段落、列表就列表…
根据文档特征,在HTML 4.01规范中定义了大量的语义标签,如文本、列表、表格、链接、媒体对象、表单等范畴下的标签元素;在HTML 5中更为详细的规范化了文档特征,添加了新的标签元素用以更明确的定义和描述文档的结构,并且对所有元素按 Metadata、Flow、Sectioning、Heading、Phrasing、Embedded、Interactive 等属性重新定义了分类规则,如下图(来源:W3C/HTML 5.2 / 3.2.4.2. Kinds of content):
合理使用语义标签,主要是分明层次嵌套、清晰标签职责。
属性命名语义
属性命名语义,主要是class、id、data-*等属性的命名,其中最主要的是class属性命名,主要有OOCSS、BEM、SMACSS、SUITCSS、Atomic等方案,各种方案都是意图通过样式命名让文档具备逻辑表达能力。OOCSS主要侧重样式的抽象、独立、封装与复用,BEM、SMACSS、SUITCSS主要侧重减轻样式对HTML层级结构嵌套依赖,Atomic主要侧重剥离具体样式表现的特性。
属性命名依赖于HTML结构,早期在项目中尝试过长命名、短命名方案,团队小、项目小都还可以定义与维护,在多人参与的一定规模的项目中,长命名kebab-case会变得很长很晦涩,短命名层级嵌套会变得越来越深,总有队友深怕会与他人产生冲突刻意为之。
属性命名具体实现建议:
- 采用
BEM + OOCSS + Atomic + SCSS/LESS/Stylus/PostCSS组合方案 - 样式用属性使用
.class,数据钩子使用#id - 不用‘大小、颜色、方位、形状’等表象的词
- JavaScript钩子属性名采用
j_lowerCamelCase前缀加小驼峰方式
BEM规则可参考:
Block独立模块:中横线Element子元素:俩下划线Modifier模块状态:一个下划线Block下的所有Element不考虑层级嵌套关系,扁平化处理都属于Block,即连续的__下划线只能出现一次
BEM实现为:
- 模块:
.block - 模块_状态:
.block_modifier - 模块__子元素:
.block__element - 模块__子元素_状态:
.block__element_modifier
附上常用命名词:
| 用途 | ClassName |
|---|---|
| 主次 | primary, secondary, accent, weak, bold, light 建议用于变量 |
| 大小 | base, normal, regular, small, medium, large, xlarge, xxlarge, xxxlarge 建议用于变量 |
| 结构 | site, page, topbar, header, footer, container, title, main, content, aside, pendant, section, module, wrapper, inner, row, column |
| 导航 | nav, navigation, navbar, menu, breadcrumb, prev, next, first, last, pagination, pager, forward, back, up |
| 列表 | list, item, group, panel |
| 组件 | alert, dialog, popover, modal, dropdown, tooltip, accordion, collapse, tabs, carousel, slide, media, card, colorpicker, timepicker, datepicker, datetimepicker, calendar, switch, select, radio, checkbox, transfer, upload, cascader, tree-select, label, badge, avatar, backtop, loading, spin, message, notification, overlay, steps, timeline, progress, scroll, rate, divider, spacer, gallery |
| 页面 | index, archive, detail, special, contact, search, about, forum |
| 状态 | default, toggle, active, current, cancel, checked, hover, focus, success, fail, warning, danger, info, error, close, on, off, in |
| 常用 | vertical, horizontal, btn, more, icon, attach |
扩展阅读:
(本篇结束)
许可协议:自由转载-保持署名-非商业性使用-禁止演绎 (CC BY-NC-ND 4.0)
By 小可 from https://xinlu.ink/tech/pro-web-reconstruction-6-semantics.html
无废话网页重构系列——(6)HTML主干结构:站点(site)、页面(page)的更多相关文章
- 无废话网页重构系列——(7)布局(区块、栅格)、模块组件(module)
本文作者:大象本文地址:http://www.cnblogs.com/daxiang/p/4654800.html 在构建HTML主干结构后,开始编写“页面布局”和“模块组件”: 页面框架由几个主干结 ...
- 无废话网页重构系列——(3)Web重构前的分析
本篇讲重构前的分析.从“工作状态.工作环境和工作角色”和具体重构工作两方面分析. 凡是经过考验的朋友,就应该把他们紧紧地团结在你的周围 比较理想的工作状态:制定了各种设计和开发规范,各团队之间邮件.团 ...
- 无废话网页重构系列——(2)来套Web重构装备
本篇主要从语言入门.规范.工具.构建.库.框架.版本控制等各方面展开,篇幅会有点长,涉及到的工具类,会另开博文详细介绍. 另外说明Web重构是Web前端的开始,主要侧重Web页面,如实现布局与兼容,符 ...
- 无废话C#设计模式系列文章
不错的系列文章 原文:http://www.cnblogs.com/lovecherry/archive/2007/10/17/927728.html 本系列文章从公司内部的知识分享修改而来,有错误或 ...
- Liferay 6.2 改造系列之五:修改默认站点的页面内容
相关页面可以通过/portal-master/portal-impl/src/portal.properties文件配置进行修改: 登录页: ## ## Default Landing Page ## ...
- 随笔分类 - 无废话ExtJs系列教程
随笔分类 - 无废话ExtJs系列教程 摘自:http://www.cnblogs.com/iamlilinfeng/category/385121.html ExtJs 入门教程 摘要: extjs ...
- 【转】无废话WCF系列教程
转自:http://www.cnblogs.com/iamlilinfeng/category/415833.html 看后感:这系列的作者李林峰写得真的不错,通过它的例子,让我对WCF有了一 ...
- 无废话WCF系列教程 -- 李林峰
李林峰的无废话WCF入门教程 无废话WCF入门教程一[什么是WCF] 无废话WCF入门教程二[WCF应用的通信过程] 无废话WCF入门教程三[WCF的宿主] 无废话WCF入门教程四[WCF的配置文件] ...
- WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]
WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...
随机推荐
- iOS 触摸的位置放一个大头针
iOS 触摸的位置放一个大头针 UITapGestureRecognizer *mTap = [[UITapGestureRecognizer alloc] initWithTarget:self a ...
- HTML+CSS学习笔记 (11) - CSS盒模型
元素分类 在讲解CSS布局之前,我们需要提前知道一些知识,在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <di ...
- 【学习笔记】【C语言】进制
1. 什么是进制 是一种计数的方式,数值的表示形式 2. 二进制 1> 特点:只有0和1,逢2进1 2> 书写格式:0b或者0b开头 3> 使用场合:二进制指令\二进制文件,变量在内 ...
- 支持向量机 support vector machine
SVM(support Vector machine) (1) SVM(Support Vector Machine)是从瓦普尼克(Vapnik)的统计学习理论发展而来的,主要针对小样本数据进行学习. ...
- 3月7日 Maximum Subarray
间隔2天,继续开始写LeetCodeOj. 原题: Maximum Subarray 其实这题很早就看了,也知道怎么做,在<编程珠玑>中有提到,求最大连续子序列,其实只需要O(n)的复杂度 ...
- C# ProperTyGrid 自定义属性
C# 如果要实现自定义属性必须要需要实现接口ICustomTypeDescriptor // 摘要: // 提供为对象提供动态自定义类型信息的接口. public interface ...
- 重拾C,一天一点点_2
类型转换一般来说,如果二元运算符的两个操作数具有不同的类型,较低的类型提升为较高类型,结果为较高类型.表达式由float类型的操作数不会自动转换为double类型.使用float类型主要是为了在使用较 ...
- Oracle bbed 实用示例-----File Header Reset
一.查看当前环境 1.1 当前控制文件中的SCN号 [oracle@ora10 ~]$ sqlplus /nolog SQL :: Copyright (c) , , Oracle. All righ ...
- Oracle 表的连接方式(2)-----HASH JOIN的基本机制1
我们对hash join的常见误解,一般包括两个: 第一个误解:是我们经常以为hash join需要对两个做join的表都做全表扫描 第二个误解:是经常以为hash join会选择比较小的表做buil ...
- System V消息队列
消息的基本属性 System V的消息属性包含在一个msqid_ds的结构中 struct msqid_ds{ struct ipc_cerm msg_perm; //读取权限, 0644, 0777 ...