不做前端好多年,之所以突然写这个,是因为最近在做一个监控平台,需要一点web前端开发,想着顺便做了,但是由于长时间没接触前端导致一些基础知识的遗忘,所以在此记录下备忘,没有啥高深的东西,完全是为了对抗我日渐衰弱的记忆力。作为一个非专业前端开发者,通常使用的场景都是能够熟练应用各种前端框架,迅速搭建一个网站就行,不需要知道太高深的东西。经过一段时间的遗忘再次捡起来才知道什么是最基础和最重要的内容。先从CSS说起,什么酷炫的动画都与我无关,因为我并不是专业做前端的,我只需要能熟练运用现成的框架就行,但是现成的框架也并不是毛线都不懂就能驾驭的。个人觉得对于业余前端开发者而言要想轻松驾驭现成的框架必须熟练掌握CSS下面几个概念,其他东西遗忘都没关系,但是这些概念绝对不能忘,否则写出来的绝对是一堆垃圾。
1-盒模型
盒模型分为标准盒模型和IE的盒模型(又称为怪异模型)
标准模型:padding+border+content=width=盒子大小
怪异模型:padding+border+width(content=width)=盒子大小
显然标准模型的盒子大小是不确定的,也就是说在构造页面的时候你要将一个大小不固定的盒子塞进去页面中,显然很难控制。因此大多数开发者都比较推崇第二种;所幸CSS3中新增了box-sizing字段就是为了指定浏览器应该以哪种方式来解析盒子模型。
box-sizing有三种值:
-
- content-box:标准模型
- border-box:怪异模型
- inherit:继承父元素的box-sizing值
其实一般情况下,使用一种盒模型是能够应付所有的场景的,只是难易程度不一,个人建议整个页面全部使用一种盒模型,以免自己给自己找不痛快。个人比较推荐怪异模型,因为它的大小是固定的,写代码的时候可以预见的,尤其是使用流式布局的时候优势更加明显。
2-布局
absolute |
生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 |
fixed |
生成绝对定位的元素,相对于浏览器窗口进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 |
relative |
生成相对定位的元素,相对于其正常位置进行定位。 因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。 |
static | 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。 |
inherit | 规定应该从父元素继承 position 属性的值。 |
其他四个布局方式都比较容易理解,比较抽象的是相对布局,因为它脱离了正常的文档流,但是偏移之前的位置却依然不会被占据,absolute布局方式的元素也脱离了正常文档流,但是一旦脱离,他在正常文档流中的位置会被删掉,因此和正常文档流没有关系了,至少不会出现相互挤压的情况但有可能相互遮挡。
如果说我对某元素设置了相对定位,那么首先这个元素他会跟其它的元素一样,出现在文档流中它该出现的位置,然后,我们可以设置它的水平或垂直偏移量,让这个元素相对于它在文档流中的位置的起始点进行移动。有一点要注意, 在使用相对定位时,就算元素被偏移了,但是他仍然占据着它没偏移前的空间。这里值得注意的一点是:偏移可不是边距,跟边距是不一样的。
我们先看看下图,其中第一个块和第三个块是正常文档流之后第二个块是相对布局。
上图中有三个浮动的块,第二个块是设置了相对定位position:relative了的,这时大家看到它的位置并没有其它什么不同,跟其它两个块一样都处在正常的文档流中。
接下来我给那个设置了position:relative的块设置一个偏移:left:50px ; top:30px 这时我们再看看效果:
这时我们发现第二个块针对它本身位置的起始点进行了一个偏移,但是它原来所占据的那个位置空间依然还在(虚线框标示的地方),即使我们把偏移量设置得再大一点,使它完全离开原来的位置,它原来位于文档流中的位置仍然会存在,不会被第三个块浮动过来填补掉。
同时,它的偏移也不会把别的块从文档流中原来的位置挤开,如果有重叠的地方它会重叠在其它文档流元素之上,而不是把它们挤开,就像图中那样,它已经覆盖在了第三个块之上。
我们可以设置它的z-index属性来调整它的堆叠顺序。
float和absolute的区别
需要注意的是,使用float脱离文档流时,其他盒子会无视这个元素,但其他盒子内的文本依然会为这个元素让出位置,环绕在周围。
而对于使用absolute positioning脱离文档流的元素,其他盒子与其他盒子内的文本都会无视它。
3-css中属性继承
属性继承就是为了避免让你写一些重复性且没有意义的属性,css样式那么多,不可能给每一个元素上都把这些属性写一遍,如果是这样那就相当于一个人穿了很多双鞋,戴了很多帽子,然后穿着一个到处缝着布条的衣服。时尚大师tony老师也拯救不了你。所以一旦写出这样的代码,代码是不具有可维护性的。
一、无继承性的属性
1、display:规定元素应该生成的框的类型
2、文本属性:
vertical-align:垂直文本对齐
text-decoration:规定添加到文本的装饰
text-shadow:文本阴影效果
white-space:空白符的处理
unicode-bidi:设置文本的方向
3、盒子模型的属性:width、height、margin 、margin-top、margin-right、margin-bottom、margin-left、border、border-style、border-top-style、border-right-style、border-bottom-style、border-left-style、border-width、border-top-width、border-right-right、border-bottom-width、border-left-width、border-color、border-top-color、border-right-color、border-bottom-color、border-left-color、border-top、border-right、border-bottom、border-left、padding、padding-top、padding-right、padding-bottom、padding-left
4、背景属性:background、background-color、background-image、background-repeat、background-position、background-attachment
5、定位属性:float、clear、position、top、right、bottom、left、min-width、min-height、max-width、max-height、overflow、clip、z-index
6、生成内容属性:content、counter-reset、counter-increment
7、轮廓样式属性:outline-style、outline-width、outline-color、outline
8、页面样式属性:size、page-break-before、page-break-after
9、声音样式属性:pause-before、pause-after、pause、cue-before、cue-after、cue、play-during
二、有继承性的属性
1、字体系列属性
font:组合字体
font-family:规定元素的字体系列
font-weight:设置字体的粗细
font-size:设置字体的尺寸
font-style:定义字体的风格
font-variant:设置小型大写字母的字体显示文本,这意味着所有的小写字母均会被转换为大写,但是所有使用小型大写字体的字母与其余文本相比,其字体尺寸更小。
font-stretch:对当前的 font-family 进行伸缩变形。所有主流浏览器都不支持。
font-size-adjust:为某个元素规定一个 aspect 值,这样就可以保持首选字体的 x-height。
2、文本系列属性
text-indent:文本缩进
text-align:文本水平对齐
line-height:行高
word-spacing:增加或减少单词间的空白(即字间隔)
letter-spacing:增加或减少字符间的空白(字符间距)
text-transform:控制文本大小写
direction:规定文本的书写方向
color:文本颜色
3、元素可见性:visibility
4、表格布局属性:caption-side、border-collapse、border-spacing、empty-cells、table-layout
5、列表布局属性:list-style-type、list-style-image、list-style-position、list-style
6、生成内容属性:quotes
7、光标属性:cursor
8、页面样式属性:page、page-break-inside、windows、orphans
9、声音样式属性:speak、speak-punctuation、speak-numeral、speak-header、speech-rate、volume、voice-family、pitch、pitch-range、stress、richness、、azimuth、elevation
三、所有元素可以继承的属性
1、元素可见性:visibility
2、光标属性:cursor
四、内联元素可以继承的属性
1、字体系列属性
2、除text-indent、text-align之外的文本系列属性
五、块级元素可以继承的属性
1、text-indent、text-align