[置顶] CSS语言精粹
本文主要是对CSS中一些比较重要的高级部分作了一些整理,这些内容也许不是经常使用,但是都很强大。本文将长期更新。
边框
CSS2.1 规定:元素的背景是内容、内边距和边框区的背景。设置背景颜色时是没有问题的,背景色显示在边框下面,但是当使用背景图片时你会发现左边框和右边框下面并没有背景图片。这时需要把position-x和position-y设成负值,大小为border的宽度。我个人猜测原因是background-position的起始点是padding的左上角。
背景图片
背景定位
背景定位主要有三种方式:关键字,百分比和长度值。长度值比较简单,就是以元素的左上角为起点找到对应的坐标,然后从该点开始显示背景图片。
关键字和百分比的用法有点相似,比如:right, top,该关键字的意思是将图片的右上角放到元素的右上角,然后向左下方向显示图片。百分数值是同时作用于元素和图片上,例如:20%, 20%,意思是将图片的20%, 20%那个点放到元素的20%, 20%那个点上,如果图片和元素的大小一致则背景图片的左上角和元素的左上角重叠。
其实关键字的用法就是百分数值用法的一种快捷方式,left, top对应0%, 0%,certer, center则对应50%, 50%,right, bottom对应100%, 100%。
em
em是W3C推荐的尺寸单位,1em等于当前的字体尺寸。如果一个元素的 font-size 为 16 像素,那么对于该元素,1em 就等于 16 像素。在设置字体大小时,em 的值会相对于父元素的字体大小改变。如果父元素的字体大小为20px,则1em为20px。
浏览器中默认的文本大小是 16 像素。因此 1em 的默认尺寸是 16 像素。如果body的font-size为100%,则所有元素的默认字体大小为1em,也就是16px。
当使用em为字体大小时,em的值为父元素字体大小。而当使用em为长度单位时,即用于设置宽高时,em的值则为当前字体大小而不是父元素字体大小。例如父元素字体大小为20px,当前的元素的样式为:font-size: 1.5em; width: 2em,则当前元素的字体大小为30px(20 * 1.5),宽度为60px(2 * 30)。
行高line-height
line-height 属性设置行间的距离(行高)。在应用到一个块级元素时,它定义了该元素中基线之间的最小距离而不是最大距离。line-height 与 font-size 的计算值之差(在 CSS 中成为“行间距”)分为两半,分别加到一个文本行内容的顶部和底部。行内元素不可以设置高度和垂直方向的margin和padding,但是可以通过line-height来影响行内元素的布局,可以包含这些内容的最小框就是行框。
line-height 的值可以设为"normal","number","length","%"。"length"的值可以是15px,或者1em等,"%"的值基于当前元素字体的大小,和em单位类似。"number"的值如1, 2等,最终的行高是用这个数字乘以字体的大小。
line-height 具有继承性,就是当前元素的行高会传给全部的后代,其中"length"和"%"会直接把当前的具体值传给后代,而"number"只会把"number"本身传给后代,如1,而不会把乘以字体大小的值传给后代,后代元素拿到这个"number"之后再乘以它自己的字体大小,这样就比较灵活了,而且更合理。因此推荐使用"number"来设置行高。
font-family
CSS 定义了 5 种通用字体系列: Serif 字体, Sans-serif 字体,Monospace 字体,Cursive 字体,Fantasy 字体。其中我们比较常用的是Serif字体和Sans-serif 字体,Serif字体通俗讲就是有衬线字体,包括 Times、Georgia 和 New Century Schoolbook,而Sans-serif 字体则是无衬线字体,包括Helvetica、Geneva、Verdana、Arial 或 Univers。个体参考:CSS 字体系列
font-family的值可以是具体的字体,比如arial, times,也可以是字体系列,比如:"serif"、"sans-serif"、"cursive"、"fantasy"、"monospace"。如果是字体系列,浏览器就会从 sans-serif 字体系列中选择一个字体(如 Helvetica),因此设置字体时强烈建议将字体系列设为最后一个值,以防止前面设置的字体不能使用。
outline
outline (轮廓)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。它和border的区别是outline不参与布局,就是说outline不会影响元素的盒模型,至多和其它元素重叠,而border则是盒模型的一部分,很多时候设置border会影响元素的宽度。另外一个区别是outline不能单独设置某个边的outline。
outline的特性可以用于调试CSS,你可以给元素加个outline来看一下元素的大小和位置是否正确,而不会影响页面的布局。
box-sizing
W3C标准的盒模型是元素的宽高是由内容的宽高加上Padding和Border的值决定的,就是对一个元素设定Padding和Border不会影响元素内容的宽高。而IE6以下的浏览器包括怪异模式(Quirks Mode)下的所有IE浏览器的盒模型为元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制,就是说给元素设定width: 100px,则100px包括了内容的宽度,Padding和Border,如果Padding和Border的值改变,则元素内容的宽度也会改变,因为它们的总和始终是100px。
早几年的前端开发人员估计都被这个差异性折磨过,我也曾经痛恨这个问题。但是IE的这种做法也有方便的地方,所以在CSS3中引入了box-sizing属性,它的一个值是border-box,即可实现IE5的那种盒模型。我们举个例子来说明IE这种模型的用途。
场景是一个100px固定宽度的元素,需要一个背景色,内容离边框有10个px。如果是用W3C标准盒模型,代码如下:
height: 80px;
padding: 10px 0;
下面的是CSS3的box-sizing: border-box的代码:
box-sizing: border-box;
height: 100px;
padding: 10px 0;
W3C标准盒模型需要根据Padding和Border的值来计算内容的高度,并且一旦Pading和Border的值被修改,height的值必须跟着一起修改,这在开发阶段尤其麻烦。而box-sizing: border-box盒模型下,则不用考虑这些问题,只要设个高度为100px就行了,浏览器会自动根据元素的Padding和Border来对动态调整元素的内容的高度。示例代码
box-sizing的另外一个值是content-box,这个就是W3C标准的盒模型,这个值也是box-sizing的默认值。box-sizing是CSS3引入的一个样式,但是因为IE8就开始支持了,所以如果不考虑IE6和IE7的话就可以放心使用了。如果还不清楚请参考:CSS3 Box-sizing。
参考文献
如需转载,请注明来自: BorisHuai前端修炼 > CSS语言精粹
[置顶] CSS语言精粹的更多相关文章
- [置顶] CSS+DIV总结
HTML在Web飞速发展的过程中起着重要作用,有着重要地位.HTML初衷是为了表达标签(<p>.<table>)的内容信息.同时文档布局由浏览器来完成,不使用任何格式 ...
- [置顶] css 背景透明,文字不透明,alpha滤镜,opacity,position:relative;
都知道,在alpha滤镜下,背景透明了,里面的文字也会跟随透明,我们可以设置内容的position为relative可以解决这个问题 但是在position为absolute这么做却没有效果,怎么解决 ...
- [置顶] 轻量级语言Lua入门
作为一个脚本爱好者,而且是脚本(Perl)起家的我,一有空就喜欢学习下这些脚本语言.据说魔兽世界.愤怒小鸟都用到了它,所以今天研究下Lua这个叫法有点奇特的脚本 [转载请注明出处:http://blo ...
- [置顶]
C语言学习入门
编译文件:cc -c one.c two.c 生成.o目标文件 链接文件:cc one.o two.o 默认生成 a.out 执行文件 指定生成的可执行文件名 cc -o one one ...
- [置顶]
C语言itoa()函数和atoi()函数详解(整数转字符C实现)
头文件:#include <stdlib.h> atoi() 函数用来将字符串转换成整数(int),其原型为: int atoi (const char * str); [函数说明]ato ...
- [置顶] C语言单元测试框架
unitest.h /****************************************************************************** * * * This ...
- [置顶] C语言中各种数据类型的长度 sizeof char, short, int, long, long long
这些数据类型的sizeof具体长度依赖于编译器和操作系统(32-bit or 64-bit) 1: 首先,参见c99标准 标准中没有定义这些数据类型的长度,而是定义了这些数据类型能表达的大小范围的最小 ...
- [置顶]
C语言中 || 和 &&
|| 或操作,|| 为界将表达式分为两部分,他会先算前一部分,如果前一部分为真,他将停止运算,如果为假,他才会算第二部分,你这里第一部分就为真了,第二部分当然也就不会算了. 例如: a || b , ...
- 《JavaScript语言精粹》小记
一.前言 以下内容均摘自<JavaScript语言精粹>一书,本人在读这本书时,发现作者诠释JavaScript很犀利,特别是数组部分,固记录下来,想和大家分享下. 随笔主要包含两大部分: ...
随机推荐
- 转:XSS知识大总结
转:https://www.jianshu.com/p/75a3d9332b8c XSS知识大总结 2016.10.28 21:05* 字数 1332 阅读 961评论 2喜欢 13 XSS-即Cro ...
- EL和JSTL的关系
JSTL与EL的关系:EL的功能是有限的,去集合只能取特定的某一个元素,如果遍历或循环就不行了,或者添加一些条件分支判断也不行,或做一些格式化,比如日期的格式化,数字的格式化,也不行,所以要做这些功能 ...
- linux——(8)数据流重定向、管道命令
概念一:数据流重定向 数据流分输入流和输出流,还有一个标准错误流,负责管理出错信息,比如一般的命令的输出会输出到屏幕上,我们可以用重定向让他输入到某个文件内. 相关操作: 1,标准输入(stdin): ...
- django验证码配置与使用
1.安装django-simple-captcha pip install django-simple-captcha 2.配置settings.py ##加app列表INSTALLED_APPS = ...
- FastReport.Net使用:[33]高亮显示
1.首先来看下初始报表,很简单很普通. 2.下面对报表改进,90分以上的成绩以绿色显示,60~70分的以橙色斜体显示. 报表设计中选择数据成绩文本框,然后点击工具栏上的“ab突出显示”按钮打开“高亮显 ...
- 20162304 实验一《Java开发环境的熟悉》实验报告
Linux基础与Java开发环境 实验内容 1.熟悉Linux基础操作: 2.使用JDK编译.运行简单的Java程序: 实验要求 1.学习<Linux基础入门(新版)> 2.完成实验.撰写 ...
- 2015 UESTC 数据结构专题N题 秋实大哥搞算数 表达式求值/栈
秋实大哥搞算数 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1074 Des ...
- 发展中的生命力——Leo鉴书69
接触<寻路中国>是在2011年11月24号的正略读书会上.当期主讲嘉宾是万圣书园创始人刘苏里,也是著名的大书评人.读书会有个传统就是每期推荐一本书.当期推荐就是<寻路中国>.事 ...
- MOSFET shunt regulator substitutes for series regulator
You would normally use a series linear regulator or a dc/dc converter to obtain 3V dc from a higher ...
- POJ 1293 - Duty Free Shop 01背包记录所选物品
裸的01背包.dp[x]只要是bool型记录当前空间是否可用.. 而为了找到用了哪些物品..dp[x]设置为int型..进行记录.. Program: #include<iostream> ...