CSS 代码规范以及 CSS 重难点


代码规范

http://www.uisdc.com/css-written-specifications

CSS书写顺序


1.位置属性(position, top, right, z-index, display, float等)
2.大小(width, height, padding, margin)
3.文字系列(font, line-height, letter-spacing, color- text-align等)
4.背景(background, border等)
5.其他(animation, transition等)

CSS书写规范

  • 使用CSS缩写属性
    CSS有些属性是可以缩写的,比如padding,margin,font等等,这样精简代码同时又能提高用户的阅读体验。

font: font-style | font-variant | font-weight | font-size | line-height | font-family

  • 去掉小数点前的”0″
  • 简写命名
    navigation->nav
    author->atr
  • 16进制颜色代码缩写
    #FFFFFF->
  • 连字符CSS选择器命名规范
    不要用 _ 而用 -

    输入的时候少按一个shift键;
    浏览器兼容问题 (比如使用_tips的选择器命名,在IE6是无效的)
    能良好区分JavaScript变量命名(JS变量命名是用”_”)
    
  • 不要随意使用id
    id在JS是唯一的,不能多次使用,而使用class类选择器却可以重复使用,另外id的优先级优先与class,所以id应该按需使用,而不能滥用。

  • 为选择器添加状态前缀


css 重难点

1. 单位 px em rem

  • px

相对显示器的物理像素点而言

  • em
    如果没有相对对象,则根据浏览器的字体大小相对来说,它的值是根据父元素字体大小而言的

    1
    2
    3
    4
    5
    6
    body{
    font-size:62.5%;
    }
    #main {
    width:90em;
    }
  • rem
    css3 新增的属性
    与 em 不同的是,它的大小只相对< html>根元素而言

2. 颜色

  • 颜色名
    例如,red blue
  • rgb
    rgb(255,255,255)
  • rgba
    rgb(255,255,255,.8)
  • 十六进制
    #FFFFFF #FFF

3. margin & padding

margin 可有 1-4 值,默认值为 0px;

  • 1 个值的时候,表示 上下左右
  • 2 个值的时候,表示 上下 左右
  • 3 个值的时候,表示 上 左右 下
  • 4 个值的时候,遵循 TRBL 规则,即 top right bottom left 上 右 下 左 的瞬时间规则。

例如:

1
2
3
4
margin: 20px;
margin: 10px 20px;
margin: 10px 20px 10px;
margin: 10px 20px 10px 20px ;

特殊用法:

1
margin: 0 auto;

意为上下边距为 0 ,左右边距根据宽度自适应。以上写法可以达到居中的效果。(但要注意给居中的元素一个宽度,并且该元素不能浮动,否则居中无效)

padding 与 margin 设值是一样的规则,但是不能设置负值,另外如果元素背景有背景属性,则背景会覆盖内边距。

4. 盒子模型

标准盒子模型

  • 7个属性:(margin)左右外边距,(padding)左右内边距,(border)左右边框,width,子元素加上7个属性为父元素的width属性,但 IE早期的版本包括 IE6 的浏览器中,元素的 width 属性指的是 border+padding+content

  • 子元素不达父元素的width,左边距10px,右边距10px,若父元素减去子元素七个属性还差10px,则右边距为20px;

  • 垂直margin:auto auto;height自动归零

  • 能设置为auto的属性为width margin-left margin-right

  • 上外边距与下外边距合并,以大为准,只有普通文档流中块框的垂直外边距才会发生外边距叠加,行内框、浮动框、或绝对定位框之间的外边距是不会发生叠加的

5. absolute 、 relative 与 fixed 的区别

讲到 absolute 时需要先知道文档流的概念。

简单来说,文档流是文档中可显示对象在排列时所占用的位置。

  • absolute
    absolute 时,它会脱离原来的文档流,就好像这个元素不存在了一样,漂浮在其没有设置为 absolute 时的文档位置的地方,其他元素会占据其原来的位置。也就是说 absolute 是相对最近 position 为 relative 或 absolute 的父元素定位,默认相对与 body 定位。

  • relative
    而设置为 relative 时,元素并没有脱离文档流,这个时候给其设置 top 跟 left 值,它只会在原来位置的基础上进行肉眼上的移动,而其在文档流上的位置并没有发生改变。

  • fixed
    fixed 将元素直接以浏览器窗口为定位对象,给其设置 top 跟 left 值时,元素将相对固定在浏览器窗口的对应位置上(起点为浏览器窗口的最左上方那一个点)

  • 默认为static

