虽然写过很多css代码,但每次动手写都让我痛苦不堪,如何组织好那一堆堆的代码,如何提高代码复用率,甚至如何命名类,这些都让我纠结。下面的浅显的谈一谈在看了《编写高质量代码》中的html和css部分以及搜索网络上一些相关资料对编写高质量的HTML和CSS的一些基本认识。

HTML

在说css之前必须先说说html ,没有它css是浮云。就像是要建栋别墅,光有那些装饰品(css)没有房子基本的结构(html)是不可能造出真正好看又实用的别墅的。其实html结构并不是简单的table或一堆堆的div,真正的高质量的html是具有良好语义化结构的,html5的header、nav和footer等这些新增的标签也是为良好语义化结构而生的吧。这就像让人鼻子是鼻子,眼睛是眼睛,而不是一顿乱放。

标签语义化

拥有良好语义化结构的前提是使用正确的标签。每一个html标签都有它自己的意义,下面是html的一张HTML标签语义对照表

div——division 分隔
span——span 范围
ol——ordered list 有序列表
ul——unordered list 无序列表
li——list item 列表项目
dl——definition list 定义列表
dt——definition term 定义术语
dd——definition description 定义描述
a——achlor 锚
strong——strong 加重
em——emphasized 加重
b——bold 加粗
i——italic 斜体
big——big 变大
small——small 变小
p——paragraph 段落
h1-h6——header 标题1到标题6
hr——horizontal rule 水平尺
sup——superscripted 上标
sub——subscripted 下标
font——font 字体
del——delete 删除
ins——inserted 插入
u——underlined 下划线
s——Strikethrough 删除线
fieldset——fieldset 域集
legend——legend 图标
caption——caption标题
abbr——abbreviation 缩写词
address——address 地址
var——varaiable 变量
pre——preformatted 预定义格式
blockquote——block quotation 区块引用语

HTML5新增标签

<article> 标记定义一篇文章
<aside> 标记定义页面内容部分的侧边栏
<audio> 标记定义音频内容
<canvas> 标记定义图片
<command> 标记定义一个命令按钮
<datalist> 标记定义一个下拉列表
<details> 标记定义一个元素的详细内容
<dialog> 标记定义一个对话框(会话框)
<embed> 标记定义外部的可交互的内容或插件
<figure> 标记定义一组媒体内容以及它们的标题<footer> 标记定义一个页面或一个区域的底部
<header> 标记定义一个页面或一个区域的头部
<hgroup> 标记定义文件中一个区块的相关信息
<keygen> 标记定义表单里一个生成的键值
<mark> 标记定义有标记的文本
<meter> 标记定义 measurement within a
predefined range
<nav> 标记定义导航链接
<output> 标记定义一些输出类型
<progress> 标记定义任务的过程
<rp> 标记是用在Ruby annotations 告诉那些不支持 Ruby元素的浏览器如何去显示
<rt> 标记定义对ruby
annotations的解释
<ruby> 标记定义 ruby annotations.
<section> 标记定义一个区域
<source> 标记定义媒体资源
<time> 标记定义一个日期/时间
<video> 标记定义一个视频

现在我知道了每个标签的含义,那我怎么知道我的html语义是否良好?最好的办法是去掉css,去掉样式,看结构是否良好。可以在给网页布局时先把html写好,再去写相应的样式。没有样式的网页应该也具有良好的可读性。

CSS

最开始写css就是看见什么写什么,从来不会想它还需要好好组织,最后代码一堆一堆,自己看着就头晕,发现兼容问题也是这里补补那里补补,毫无章法可言。现在才发现,css也是一门大学问。

css结构

如何组织好css让代码结构更清晰、复用率更高?这需要有良好的css结构。 比较常见组织css的方法:base.css+common.css+page.css base层位于三者的最底层,提供CSS Reset和粒度最小的通用类——原子类,这一层的css可以被任何网站应用。 common层定义组件类,像button、标题栏这样特定的样式,这些组件类可以供整个网站使用. page层是相对于网站某个页面特有的样式,像主页可能就跟其他页面的样式有很大不同,你可以定义一个专用于首页的css(如index.css)。 不过话说回来,如果网站规模不大,我们也就没有必要把这些css分成三个文件(这样会增加请求数),可以把所有css统一放在一个文件里甚至html头部。不过我们还是需要规规矩矩地把它按照base、common、page这样的层级排列,并写上相应注释。

css模块化

css模块化的目的是把具有相同样式的css组织起来,提高css的重用率。划分模块应该保证类的单一职责。模块应在保证数量尽可能少的原则下,做到尽可能的简单,以提高重用率。 举个例子: 我们来看一下新浪博客首页的四个列表,我们可以把这四个列表划分成两个完全一样的两大块(方形和圈);但是我们发现其实这两大块中间的列表部分的样式其实是一样的,所以可以做如下调整。

1-1

看下图,我们按照圈、箭头和方形所标注的三块内容就划分了三个不同的模块,这样每个模块的样式几乎是一样的(当然除了每个列表的名称),把列表作为一个模块单独出来。 1-2

css命名

