自实习也有几个月的时间了,以爱奇艺实习为敲门砖,进入了目前这家公司。如果说当初能进爱奇艺是临时突击DIV+CSS的话,目前在这家公司体验到,任何技术都必须悉知原理,这样才能做到庖丁解牛,做一个内行的人。css属性和用法都摆在那里,但如果用得好,除了躬身实践,提高理论积淀就特别必要了,这本《写给大家看的css书》快速扫过一遍之后,之前工作遇到过不清楚的问题,一扫而空,所以有必要总结下。
**css层叠的理解**
css是层叠样式表的英文缩写,层叠意味着样式从文档结构中一个层次传递到另一个层次,浏览器来决定,某个标签应用来自哪个来源的样式属性。
**样式的来源有三种:默认浏览器样式表、用户样式表、设计者样式表。**
**默认浏览器的样式表根据浏览器不同而不同,编写样式时,需要编写重置样式表,以便设计者样式表现统一。**
**用户样式表则是用户在浏览器中进行的个性化设置**。
**设计者样式表则是设计者编写的,这其中又分为内联样式、嵌入样式、链接样式。内联样式和嵌入样式并没有做到样式与内容的分离,因为样式仍然包含在同一个文档中。链接样式是唯一一种能够真正将表现样式与结构化标记分离的方式。设计者这三种样式的优先级由高到低为:内联样式、嵌入样式、链接样式。**
**有了以上样式来源,层叠的工作原理:首先,找到应用每个元素和属性的全部声明,按次序和重要性排序,次序即顺序,重要性则是属性的权重和各样式的优先级,并且先按重要性排序再按顺序排序。**
**在文档层次中对准标签**
**一个选择符可以再多条规则中使用。选择符以自右向左的标签顺序对应,上下文选择符中只要标签前面选择符在文档层次中位于它上方某处,并以相同顺序出现就有效。类和ID选择符的好处是无需考虑文档层次的样式。类和ID应该有节制的使用,常见的是添加给包含标记主要部分的块级元素,然后以响应的ID和类名开头的上下文选择符,访问该块级元素中的标签。**
**子选择符、相邻同辈选择符、属性选择符、伪类、伪元素都能为快速定位提供帮助。**
**规则声明**
**em计算依据是一种字体中字符的宽度,ex等于给定字体中字母x高度。在PC开发中使用em指定字体大小的原因有二:可以充分利用继承性,其次,方便视力障碍者使用。但乐帝担心重构中,改变嵌套层级容易引发连带问题,到目前为止乐帝仍然采用像素单位。**
**字体和文本样式**
**css产生的意义在于实现了网页结构与样式的分离。说到字体的范畴中,类似分形学,依然有结构与样式分离的属性。字体属性主要涉及文字的大小和外观。文本属性则主要涉及对字体的处理,例如行高和字母间距。**
**字体集合又分为衬线和无衬线两种,主要区别在于字符笔画末端。无衬线sans-serif,更适合web设计。**
**字体属性font-variant将所有字母转换成小型大写字母。其他相关字体属性如font-weight、font-size、font-style font-family从字面上就可以看出这些均为字体属性。**
**文本属性中需要理解一个概念,即css会把一个盒子放到位于元素中文本周围。这个盒子叫文本盒子。text-indent用于设置文本盒子相对于包含元素的相对位置。常用的首行缩进即此属性实现。并且text-indent属性有继承值,div中设置text-indent值,则所有段落都会继承这个text-indent值,并且段落继承缩进值是基于父元素计算之后的结果。**
**letter-sapacing用于调整字母间的距离,word-spacing用于调整单词之间的距离。**
**text-align设置水平方向上与包含元素对齐方式,因此必须在包含元素上设置此属性。**
**line-height除了设定行距外,还有实现单行文本居中的技巧。方法是将行高设置为包含元素高度,来实现垂直居中效果。**
**text-transform改变元素中国文本大小写形式。**
**vertical-align可以相对于基线将文本向上方或下方移动。例如可以构造化学表达式或者方程式。**
**盒模型**
**定位元素分为三部分:盒模型描述标记中存在的每个元素的定位控制。position属性定义了这些元素在页面上的位置关系。display属性定义元素在页面上是堆叠还是并排及是否出现。**
**盒模型中涉及三个概念:边框、外边距(margin)、内边距(padding)。**
**边框有三个属性:宽度、样式、颜色。边框会增大元素的尺寸,因此边框会改变布局。**
**盒子内边距(padding)指盒子内容与盒子边框之间的距离。内边距处于盒子内部,设置背景色延伸可以用内边距。**
**盒子外边距(margin)设置盒子与相邻元素之间的距离。多数块级元素有默认外边距,因此需要初始化。**
~~~
*{margin:0;padding:0;}
~~~
盒子外边距有折叠外边距的问题,即上下外边距相遇时,会相互折叠,直到一个元素外边距接触到另外一个元素,通俗讲即最后外边距效果是较大的外边距,而不是累加。
**盒子的大小,通过以上内边距与外边距的定义,我们知道内边距与边框属于盒子大小,而外边距不属于,通常情况下,设置元素的width是盒子内容的宽度,而不是盒子本身的宽度,如果再设置内边距和边框,盒子宽度会增加,这个需要特别注意。**
**浮动和清除**
**浮动的原理:只要设置了宽度的元素,而且页面有足够空间,那么相应元素就会像栏一样排列在一起。**
**在很多布局情况下,我们不想任何元素都向上浮动元素旁边,也就是让它保持在浮动元素下方。即[清除浮动](http://bbs.csdn.net/topics/390342944?page=1)。**
~~~
.clearfix:atfer{
content:".";
display:block;
visibility:hidden;
height:0;
clear:both;
}
.clearfix{display:inline-block}
.clearfix{display:block}
~~~
**position属性**
**如上所述,position属性定义了元素在页面中的位置关系。这里要了解一个关键概念:定位环境。定位环境就是当我们使用top、left、right、bottom时移动元素时,我们会参照另外一个元素移动它,而这个作为参照的元素就是定位环境。即相对于哪个元素移动。**
**通常开发时,经常设置需要作为需定位元素祖先元素的position属性为relative,就可以使需要定位的元素修改定位环境。**
**相对定位作为静态元素,所占据空间及其他元素位置都不变,即只是视觉上移动,并没有脱离文档流,文档中,仍然有此元素的位置。**
**绝对定位与相对定位不同之处在于,它会把元素完全移出文档流。其他文档流的内容,会随着abosolute的设置而紧跟文档流移动。**
**固定定位也是脱离文档流,只不过定位环境是视口,即浏览器显示网页的窗口。**
**display属性**
**display:none与visiblity:hidden区别在于,前者原先占据的空间都会被移除,而后者元素占据空间会得到保留,只是不显示。**
**display:block和inline可以根据语义化需要,来针对性的修改默认元素的display属性。**
**浮动布局**
**对带有关键宽度的元素,好的布局方法是嵌套一层内部div。别为那些构成主分栏的div直接添加视觉样式,要添加就给他们内部div添加。这也是结构与样式分形学,进一步细分。**
~~~
#main_wrapper {
width:840px; /* widths of columns will change proportionately as this width is changed */
margin-left:auto; /* centers layout in browser */
margin-right:auto; /* centers layout in browser */
text-align:left; /* resets the centering hack for IE6 on the body tag */
}
#header {
}
#nav {
width:22%; /* this width + content width must total 100% */
float:left; /* floats on nav and content divs make them sit side by side */
}
#content {
float:left; /* floats on nav and content divs make them sit side by side */
width:78%; /* this width + nav width must total 100% */
top:0px;
}
#footer {
clear:both; /* makes the footer sit below whichever column is longest */
}
~~~
**overflow属性用于控制元素如何处理它们包含的内容,overflow:hidden规则能够使较窄分栏在上述情况下保持宽度不变。之前乐帝处理图片等比例放缩就用到此属性。**
**两栏流动式布局**
**两栏流动式布局,设置min-width和max-width属性,以使布局不会失控,同时给导航栏设置定宽,使内容栏动态改变宽度。**
**三栏布局**
**三栏固定宽度布局,设置浮动同时设置每栏所占百分比宽度大小即可。**
**三栏流动式布局文档流及关键样式如下:**
**![](https://box.kancloud.cn/2016-02-24_56cd5e4215716.jpg)**
~~~
#threecolwrap {
float:left;
width:100%;
background:url(../../../chapter_5/code/images/3_col_faux_art_right.gif) repeat-y right;
}
#twocolwrap {
float:left;
width:100%;
display:inline; /* stops IE doubling margin on float*/
<span style="color:#ff0000;">margin-right:-170px; /* CWS - neg margin move */</span>
background: url(../../../chapter_5/code/images/3_col_faux_art_left.gif) repeat-y left;
}
#nav {
float:left;
<span style="color:#ff0000;">width:150px;</span>
display:inline; /* stops IE doubling margin on float*/
}
#content {
width:auto;
<span style="color:#ff0000;">margin-left:150px;
margin-right:170px;</span>
}
#promo {
float:left;
<span style="color:#ff0000;">width:170px;</span>
}
~~~
**通过设置#nav和#promo定宽,并设置content外边距,实现流动三列布局。**
**设计界面组件**
**表格:表格涉及标签语义化,添加样式的目标是尽量添加最少的视觉因素,以保证用户对数据的理解。table标签使用border-collapse可以将默认的两个单元格双边框减少到单边框。**
**表单:表单需要注意的是并列排列的表单控件,从语义关系上,可以使用无序列表来实现对齐等操作。**
**列表:列表也会根据浏览器不同而不同,弥补差异的方法是,将列表的外边距和内边距都重设置为0,然后重新添加样式。**
**行内元素应用内边距和边框时,不会影响包含元素,解决方法是设置display属性。**
- 前言
- 前端编程提高之旅(一)----插件
- 前端编程提高之旅(二)----网站常见特效的jquery实现
- 前端编程提高之旅(三)----浏览器兼容之IE6
- 前端编程提高之旅(四)----backbone初体验
- 前端编程提高之旅(五)----写给大家看的css书
- 前端编程提高之旅(六)----backbone实现todoMVC
- 前端编程提高之旅(七)----marionette实现todoMVC
- 前端编程提高之旅(八)----D3.js数据可视化data join解析
- 前端编程提高之旅(九)----延迟对象
- 前端编程提高之旅(十)----表单验证插件与cookie插件
- 前端编程提高之旅(十一)----jquery代码的组织
- 前端编程提高之旅(十二)----position置入值应用
- 前端编程提高之旅(十三)----jquery选择器
- 前端编程提高之旅(十四)----jquery DOM操作
- 前端编程提高之旅(十五)----jquery事件
- 前端编程提高之旅(十六)----jquery中的动画
- 前端编程提高之旅(十七)----jquery中表单、表格和ajax
- 前端编程提高之旅(十八)----移动端web流行交互技术方案研究