6.行内元素和块级元素

以下内容来自百度

块级元素具有以下特点:

1.总是在新行上开始,占据一整行;
2.高度,行高以及外边距和内边距都可控制;
3.宽带始终是与浏览器宽度一样,与内容无关;
4.它可以容纳内联元素和其他块元素。

行内元素的特点:

1.和其他元素都在一行上;
2.高,行高及外边距和内边距部分可改变;
3.宽度只与内容有关;
4.行内元素只能容纳文本或者其他行内元素。
不可以设置宽高,其宽度随着内容增加,高度随字体大小而改变,内联元素可以设置外边界,但是外边界不对上下起作用,只能对左右起作用,也可以设置内边界,但是内边界在ie6中不对上下起作用,只能对左右起作用

值得一提的是,块级元素可以通过设置为 display: inline-block; 使其可以在行内容纳其他行内元素。

以下链接记录了哪些是行内元素,哪些是块级元素
http://q.cnblogs.com/q/36975/

7.居中

  • margin和width实现水平居中

    容器上定义一个宽度,然后配合margin的左右值为“auto”实现

  • inline-block实现水平居中方法
    利用父元素设置 text-align:center; 这一个除了对内容文本居中外,对子元素的居中也起作用

  • 浮动实现水平居中的方法
    利用 position
    http://www.w3cplus.com/css/elements-horizontally-center-with-css.html

  • 绝对定位实现水平居中

    1
    2
    3
    4
    5
    6
    .ele {
    position: absolute;
    width: 宽度值;
    left: 50%;
    margin-left: -(宽度值/2);
    }

当不知道元素宽度时可以结合一下浮动实现的方法

  • css3 的 flex 实现水平居中方法、CSS3的fit-content实现水平居中方法等

https://css-tricks.com/centering-css-complete-guide/

8.布局

基本概念:定位、浮动、外边距操纵

常见的布局

  • 两栏布局
    left+right

  • 三栏布局

    • 两栏基础上
    • 左右两栏宽度固定,中间自适应
  • 固定布局

    固定尺寸,只有当设计的宽度是不变的时候用固定布局最简便
    缺点: 分辨率低的在分辨率高的显示器上面显示,设计会缩小并且出现在屏幕中间;分辨率高的设计在分辨率低的显示器上面显示会出现滚动条,行长与文本易读性问题等等
    而下面说的流式布局、弹性布局可以解决这些问题

  • 流式布局

    尺寸用百分比而非像素,视情况对较小窗口设置以 em 为单位的最大宽度等等

  • 弹性布局

    em为单位,老式的浏览器进行页面缩放可能还需用到

  • css3 列
    css3 也可以创建等高文本列,可以通过,column-count column-width 和 column-gap 来完成,但是目前浏览器对 css3中的列支持还不广泛。

  • flex 布局
    flex 布局又属于弹性布局的一种,依赖 display属性 + position属性 + float属性。
    http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool

  • 另外一提,margin 负值在布局上面也是有很多作用的

http://www.topcss.org/%E8%B4%9F%E5%80%BC%E4%B9%8B%E7%BE%8E%EF%BC%9A%E8%B4%9F%E5%80%BC%E5%9C%A8%E9%A1%B5%E9%9D%A2%E5%B8%83%E5%B1%80%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8/

9.选择器优先级

优先级从高到低排序如下:

1.在属性后面使用 !important 的优先级最高,它会覆盖页面内任何位置定义的元素样式(不支持 IE6)

2.在html中给元素标签加 style ,但不符合结构与样式分离的原则,故不推荐使用

3.id选择器

4.类选择器、属性选择器、伪类选择器定义(伪类概念:http://www.w3school.com.cn/css/css_pseudo_classes.asp)

5.类型选择器

6.通配选择器