css命名也是一门学问。骆驼命名法和划线命名法的结合是不错的选择。骆驼命名法是从第二个单词开始首字母大写(如listItem、articleList);划线命名法是每个单词用“_”或“-”分开(如list-item、article——list)。 我们可以用:骆驼命名法用于区别不同单词,划线用于表明从属关系。 item属于list的子项目所以写成list_item的形式,articleList是指文章列表没有从属关系。最近看到一种BEM命名法,有兴趣的童鞋可以通过这篇文章了解一下《BEM思想之彻底弄清BEM语法》 当有很多相似但又不完全相同的模块时我们是给每一块加上不同的类然后使用css技巧把相同的部分提取出来(继承),还是让多个类组合成我们想要的效果呢?建议是多用组合,少用继承。

css编码风格——多行式和一行式

多行式的编码风格可读性更强,但增加了css文件行数增大文件大小。一行式可读性稍差,但有效减少文件行数有利于提高开发速度。

css兼容问题

我经常感觉被IE6“坑”,它会时不时给你些小惊喜。其实不止IE6,每个浏览器都有它特殊的一面。

补充阅读: 《IE6下的几大灵异事件》 《最全的CSS浏览器兼容问题》 《主流浏览器的Hack写法》

转载于:https://www.cnblogs.com/human/p/3357054.html

如何编写高质量CSS相关推荐

  1. 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)

    读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...

  2. HTML Inspector – 帮助你编写高质量的 HTML 代码

    HTML Inspector 是一款代码质量检测工具,帮助你编写更优秀的 HTML 代码.HTML Inspector 使用 JavaScript 编写,运行在浏览器中,是最好的 HTML 代码检测工 ...

  3. 编写高质量可维护的代码:优雅命名

    大家好,我是若川.今天分享一篇关于如何命名更优雅的文章. 点击下方卡片关注我.加个星标,或者查看源码等系列文章.学习源码整体架构系列.年度总结.JS基础系列 本文首发于政采云前端团队博客:编写高质量可 ...

  4. 13个有用的javascript开发人员工具,用于编写高质量的代码

    Today I'm going to show you 13 well-know and popular tools to write better and cleaner JavaScript co ...

  5. 编写高质量代码改善C#程序的157个建议——建议148:不重复代码

    建议148:不重复代码 如果发现重复的代码,则意味着我们需要整顿一下,在继续前进. 重复的代码让我们的软件行为不一致.举例来说,如果存在两处相同的加密代码.结果在某一天,我们发现加密代码有个小Bug, ...

  6. 编写高质量代码改善C#程序的157个建议——建议86:Parallel中的异常处理

    建议86:Parallel中的异常处理 建议85阐述了如何处理Task中的异常.由于Task的Start方法是异步启动的,所以我们需要额外的技术来完成异常处理.Parallel相对来说就要简单很多,因 ...

  7. 《编写高质量代码:改善c程序代码的125个建议》——建议3-5:避免使用浮点数作为循环计数器...

    本节书摘来自华章计算机<编写高质量代码:改善c程序代码的125个建议>一书中的第1章,建议3-5,作者:马 伟 更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...

  8. 《编写高质量Python代码的59个有效方法》——第10条:尽量用enumerate取代range

    本节书摘来自华章社区<编写高质量Python代码的59个有效方法>一书中的第10条:尽量用enumerate取代range,作者[美]布雷特·斯拉特金(Brett Slatkin),更多章 ...

  9. 判断某值是否属于枚举类中的值_编写高质量可维护的代码之优化逻辑判断

    if else.switch case 是日常开发中最常见的条件判断语句,这种看似简单的语句,当遇到复杂的业务场景时,如果处理不善,就会出现大量的逻辑嵌套,可读性差并且难以扩展. 编写高质量可维护的代 ...

最新文章

  1. 构建Java并发模型框架
  2. 使用IDEA新建springboot工程
  3. 通过变长数组(VLA)来看编译器的不同
  4. Android log打印不出来
  5. mysql修改表结构语句
  6. 使用libcurl库编写HTTP客户端(包括GET/POST/HTTPS)
  7. 【CyberSecurityLearning 73】DC系列之DC-4渗透测试
  8. UNIX环境高级编程(三)—— 静态链接库与动态链接库
  9. 面向对象12:==运算符和equals()方法、toString()方法
  10. java clone()用法_java clone方法使用详解(转)
  11. el-table实现动态表格插入行(开发小记)
  12. vscode、windows快捷键
  13. python 文件夹_使用python进行文件夹对比
  14. Openssl win8 用法
  15. VS 调试时,不允许修改代码
  16. HTTP服务器中keep-alive 与 url常见问题
  17. 图论 SCC(CCF高速公路)
  18. TLS certificate verification has been disabled!
  19. iOS开发 - 中文 iOS/Mac 开发博客列表
  20. 空气源热泵如何实现远程集中管理的

热门文章

  1. 美团点评效果广告实验配置平台的设计与实现
  2. 如何设计真正高性能高并发分布式系统(万字长文)
  3. 又一次生产 CPU 高负载排查实践
  4. Linux 常用命令全称,看看你 get 到了哪些?
  5. OSI模型中的数据链路层和物理层的区分
  6. qt android oci数据库,QT mysql SQLite 数据库支持
  7. php跳转传值,php如何跳转页面并传值?
  8. list修改元素的值_第115天:Python 到底是值传递还是引用传递
  9. windows c语言能分配多少内存,Windows下C语言程序的内存布局(内存模型)
  10. php exif信息,php通过exif_read_data函数获取图片的exif信息