选择器-
[-]规则
-
@charset@charset "utf-8";
在外部样式表文件内使用。指定该样式表使用的字符编码。
该规则后面的分号是必需的,如果省略了此分号,会生成错误信息。 - @import指定导入的外部样式表
- selector选择器支持一览.值得注意的是.class.class IE6并不识别
-
选择器优先级
1.三种引入方式的优先级
2.同引入方式内的基本原则:
一般而言,选择器越特殊,它的优先级越高。也就是选择器指向的越准确,它的优先级就越高。
复杂的计算方法:
●用1表示派生选择器(用HTML标签申明)的优先级
●用10表示类选择器(用一个样式类名申明)的优先级
●用100标示ID选择器(用DOM的ID申明)的优先级
●div.test1 .span var 优先级 1+10 +10 +1
●span#xxx .songs li 优先级1+100 + 10 + 1
●#xxx li 优先级 100 +1
3.Tips:样式在html中的先后顺序不决定样式优先级,由CSS中定义的先后和优先级有关 参考资料
4.Tips:选择器拾遗漏 - !important提升指定样式规则的应用优先权。
但在IE6中有BUG,需要分开写在2个选择符中
参考资料:GO TO! - 其他css延迟加载
[-]HACK
-
if IE
条件HACK
参考资料:GO TO! -
_property属性级HACK
key: value\9; IE6~10 key: value\0; Oprea+IE8~10 .key: value; IE6+7+8 *key: value; IE6+7 (+或#亦可) _key: value; IE6 (-亦可) [;property:value;]; webkit(Chrome,Safari) @-moz-document url-prefix(){..} FireFox @media screen and (-webkit-min-device-pixel-ratio:0) {..} webkit(Chrome,Safari)
参考资料1:GO TO!
参考资料2:GO TO!
参考资料3:GO TO! -
*html selector选择符级HACK
*html selector: IE6及以下
*+html selector : IE7
结合选择器能力 - expression表达式,IE6-7支持,IE8不支持
[-]常用选择符
- *通配符
- tagName元素标签名
- #id#id选择器,也可以ele#id
- .class类选择器,可以连缀.class1.class2
- E F后代选择器
- E>F子选择器
- E+F相邻选择器
- E~F兄弟选择器
[-]伪类选择符
-
:link/:visited/:hover/:active
a:hover 必须位于 a:link 和 a:visited 之后,a:active 必须位于 a:hover 之后(LVHA)
a:link{}
a:visited{}
a:hover{}
a:active{}
目前hover可用于任何元素,例如li:hover{},也可以用为li:hover a{}
IE6中:hover只对a元素有效,可通过JS控制 - :not(selector)匹配不含有s选择符的元素E
-
:first-child
:first-child 第一个子元素,前缀为被选元素,必须是第一个子元素而非第一个本类子元素
:first-of-type 该选择符总是能命中父元素的第1个为E的子元素,不论第1个子元素是否为E -
:last-child
:last-child 最后一个子元素
:last-of-type 最后一个此类元素 - :nth-child(n)
:nth-child(n) 第N个子元素
:nth-child(2n) 偶数,:nth-child(2n+1) 奇数
第N个子元素,如果有不同类别的其他同级标签元素亦会增长序列数
:nth-of-type(n) 第N个此类子元素 -
:only-child
:only-child 唯一一个子元素
:only-of-type 为父元素中唯一元素的此类元素 - :focus设置对象在成为输入焦点(该对象的onfocus事件发生)时的样式。
webkit内核浏览器会默认给:focus状态的元素加上outline的样式,设置:focus{outline:0} - :empty匹配没有任何子元素(包括text节点)的元素E。
- :target匹配相关URL指向的HASH目标元素。
[-]属性选择符
- [att]含有属性
- [att='val']属性值为指定
- [att~='val']选择具有att属性且属性值为一用空格分隔的字词列表,其中一个等于val的E元素(包含只有一个值且该值等于val的情况)。完整包含,而非字符串。
- [att^='val']属性值以..开头
- [att$='val']属性值以..结尾
- [att*='val']属性值包含..字符串
- [att|='val']属性值以val开头并用连接符"-"分隔的字符串的元素
[-]其他选择符
- :lang(zh-cn)匹配使用特殊语言的E元素。
- :root匹配E元素在文档的根元素。在HTML中,根元素永远是HTML
- :checked匹配用户界面上处于选中状态的元素E。(用于input type为radio与checkbox时),不包含下拉菜单
- :enabled匹配用户界面上处于可用状态的元素E。
- :disabled匹配用户界面上处于禁用状态的元素E。
文本-
[-]字体
- font([i b]size/lh family)【简写】font:italic bold 18px/22px 'Consolas' (简写时font-size和font-family属性不可省略)顺序不对则有可能出现BUG
- font-size(px/180%)
字体大小,浏览器默认大小为1em(一般为16px),移动端则使用rem,PC端使用px。
% : 页面元素中font-size使用百分比时,其百分比取值是基于父对象中字体的尺寸,不允许简写百分比。字体没有相对父盒子大小比例扩展算法。
px : 像素,相对长度单位。1in = 2.54cm = 25.4 mm = 101.6q = 72pt = 6pc = 96px;
em : 相对长度单位.相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。 PX转EM快速工具
rem : 相对长度单位。相对于根元素(即html元素)font-size计算值的倍数。设置字体html{font-size:62.5% = 10px},则1.2rem=12px(手机端HTML5元素不主动继承body字体大小时,使用*)
vm : 视窗可用宽度,0~100.(除去滚动条) - line-height(px/180%/1.8)
行高,可为百分比或乘积因子,具有继承性
% : 当为百分比时,子级会继承父级,此时的百分比,基于父级的字体大小的百分比,可能发生重叠(不具动画性)。参考资料
1.5 : 当为乘积因子时,以自身的百分比150%=1.5。
扩展阅读:
linebox模型与基线等 | 行高的深入理解
兼容处理:
1.在FF中的对齐规则BUG,解决方案使用FF专属HACK@-moz-document url-prefix(){some-style}
2.使用乘积因子时,IE7对1处理不当,需设置1.1或避免设置为字符等高。 - font-weight(bold/normal)粗体,normal正常=400,bold粗体=700,取值100~900
- font-style(italic/normal)normal正常,italic字体自带斜体,oblique人为斜体
- font-variant(small-caps)normal正常的字体,small-caps小型的大写字母字体
- font-family
按优先顺序排列。以逗号隔开。如果字体名称包含空格或中文,则应使用引号括起。
常用字体:Helvetica,Verdana,Arial,Consolas,Georgia,Impact,Trebuchet MS,Comic Sans MS,Tahoma,Time News Roman,微软雅黑,宋体
参考常用字体预览
移动端字体设置font-family: "Helvetica Neue", Helvetica, STHeiTi, sans-serif; 参考资料 - @font-face{f:'n',src:'url'}
@font-face 必须在字体使用前引入
@font-face {
font-family: 'diyfont';
src: url('diyfont.eot'); /* IE9+ */
src: url('diyfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('diyfont.woff') format('woff'), /* chrome、firefox */
url('diyfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
url('diyfont.svg#fontname') format('svg'); /* iOS 4.1- */
}
.iconfont{
font-family:"iconfont";
font-style:normal;
display:block/inline-block;
-webkit-font-smoothing: antialiased;
-webkit-text-stroke-width: 0.2px;
}
放在html中时写为“& #xe62a;”赋值以对应class,当为伪元素content引用时,赋值“\e62a”
图标字体 alibaba / Glyphicons / icomoon
更多字体 Get it!
字体转换 将一种字体转为网页所需的所有格式
[-]文本属性
- text-align(l/r/c/j)
水平对齐:center居中,left左,right右,justify两端对齐
对inline/inline-block元素均有效,在IE6-7下对block也有效
在父级设置,让子级中内联(块)元素水平居中对齐父级 - vertical-align(t/b/m)
垂直对齐:
长度 通过距离升高(正值)或降低(负值)元素。 '0cm'
等同于'baseline'
百分值 – % 通过距离(相对于line-height值的百分大小)升高(正值)或降低(负值)元素。 '0%'
等同于'baseline'
baseline 默认。元素的基线与父元素的基线对齐。 sub 降低元素的基线到父元素合适的下标位置。 super 升高元素的基线到父元素合适的上标位置。 top 把对齐的子元素的顶端与line box顶端对齐。 text-top 把元素的顶端与父元素内容区域的顶端对齐。 middle 元素的中垂点与 父元素的基线加1/2父元素中字母x的高度 对齐。 bottom 把对齐的子元素的底端与line box底端对齐(受line-height影响)【line-box底端】。 text-bottom 把元素的底端与父元素内容区域的底端对齐。【content-area底端】 inherit 采用父元素相关属性的相同的指定值。
对inline/inline-block元素有效,例如默认的图片,表单控件
在子级设置,让自身与同级元素垂直对齐,而非对子集!
参考资料 - text-indent([+-]Npx)
缩进,可为负值.
div内部的第一行及每个强制换行的首行都拥有2em的缩进:text-indent:2em each-line;【CSS3】
技巧:对于要保留html文字,但不显示的文字,可设置text-indent:-999px/100%【SEO】
对内联a应用text-indent无效,需将a设置为block/inline-block - :first-letter对象内第一个字符
选择符与包含规则的花括号之间不能紧挨着,需留有空格或换行。
例 p:first-letter[_]{} ([_]处保留空格) - :first-line对象内第一行
选择符与包含规则的花括号之间不能紧挨着,需留有空格或换行 - letter-spacing(Npx)字母/中文字间隔
- word-spacing(Npx)单词间隔
[-]文本样式
- text-transform(c/u/l)
none: 无转换
capitalize: 将每个单词的第一个字母转换成大写
uppercase: 将每个单词转换成大写
lowercase: 将每个单词转换成小写 - text-decoration(n/u/o/t)none:无
underline:下划线
overline:上划线
line-through:删除线 - text-shadow(1px 1px 2px #248)文本阴影:1px 1px 5px #000; (水平,垂直,模糊半径,颜色)
在线生成3DCSS文字GO TO! - ::selection对象被选择时的样式,必须使用双冒号【CSS】
::selection只能定义被选择时的background-color及color - -webkit-text-fill-color
文字的填充颜色,默认值transparent
彩条文字line-height: 20px; -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-image: linear-gradient( to bottom, #9588DD, #9588DD 25%, #DD88C8 25%, #DD88C8 50%, #D3DD88 50%, #D3DD88 75%, #88B0DD 75%, #88B0DD); background-size: 100% 80px;
- -webkit-text-stroke文字的描边,1px #ff3399
- -webkit-text-stroke-width文字描边厚度
- -webkit-text-stroke-color文字描边颜色
[-]文本折行
- white-space(Npx)
normal:默认处理方式。
nowrap: 强制在同一行内显示所有文本,合并文本间的多余空白,直到文本结束或者遭遇br对象。
常用片段(设置宽度):white-space:nowrap;text-overflow:ellipsis;overflow:hidden; - text-overflow(ellipsis/str)文本溢出:clip剪裁掉/ellipsis点点点/string指定字符串【CSS3】
多行文本省略(webkit) display: -webkit-box; /* height: 36px; line-height: 18px; */ -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - word-wrap当内容超过指定容器的边界时是否断行
normal:允许内容顶开或溢出指定的容器边界。
break-word:内容将在边界内换行。如果需要,单词内部允许断行。
断行控制片段word-wrap: break-word;word-break: break-all; - word-break对象内文本的字内换行行为
normal:依照亚洲语言和非亚洲语言的文本规则,允许在字内换行。
keep-all:与所有非亚洲语言的normal相同。对于中文,韩文,日文,不允许字断开。适合包含少量亚洲文本的非亚洲文本。
break-all:该行为与亚洲语言的normal相同。也允许非亚洲语言文本行的任意字内断开。该值适合包含一些非亚洲文本的亚洲文本,比如使连续的英文字母间断行。
[-]文本流
- unicode-bidi(bidi-override)
normal:对象不打开附加的嵌入层,对于内联元素,隐式重排序跨对象边界进行工作。
embed:对象打开附加的嵌入层,direction属性的值指定嵌入层,在对象内部进行隐式重排序。
bidi-override:严格按照direction属性的值重排序。忽略隐式双向运算规则。
用于同一个页面里存在从不同方向读进的文本显示。与direction属性一起使用 - direction(ltr/rtl)
ltr:文本流从左到右。
rtl:文本流从右到左。
设置direction:rtl;unicode-bidi:bidi-override;实现古文排字效果 - writing-mode书写模式
horizontal-tb:水平方向自上而下的书写方式。即 left-right-top-bottom(类似IE私有值lr-tb)
lr-tb:左-右,上-下。对象中的内容在水平方向上从左向右流入,后一行在前一行的下面。 所有的字形都是竖直向上的。这种布局是罗马语系使用的(IE)
vertical-rl:垂直方向自右而左的书写方式。即 top-bottom-right-left(类似IE私有值tb-rl)
vertical-lr:垂直方向自左而右的书写方式。即 top-bottom-left-right
tb-rl:上-下,右-左。对象中的内容在垂直方向上从上向下流入,自右向左。后一竖行在前一竖行的左面。全角字符是竖直向上的,半角字符如拉丁字母或片假名顺时针旋转90度
[-]内容
- :before
设置在对象前(依据对象树的逻辑结构)发生的内容。IE6-7不支持,IE8支持。
用来和content属性一起使用,并且必须定义content属性!必要时候即使有block表现仍需定义宽度
伪元素的位置在内容之后,如果内容为空,则在起点,即使指定了父级尺寸 - :after
设置在对象后(依据对象树的逻辑结构)发生的内容。IE6-7不支持,IE8支持。
用来和content属性一起使用,并且必须定义content属性!必要时候即使有block表现仍需定义宽度 - content(str/attr/url/count)
content:'str' 一个字符串或符号,需加引号,例如 '»'
content:attr(标签名) 载入此标签的一个属性节点上的内容,例如title
content:url('文件地址') 使用指定的绝对或相对地址插入一个外部资源(图像,声频,视频或浏览器支持的其他任何资源)
content:counter(name,list-style-type)使用一个已命名的计数器
参考资料:GO TO! - counter-increment(name [N])
定义一个计数器,并设定累加值,默认为1,可以为负值。
在要计数的对象上设置 li{counter-increment:test 1}
在起始伪对象上启用 li:before{content:counter(test)'.'}
参考资料:GO TO!
实例演示:GO TO! - counter-reset(name [N])
复位计数器,默认为0.
在要复位的对象(伪元素)上设置 li:before{counter-reset:test -1}
参考资料:GO TO!
复杂嵌套:GO TO!
嵌套原理:
1级列表设置计数器1,1级列表的before伪元素启用计数器1
2级列表设置2计数器2,2级列表的before伪元素启用计数器2
1级列表设置清空计数器 - quotes('['*4)
设置或检索对象内使用的嵌套标记。
设置标签的包围符号:q{quotes:'外层左标记' '外层右标记' '内层左标记' '内层右标记'}
参考资料:GO TO!
样式-
[-]样式
-
box-shadow
盒子阴影,box-shadow:2px 2px 5px 50px #000 inset
水平,垂直,模糊半径,阴影大小,颜色,内阴影
可用逗号分隔多个阴影,制作复杂重叠阴影效果
投影制作:GO TO!
长阴影:GO TO!
投影彩带:GO TO! -
-webkit-box-reflect
-webkit-box-reflect:none/direction offset mask
可应用于盒子或者直接应用于图片
direction(倒影方向): above / below / left / right
offset(倒影与源间隔): length / %
mask(蒙版): url() / gradient -
(new)filter
ele {filter: none |
* }
函数不传值,默认为100%=1完全渲染,多个函数之间用空格隔开
grayscale() 灰度,黑白
sepia() 褐色,黄褐色旧照片
saturate() 饱和度
hue-rotate() 色相旋转
invert() 反色
opacity() 透明度
brightness() 亮度
contrast() 对比度
blur(3px) 模糊
drop-shadow(5px 5px 5px #ccc) 阴影
参考资料 示例
[-]颜色
-
color
1.颜色:red(颜色名称),#ff3399(16进制),rgb(255,0,255)
2.transparent
IE6及更早浏览器(CSS1)只有background-color接受transparent取值。
IE7及IE8(CSS2)除了background-color,还有border-color也开始接受transparent取值。
在CSS3中,transparent被延伸到任何一个有color值的属性上。
*IE8及以下,color属性值为transparent时,文本显示为黑色。
IE6透明边框的处理_border-color: #000000; _filter: ~"progid:DXImageTransform.Microsoft.Chroma(color='#000000')";
3.rgba(255,255,255,0.8)
带Alpha通道的颜色模式,可以半透明(IE8-不支持)
让IE8-通过IE滤镜来实现rgba效果background: rgba(0,0,0,.92); filter:progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr=#CC000000, endColorstr=#CC000000);
扩展知识:DXImageTransform.Microsoft.gradient 滤镜里的 startColorstr 参数值是 #AARRGGBB 形式的, 其中的AA是代表不透明度的十六进制,00表示完全透明,FF就是全不透明,化成十进制的范围就是0~255,剩下的 RRGGBB 就是颜色的十六进制代码。
举例如:background: rgba(125, 0, 0, .3); 表示的是30%不透明度的红色背景。把30%的不透明度转换成十六制呢的方法如下:先计算#AA的的十进制x,x/255 = 3/10,解得x=3*255/10,然后再把x换算成十六进制,约等于4C。
4.hsl,h色环角度,s饱和度,l亮度 Paletton.com - currentColor
让Border/backgroud等沿袭color的颜色
参考资料 - opacity
透明度:使用浮点数指定对象的不透明度。值被约束在[0.0-1.0]范围内,如果超过了这个范围,其计算结果将截取到与之最相近的值。
注意如果父级应用了此透明度方法,则子元素也会跟随一起透明,不受影响可以将子元素写在外面,再通过负值的margin或其他定位方法定位.
IE8-不支持此属性,但可以用IE滤镜来处理,片段.tm(@tm){ @alpha:@tm*100; opacity:@tm; filter:alpha(opacity=@alpha); }
-
(ie)filter
IE特有的滤镜属性,配合上述实现透明颜色,透明区块,另外由于IE无法正常显示PNG透明图片,当图片用作为背景图时,同样可以使用本属性解决.
background:url('../images/ex.png') no-repeat; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="images/ex.png");
*注意:通过滤镜对引入图片,滤镜引入图片的时候是相对于HTML文件,而不是相对于CSS文件,建议引入绝对路径。此方法不能应用于平铺图像!
完整参考文档:GO TO!
IE6使用滤镜PNG图片透明后,容器内链接失效,设置a{_position:relative;}
扩展资料
ie filter滤镜的说明:
1.ie9滤镜重叠,给定统一class在条件注释中取消ie9滤镜。
2.z-index与filter的渲染冲突bug。详情
3.ie8中对img包裹元素a滤镜失效需要设置在img上。
[-]背景
-
background
[简写]background:#222 url() Xpx Ypx/size repeat attachment clip origin,...
逗号隔开每组background的缩写值;如果有size值,需要紧跟position并且用"/"隔开;
分解写法时,background-color只能设置一个。
缩写时,如果前面设置了独立属性,在缩写中未被定义的会被覆盖会空或默认值,如果在后面补充了的,后面的属性会自动合并到缩写中,如果该属性不被支持,则造成整个缩写属性无法识别!因根据情况全部分开写。 - background-color背景颜色,可用rgba来设置半透明背景,而不是用opacity,制作一些遮罩效果
- background-position背景图的位置,可以为负值和百分比,也可以用left(x=0),right(x=100%),top(y=100%),bottom(y=100%).先写水平,后写垂直.背景图的50%居中以图形中心为基点,不需要再移动自身一半尺寸
雪碧图:CSS GAGA
BASE64编码:GO TO! - background-size
background-size: Xpx Ypx / A% B% / cover / contain / auto
cover:顾名思义为覆盖,即将背景图片等比缩放以填满整个容器;【全兼容的方式,独立图层img~100%】
contain:容纳,即将背景图片等比缩放至某一边紧贴容器边缘为止。
x% y%:百分比大小,占满父元素空间的百分比,可能导致图片变形
x% auto | auto y%:使元素占父元素宽/高的百分比,并等比缩放~!
一些情况不能识别/,反编译时候只需要反编译值,而不包括属性! -
background-repeat平铺方式:
repeat-x:背景图像在横向上平铺
repeat-y:背景图像在纵向上平铺
repeat:背景图像在横向和纵向平铺
no-repeat:背景图像不平铺
round:背景图像自动缩放直到适应且填充满整个容器。
IE6不指定此属性时,默认不平铺,其他浏览器默认平铺 - background-attachment
fixed【相对浏览器固定】背景图像相对于窗体固定。
scroll【相对元素固定】背景图像相对于元素固定,也就是说当元素内容滚动时背景图像不会跟着滚动,因为背景图像总是要跟着元素本身。但会随元素的祖先元素或窗体一起滚动。
local【相对元素内容固定】背景图像相对于元素内容固定,也就是说当元素随元素滚动时背景图像也会跟着滚动,因为背景图像总是要跟着内容。 -
background-clip
padding-box:从padding区域(不含padding)开始向外裁剪背景。
border-box:从border区域(不含border)开始向外裁剪背景。(默认)
content-box:从content区域开始向外裁剪背景。
text:从前景内容的形状(比如文字)作为裁剪区域向外裁剪,如此即可实现使用背景作为填充色之类的遮罩效果。
TEXT剪裁方式的遮罩效果:GO TO! -
background-origin
padding-box:从padding区域(含padding)开始显示背景图像。(默认)
border-box:从border区域(含border)开始显示背景图像。
content-box:从content区域开始显示背景图像。 - background-image图像url(''),无none,渐变
-
grandient tools
图片渐变获取:从图片读取渐变生成CSS
仿PS渐变生成:GO TO!
渐变按钮生成:简洁 / 玻璃 / 水晶 / 简单 / 质感 -
[img]linear-grandient()
background:linear-gradient(point,#colorA lengthA/A%,……#colorB lengthB/B%) 线性渐变
point:left/right/top/bottom/N deg 方向或角度
默认以垂直上方点为0度向下
技巧应用实例:使用1像素背景渐变绘制分割线 /*使用伪元素制作导航列表项分隔线*/ .nav li:after{ content:""; width:1px; height:15px; position:absolute; right:0; top:20px; background:linear-gradient(0deg,#990000,#ff0000,#990000); } /*删除第一项和最后一项导航分隔线*/ .nav li:last-child:after{ width:0; height:0; }
- [img]repeating-linear-gradient()
- [img]radial-grandient()
background:radial-gradient(position,shape,#colorA lengthA/A%,……#colorB lengthB/B%)径向渐变
position:left~center/lengthA lengthB/A% 5% 指定圆心位置
shape:ellipse/circle形状
可以使用rgba色,设置从透明到渐变效果! - [img]repeating-radial-gradient()
界面-
[-]用户界面
-
cursor
设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状。
格式:使用自定义图像作为光标类型,IE, Opera只支持*.cur等特定的图片格式;Firefox, Chrome, Safari既支持特定图片类型也支持常见的*.jpg, *.gif, *.jpg等图片格式。
兼容:cursor的属性值可以是一个序列,用逗号分隔地址,优先级递降。示例代码: :link,:visited{ cursor:url(example.svg#linkcursor), url(hyper.cur), url(hyper.png) 2 3, pointer; } 本例用来给所有的超链接定义光标类型,客户端如果不支持SVG类型的光标,则使用下个"hyper.cur";如果cur类型也不支持,则使用下个"hyper.png";依次类推。
附录:值 描述 url 需使用的自定义光标的 URL。 注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标。 default 默认光标(通常是一个箭头) auto 默认。浏览器设置的光标。 crosshair 光标呈现为十字线。 pointer 光标呈现为指示链接的指针(一只手) move 此光标指示某对象可被移动。 e-resize 此光标指示矩形框的边缘可被向右(东)移动。 ne-resize 此光标指示矩形框的边缘可被向上及向右移动(北/东)。 nw-resize 此光标指示矩形框的边缘可被向上及向左移动(北/西)。 n-resize 此光标指示矩形框的边缘可被向上(北)移动。 se-resize 此光标指示矩形框的边缘可被向下及向右移动(南/东)。 sw-resize 此光标指示矩形框的边缘可被向下及向左移动(南/西)。 s-resize 此光标指示矩形框的边缘可被向下移动(北/西)。 w-resize 此光标指示矩形框的边缘可被向左移动(西)。 text 此光标指示文本。 wait 此光标指示程序正忙(通常是一只表或沙漏)。 help 此光标指示可用的帮助(通常是一个问号或一个气球)。 -
resize(both)
设置或检索对象的区域是否允许用户缩放,调节元素尺寸大小。
如果希望此属性生效,需要设置对象的overflow属性,值可以是auto,hidden或scroll。
none:不允许用户调整元素大小。
both:用户可以调节元素的宽度和高度。
horizontal:用户可以调节元素的宽度
vertical:用户可以调节元素的高度。 -
ime-mode(disabled)输入法状态:设置或检索是否允许用户激活输入中文,韩文,日文等的输入法(IME)状态。
auto:不影响IME的状态。
normal:正常的IME状态
active:指定所有使用ime输入的字符。即激活本地语言输入法。用户仍可以撤销激活ime
inactive:指定所有不使用ime输入的字符。即激活非本地语言。用户仍可以撤销激活ime
disabled:完全禁用ime。对于有焦点的控件(如输入框),用户不可以激活ime - pointer-events(none/auto)
pointer-events:none 开启穿透点击,忽略自身
pointer-events:auto 忽略部分的内部重新开启
详细资料 -
user-select(none)
禁止用户选中文字
none:文本不能被选择
text:可以选择文本
all:当所有内容作为一个整体时可以被选择。如果双击或者在上下文上点击子元素,那么被选择的部分将是以该子元素向上回溯的最高祖先元素。
element:可以选择文本,但选择范围受元素边界的约束
IE6-9不支持该属性,但支持使用标签属性 onselectstart="return false;" 来达到 user-select:none 的效果;Safari和Chrome也支持该标签属性;
直到Opera12.5仍然不支持该属性,但和IE6-9一样,也支持使用私有的标签属性 unselectable="on" 来达到 user-select:none 的效果;unselectable 的另一个值是 off;
除Chrome和Safari外,在其它浏览器中,如果将文本设置为 -ms-user-select:none;,则用户将无法在该文本块中开始选择文本。不过,如果用户在页面的其他区域开始选择文本,则用户仍然可以继续选择将文本设置为 -ms-user-select:none; 的区域文本;
html:
css:禁止被选择的文字
p{user-select:none;} //在自动生成前缀时
- appearance(none) 设置或检索外观按照本地默认样式
-
:placeholder
占位提示字符
&:-moz-placeholder &:-ms-input-placeholder &::-webkit-input-placeholder color: @color; font-size:@size; text-align:@align;
[-]兼容
- -moz-focus-inner火狐表单控件居中
- -webkit-searchwebkit搜索默认样式
- -ms-interpolation-mode:bicubicIE7图像缩放失真
[+]scrollbar
布局I-
[-]列表
- list-style[简写] img position type,无序列表ul,有序列表ol,自定义列表dl
可以用列表来进行布局,清除列表样式ul设置list-style:none,ul{padding:0,margin:0}
如标记为图片时一般用背景图来替代 - list-style-type
仅作用于具有display值等于list-item的对象(如li对象),如修改display值后不再显示(设置为块或其他特性均消失标记).
注意:ol,ul,dl对象的type特性为其后的所有列表项目(如li对象)指明列表属性。
此样式也可应用于counter计数器样式值 描述 none 无标记。 disc(默认) 实心圆。 circle 空心圆。 square 实心方块。 decimal 数字。( 1,2,3…… ) decimal-leading-zero 0开头的数字标记。( 01,02,03…… ) lower-roman 小写罗马数字(i, ii, iii, iv, v, 等。) upper-roman 大写罗马数字(I, II, III, IV, V, 等。) lower-alpha 小写英文字母The marker is lower-alpha (a, b, c, d, e, 等。) upper-alpha 大写英文字母The marker is upper-alpha (A, B, C, D, E, 等。) lower-greek 小写希腊字母(alpha, beta, gamma, 等。) lower-latin 小写拉丁字母(a, b, c, d, e, 等。) upper-latin 大写拉丁字母(A, B, C, D, E, 等。) hebrew 传统的希伯来编号方式 armenian 传统的亚美尼亚编号方式 georgian 传统的乔治亚编号方式(an, ban, gan, 等。) cjk-ideographic 简单的表意数字 hiragana 标记是:a, i, u, e, o, ka, ki, 等。(日文片假名) katakana 标记是:A, I, U, E, O, KA, KI, 等。(日文片假名) hiragana-iroha 标记是:i, ro, ha, ni, ho, he, to, 等。(日文片假名) katakana-iroha 标记是:I, RO, HA, NI, HO, HE, TO, 等。(日文片假名) - list-style-image
list-style-image:url(img.png)
定位位置上会有问题.以文字中线开始显示图片.
并且也只当li依旧为list-item特性时才有效.
一般使用背景图来制作列表背景. - list-style-position
指标记的内外方式,而非(图片)标记坐标位置
outside:列表项目标记放置在文本以外,且环绕文本不根据标记对齐(默认值)
1.当type在outside时,如RESET样式中设置ul的padding:0,则会看不到type图标(无论li是否设置padding);如设置ul的padding(例如)小于20,则type图标将会溢出在ul之外.
2.如设置li的padding-left,则标记位置不更改,而标记与内容之间拉开间距
3.如设置li的margin-left,则margin继承到标记之外,标记与父级拉开间距
inside:列表项目标记放置在文本以内,且环绕文本根据标记对齐。[查看演示]
1.当type在inside时,type会和文字一起距离浏览器默认padding缩进,设置padding:0时,则会贴边显示.
2.设置li的padding-left和margin-left视觉表现都为标记之外与父级拉开间距
[-]表格
- table-layout
适用于:table系元素。
auto:默认的自动算法。布局将基于各单元格的内容,换言之,可能你给某个单元格定义宽度为100px,但结果可能并不是100px。表格在每一单元格读取计算之后才会显示出来,速度很慢
fixed:固定布局的算法。在这算法中,水平布局是仅仅基于表格的宽度,表格边框的宽度,单元格间距,列的宽度,而和表格内容无关。也就是说,内容可能被裁切
关于text-overflow在单元格中的失效 - border-collapse
separate:边框独立
collapse:相邻边被合并
只有当表格边框独立(即border-collapse属性等于separate时),border-spacing和empty-cells才起作用。 - border-spacing
该属性作用等同于标签属性cellspacing(单元格边距)。border-spacing:0等同于cellspacing="0"
如果提供全部两个length值时,第一个作用于横向间距,第二个作用于纵向间距。
如果只提供一个length值时,这个值将作用于横向和纵向上的间距。
*一般将此值与表格内标签属性cellpadding,cellspacing均设为0,通过CSS边距来控制. - caption-side
top:指定caption在表格上边(默认)
bottom:指定caption在表格下边
要在IE7及以下浏览器中实现top与bottom参数值的效果,可直接在caption标签内定义标签属性valign为top和bottom。 - empty-cells
show:指定当表格的单元格无内容时,显示该单元格的边框。(默认)
hide:指定当表格的单元格无内容时,隐藏该单元格的边框。
IE7及以下浏览器中默认隐藏无内容的单元格边框,要想使其获得与show参数值相同的效果,可以变相给该空单元格加个占位且不可见的元素,例如全角空格或\ 等等。
[-]其他
- p/div 充分利用p,h1-h6等标签进行语义化.但不要在p中放置h1-h6,结构出错。
- h1-h6 在H内部直接放置浮动右元素,IE7会换行,改用position定位
-
ul/li
1.用ul+li打造table效果时,可以自适应宽度换行,边框设置的方式,设置全框,负margin,可规避padding及屏幕尺寸变化问题.
2.IE6下ul默认表现为block,浮动后依旧占据100%,即使父级浮动,需要自身表现为dbi或fl(设置为dbi如果没有压缩html会出现空格),即用到ul,li来构造布局时,注意给ul,li添加浮动hack。
3.在ul,li布局时,如非标准结构,在IE67中可能会解析错误导致bug,当非标准结构时建议使用div替代ul,li。
4.ul表现为dbi在部分原生IE8中可能有渲染bug,添加margin强制渲染占据宽度。 -
table
1.表格中插div会脱离表格在外
2.表格中对合并后 或tr 表现为block,会只有第一个单元格宽度,可直接应用arrow,tr的显示应用table-row而非block
3.垂直th添加scope="col" -
a/img
a
1.IE10-对于a与同级元素,空的a调整层级或顺序仍然无法点击,需要将a包裹其他元素
2.在平板中a标签中包含:hover触发改变display:none/block的元素,旧平板无法点击,将display切换改为透明度更改并可能需要修改ie78的filter值
img
1.当利用图片一侧尺寸铺满,另一侧自动来构造自动伸缩div时,需要设置图片db,否则会因图片dbi产生3px空白。 -
form
1.IE6-8表单元素默认不继承父级字体大小.
2.IE6-8表单控件元素不继承form字体行高. - input radio/checkbox 1.单复选框的对齐问题,可用vertical-algin:-3px解决。参考资料
-
input text
1.IE6-8中,input text不会因为行高而撑开高度,按钮正常
2.IE6-7中,对input设置text-indent会整个缩进,应设为padding
3.input默认为border-box模型,宽高包含padding与border! - button 1.Chrome中,input button不会因行高而撑开高度,text正常
-
select
0.最小高度24px.
1.chrome等可直接通过行高撑开高度,IE8-不可.
2.IE8需要通过padding,但使用padding方法时,IE8-绘制border会把里面按钮也绘制。
3.IE7需要设置height,但行高仍然无法使字体垂直居中。
4.IE6无法撑开高度。
5.height非字体height,而是包含了padding,border的height,默认为border-box。
6.右侧padding在IE中(包括11)会出现在下拉按钮以外,故不应设置过大。
[-]多列
- columns(Npx [M])
多列,简写时注意加s,简写中只含宽度(带单位,不能百分比)和列数.Chrome需要前缀-webkit-
应用于除table外的非替换块级元素,display:table-cell 元素, 内联块元素。
实现多列的是里面的内容,而非自身.
简写方式一:设置width,column:200px 3(固定3列200宽。)
简写方式二:column:200px (自动根据父级宽度生成X列)
同时指定2个值时,优先先按列数来分配宽.例如浏览器宽度1800px,指定3列200px宽,结果为分配为3列600px宽,忽略200宽指定值;如果指定宽度200px,未指定列数,则按宽度自动平分为9列
参考资料:替换/非替换块级/内联元素 - column-width(Npx)列宽
- column-count(N)列数
- column-gap(Npx)列间隔
- column-rule(1px solid #ccc)列间隔边框 1px solid #ccc
column-rule-style等同于border样式 - column-span(N/all)列横跨,适用于:除浮动和绝对定位之外的块级元素
是否横跨全部,all和none,不可设置数值非表格,此属性应设置在被应用多列属性的子元素上,多列无继承性,对于不想被继承多列的元素应写在多列父元素之外,而非去设置多列横跨.
[+]Box
[-]Flex
- flex 在线调试flexbox布局效果
- flex-grow 剩余空间的扩展比例,默认值0
- flex-shrink 剩余空间的收缩比例,默认1
- flex-basis如果所有子元素的基准值之和大于剩余空间,则会根据每项设置的基准值,按比率伸缩剩余空间
- flex-direction
row:横向从左到右排列(左对齐),默认的排列方式。
row-reverse:反转横向排列(右对齐,从后往前排,最后一项排在最前面。
column:纵向排列。
row-reverse:反转纵向排列,从后往前排,最后一项排在最上面。 - flex-flow
- flex-wrap
- align-content
- align-items
flex-start:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。
flex-end:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。
center:弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。
baseline:如弹性盒子元素的行内轴与侧轴为同一条,则该值与'flex-start'等效。其它情况下,该值将参与基线对齐。
stretch:如果指定侧轴大小的属性值为'auto',则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照'min/max-width/height'属性的限制。 - align-self
auto:如果'align-self'的值为'auto',则其计算值为元素的父元素的'align-items'值,如果其没有父元素,则计算值为'stretch'。
flex-start:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。
flex-end:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。
center:弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。
baseline:如弹性盒子元素的行内轴与侧轴为同一条,则该值与'flex-start'等效。其它情况下,该值将参与基线对齐。
stretch:如果指定侧轴大小的属性值为'auto',则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照'min/max-width/height'属性的限制。 - justify-content
flex-start:弹性盒子元素将向行起始位置对齐。该行的第一个子元素的主起始位置的边界将与该行的主起始位置的边界对齐,同时所有后续的伸缩盒项目与其前一个项目对齐。
flex-end:弹性盒子元素将向行结束位置对齐。该行的第一个子元素的主结束位置的边界将与该行的主结束位置的边界对齐,同时所有后续的伸缩盒项目与其前一个项目对齐。
center:弹性盒子元素将向行中间位置对齐。该行的子元素将相互对齐并在行中居中对齐,同时第一个元素与行的主起始位置的边距等同与最后一个元素与行的主结束位置的边距(如果剩余空间是负数,则保持两端相等长度的溢出)。
space-between:弹性盒子元素会平均地分布在行里。如果最左边的剩余空间是负数,或该行只有一个子元素,则该值等效于'flex-start'。在其它情况下,第一个元素的边界与行的主起始位置的边界对齐,同时最后一个元素的边界与行的主结束位置的边距对齐,而剩余的伸缩盒项目则平均分布,并确保两两之间的空白空间相等。
space-around:弹性盒子元素会平均地分布在行里,两端保留子元素与子元素之间间距大小的一半。如果最左边的剩余空间是负数,或该行只有一个伸缩盒项目,则该值等效于'center'。在其它情况下,伸缩盒项目则平均分布,并确保两两之间的空白空间相等,同时第一个元素前的空间以及最后一个元素后的空间为其他空白空间的一半。 - order用整数值来定义排列顺序,数值小的排在前面。可以为负值。
布局II-
[-]盒模型
- Standards/Quirks Mode
HTML文档根据文档顶部的doctype声明来决定渲染模式,有标准模式(Standards Mode)与怪异模式(Quirks mode,或叫做混杂模式)两种模式。
IE5及以前默认总是表现为怪异模式,IE6~IE8遇到非正常声明或特定声明时也会进入怪异模式。
否则,如果有正确声明doctype并在顶端,则默认进入标准模式,即包括HTML5声明在IE6~IE8,也会进入标准模式,而非一定需要HTML4长长的声明。
而许多现代浏览器即使是怪异模式,表现也和标准模式是一致的。
IE6+进入怪异模式的条件:
1.IE6~IE8没有doctype的页面是在怪异模式下渲染。
2.在文档类型定义之前出现非空格和换行字符,浏览器也会激活怪异模式。
3.除上述两种情况外,有一些特殊声明时用来特定激活怪异模式的。
具体见下表,删减至只考虑中国市场常用浏览器(来自《Activating Browser Modes with Doctype》)
参考资料
标准模式与怪异模式下导致的和模型区别:
需要知道的是,盒模型差异是两种模式导致的最重要的区别之一,但是IE一些其他的BUG,即使是在标准模式下,仍然需要通过HACK解决,而并非处于标准模式下则没有BUG。
Box model :标准模式width=content,怪异模式width=content+padding+border
例外:即使是标准模式下,button总是应用border-box,现代浏览器为了表现一致,默认添加了box-sizing:border-box属性,故在button的高度上仍然要考虑border而影响的高度,即设置height=height+border*2。
另外,button在现代浏览器中总是表现为基于垂直对齐,在IE7~8中表现为顶部对齐,在IE6中表现为基线对齐,故需要设置vertical-align:middle初始化让所有表现一致。
参考自《Quirks mode and strict mode》查阅更多区别 - box-sizing
content-box:padding和border不被包含在定义的width和height之内。对象的实际宽度等于设置的width值和border、padding之和,即 ( Element width = width + border + padding ) 此属性表现为标准模式下的盒模型。
border-box:padding和border被包含在定义的width和height之内。对象的实际宽度就等于设置的width值,即使定义有border和padding也不会改变对象的实际宽度,即 ( Element width = width ) 此属性表现为怪异模式下的盒模型。 - display
完整参考资料:W3C
当元素float,fixed,abosulte或者为根元素时,总是表现为块级元素(但并不会宽度占据100%,而是根据自己内容扩展,正确理解成inline-block?但又不完全是,由于float的性质为包裹)none 隐藏对象,不保留物理空间 inline 内联元素 a,span,文本格式化(b,strong,i,em,sub,sup) block 块级元素 div,p,h1~h6,h5,form,ul,ol新元素 inline-block img,表单控件(input,button,textarea,label) list-item 列表项目li table 块级元素级的表格table,表格内部元素表现为对应的table-cell等。
table-caption | table-cell
table-row | table-row-group
table-column | table-column-group
table-footer-group | table-header-groupinline-table 内联元素级的表格 flex 弹性伸缩盒 box inline-box,块/内联块级弹性伸缩盒(旧) flex inline-flexbox,块/内联块级弹性伸缩盒(新) run-in 根据上下文决定对象是内联对象还是块级对象 - zoom
设置或检索对象的缩放比例,normal实际尺寸,1.x浮点数,120%百分比.
1.可局部用于响应式设计改变DOM尺寸,会有偏移错位(以像素起点对齐变换)
2.可用于触发IE6的haslayout,拥有haslayout属性的层会自动管理其宽高,除非设置overflow否则宽高会自动扩展.
现代浏览器会溢出显示,但自身宽高不变. -
(hasLayout)
详细文档
触发haslayout的条件:
IE6:
* display: inline-block
* float: (left 或 right)
* position: absolute
* width: (任何值除了auto)
* height: (任何值除了auto)
* writing-mode: tb-rl
* zoom: (除 normal 外任意值)
IE7:(额外)
* min-height: (任意值)
* max-height: (除 none 外任意值)
* min-width: (任意值)
* max-width: (除 none 外任意值)
* overflow: (除 visible 外任意值)
* overflow-x: (除 visible 外任意值)
* overflow-y: (除 visible 外任意值)
* position: fixed -
(BFC)
Block fomatting context详细文档
BFC会阻止垂直外边距(margin-top、margin-bottom)折叠
BFC不会重叠浮动元素
BFC可以包含浮动
触发BFC条件
* 根元素,fieldset
* float的值不为none
* overflow的值不为visible
* display的值为inline-block、table-cell、table-caption、flex、inline-flex
* position的值为absolute或fixed
[-]表现
- display:inline-block
1.IE6-7支持inline元素转换成inline-block,但不支持block元素转换成inline-block,所以非inline元素在IE6,7下要转换成inline-block,需先转换成inline,然后触发hasLayout,以此来获得和inline-block类似的效果;
解决方案:
div{display:inline-block;*display:inline;*zoom:1;}
2.默认inline-block元素之间默认会有间隔,是由于html元素间200B空格导致的(根据上下文字体大小有差异),可以通过连接html元素,或注释,或分行,及其他方式去掉.(浮动亦可,但浮动无法制作横向布局)
详细参考资料
3.禁止换行还需要设置white-space:nowrap制作横向滚动效果. - display:table-cell
特点:
1.table-cell有类似inline-block的可并行性
2.表格单元格宽度根据内容扩展,自行设置无效。
3.表格单元格同行元素总是等高。
注意:
1.IE8+有效
2.设置了display:table-cell的元素对宽度高度敏感,【对margin值无反应】,响应padding属性
3.display:table-cell与float:left或是position:absolute属性尽量不用同用
作用:
1.可以通过设置vertical-align:middle内容垂直居中
2.可用于宽度自适应布局,因为单元格本质宽度即由内容宽度决定。注意设置vertical-align:top
hack处理display:table-cell; width:2000px;*width:auto;*zoom:1;
3.可用于等高布局,即使不设置高度也会与同行元素等高。
hack处理display:table-cell; width:30%; margin-bottom:-100px; *padding-bottom:110px;*float:left;
参考资料
4.自适应.cell{display:table-cell;*display:inline-block;} //table-cell content + auto side*2
5.td中让元素垂直居中对齐,是对元素img设置y而非父级 ,文字则设置父级
[-]尺寸
- calc()长度计算,width:calc(100% - 50px) 中间必须有空格!
- width宽度
1.IE6 BUG:当元素设置百分比宽高时,自动继承父级,宽度由于block默认占比100%,即总是不会缺失,但若父级高度自适应,则IE6会继续向上级继承,而现代浏览器则继承当前父级内容实际产生的高度.
2.IE6 BUG:1像素BUG,尽量设置尺寸为偶数或不设置参考资料
3.子元素设置100%宽高时不包含父元素的padding!当父元素有padding时,因设置固定尺寸或修改父级模型!
4.width:auto 现代浏览器中表示根据内容自动扩展,而IE6-7表示占满父级
5.IE6-7对宽度的处理略有差异,特别是IE7下有许多离奇BUG,取百分比小数时,尽量只取到1位或取整 - height高度
1.如果要给元素定义100%高度,必须要明确定义它的父级元素的高度,如果你需要给元素定义满屏的高度,就得先给html和body定义height:100%; 参考资料
2.对于绝对定位拉伸的元素,内部元素可以直接使用百分比
3.IE6-7中浮动创建的自适应布局,需要主动给定父级高度,否则绝对定位的元素无法正常定位。
4.height:inherit的用法(IE8+) - min-width/height最小宽高
ie7-8支持,仅ie6不支持
IE6触发haslayout时,总是会自动管理其内容的宽高,自适应增长
故可以写成.test{min-height:200px;_height:200px;} - max-width/height最大宽高
1.ie7-8支持,仅ie6不支持
[-]边框
- border[简写]border:1px solid #ccc;
[0px height]元素的边框位置IE6 BUG!
当引入一个透明边框时,ie6+会增长内部空间至边框区域(背景色,不含内容),ie6显示黑色边框.
border-width宽度:
指定一个宽度,此宽度在双线时等于其间隔.
border-style样式:
none:无轮廓(等价border-width:0)
dotted:点状轮廓。IE6下显示为dashed效果
dashed:虚线轮廓。
solid:实线轮廓
double:双线轮廓。两条单线与其间隔的和等于指定的border-width值
groove:3D凹槽轮廓。
ridge:3D凸槽轮廓。
inset:3D凹边轮廓。
outset:3D凸边轮廓。
border-color颜色:
如果想在hover上做边框显示不发生抖动,应将默认状态添加如1px solid transparent
三角制作:在线生成(利用宽高0,设置1个夹角边框大值)
arrow生成:GO TO!
- border-top
单边:border-top/border-bottom/border-left/border-right
取消某一边:border:1px solid #ccc;border-bottom:none; - border-width/color/style border-width/color/style:上 右 下 左;4个值
- border-radius
[边框圆角简写]border-radius:5px 4px 3px 2px;
四个半径值分别是左上角、右上角、右下角和左下角,可以设置百分比.
提供2个参数,2个参数以“/”分隔,每个参数允许设置1~4个参数值,第1个参数表示水平半径,第2个参数表示垂直半径,如第2个参数省略,则默认等于第1个参数(顺时针顺序)
border-radius: 15px 5px 25px 5px / 3px 5px 10px 15px;
改变形状:
正方形->圆:radius=width|height/2
叶子-> 左上+右下,注意书写方式与简写代表
半圆->宽度设为高度的一半,并且也只设置左上角和左下角的半径
饼->四分之一圆的实现方法是把高度和宽度设置为相等,只设置一个圆角,其半径等于高度或宽度
用radius画形状参考资料
在线生成:GO TO!
扩展:
1.chrome hover radius bug - border-top-left-radius
单角圆角,注意书写格式,先写top/bottom后写left/right
提供2个参数,2个参数以空格分隔,每个参数允许设置1个参数值,第1个参数表示水平半径,第2个参数表示垂直半径,如第2个参数省略,则默认等于第1个参数
border-top-left-radius:5px 10px。不用“/”分割 - border-image
border-image:url(路径不需要引号) 80 80 80 80 round/stretch
在线图片边框生成:GO TO!
移动端1像素边框处理 - outline
轮廓边框,在border之外,chrome有焦点样式.另可作为定位参考或特殊动画
不允许类似border属性那样能将自身拆分为border-top..
IE6-7不支持,IE8支持 - outline-offset
用长度值来定义轮廓偏移。允许负值。
0是以border边界作为参考点的,正值从border边界往外延,负值从border边界往里缩.
可用outline来制作一些边框动画但又不改变原大小并非真正边框的改变(因为边框大小改变必然内容需要改变)
[-]层属性
- padding
内部补白
设置:
[简写]依次设置上右下左padding:1px 2px 3px 4px;
[单边]padding-top/right/bottom/left
[缩写]如果只提供一个,将用于全部的四边;如果提供两个,第一个用于上、下,第二个用于左、右;如果提供三个,第一个用于上,第二个用于左、右,第三个用于下。
[生效]非替代(non-Replaced)行内元素可以使用该属性设置左、右两边的内补丁;若要设置上、下两边的内补丁,必须先使该对象表现为块级或内联块级。即内联元素(a等)设置padding水平有效,垂直无效,除非转换display值。margin同理。
注意:
1.默认背景图片的平铺是包含在padding区域的
2.padding生效在伪对象之外。
3.%比值水平(默认)书写模式下,参照其包含块 width 进行计算,其它情况参照包含块 height,margin同理参考资料绝对定位的top/left等百分比按照父级对应尺寸。
4.IE7会胡乱继承padding,自适应宽高的地方必要应设置父级宽高并设置隐藏。
5.当设置类似必须overflow但内部有元素偏移时,可用padding替代margin。 - margin外部补白.
margin-left/right:num/%/auto. 当margin-left/right为auto时水平居中
百分比:水平(默认)书写模式下,参照其包含块 width 进行计算,其它情况参照 height ,可以为负值
1.内联元素垂直无效
非替代(non-Replaced)行内元素可以使用该属性设置左、右两边的外补丁;若要设置上、下两边的外补丁,必须先使该对象表现为块级或内联块级。
2.外边距合并 参考文档
当一个元素出现在另一个元素上面时,第一个元素的下外边距与第二个元素的上外边距会发生合并。
当一个元素包含在另一个元素中时【假设没有内边距或边框把外边距分隔开】,它们的上和/或下外边距也会发生合并。
假设有一个空元素,它有外边距,但是没有边框或填充。在这种情况下,上外边距与下外边距就碰到了一起,它们会发生合并
如果这个外边距遇到另一个元素的外边距,它还会发生合并
【margin折叠扩展】:
margin折叠只发生在块级元素上,且只发生在垂直上
浮动元素的margin不与任何margin发生折叠;
绝对定位元素的margin不与任何margin发生折叠;
设置了display:inline-block的元素不发生折叠;
设置了属性overflow且值不为visible的块级元素,将不与它的子元素发生margin折叠;
根元素的margin不与其它任何margin发生折叠,指html而非body
IE6-7中,如果父元素触发了haslayout,则不会发生折叠
3.margin负值应用
margin-top/left:会改变自身文本流位置,后面的元素依次顶上.
margin-bottom/right;不改变自身文本流位置,改变后面元素的文本流位置向前移
百分比适应下的边框应用,hover状态的-双倍border应用.
当负值margin向上移动文本流时,若上方元素设置了相对定位,则会覆盖在本元素之上,理解成z-index成为1.需要将自身也设置pr;
4.边距非法继承
IE6有时候会沿袭继承上上级的一些属性,ie6无法识别.class.class双class样式值,注意单独补充设置.
如默认设置了父级margin:val 在子.class上清除.避免写成.class.class
【BUG】:
1.IE6双倍margin
对块状容器元素设置了float和与float相同方向的margin值就会出现双倍margin
解决方法:设置BUG元素display:inline;
由于当元素float的时候,display样式的值就会自动转换为“block”,无论display先前设置的属性是什么都会失去效果,不会影响块级特性。
2.当上一个元素为绝对定位元素,IE6~7下margin-top会失效,根据情况设置padding或自身也设置为绝对定位 - visibility
此属性为隐藏的对象保留其占据的物理空间如果希望对象为可视,其父对象也必须是可视的。
visible: 设置对象可视
hidden: 设置对象隐藏
collapse: 主要用来隐藏表格的行或列。隐藏的行或列能够被其他内容使用。对于表格外的其他对象,其作用等同于hidden。
使得一个DOM元素不显示在浏览器可视范围内的方法:
display:none
visibility:hidden
width:0;height:0;opacity:0;z-index:-1000 - overflow溢出
使overflow生效需要指定尺寸!而非自适应尺寸
visible: 对溢出内容不做处理,内容可能会超出容器。
hidden: 隐藏溢出容器的内容且不出现滚动条。
scroll: 隐藏溢出容器的内容,溢出的内容将以卷动滚动条的方式呈现。
auto: 当内容没有溢出容器时不出现滚动条,当内容溢出容器时出现滚动条,按需出现滚动条。此为body对象和textarea的默认值。
在IE6/7中,overflow无法正确的隐藏有相对定位position:relative;的子元素。解决方法就是给外包容器.wrap加上position:relative;。
扩展:
IE78scroll无法用滚轮滚动bug - overflow-x横向溢出处理
- overflow-y纵向溢出处理
对html元素设置overflow:hidden;可隐藏浏览器滚动条,通过js设置让body,html滚动
[-]定位
- float
浮动详解 视频版
【特性】:
1.浮动内置设置:设置了float的元素则自动转换display为block.只有块级元素具有宽高等特性.
2.浮动原理1.环绕特性本质,2.脱离文本流特性
3.与非浮动元素的margin问题:如果浮动并未被闭合处理,下级非浮动元素默认还是以“环绕”浮动元素,其margin会作用在空的区域,此时应在浮动元素上设置margin
【浮动闭合与BFC】 参考文档
1.清除浮动解决方案:
.clearfix:after {content:"\200B"; display:block; height:0; clear:both; }
.clearfix:after {content:"";display:table;clear:both;}
.clearfix { *zoom:1; }
完整参考资料
2.BFC条件:
float为 left|right
overflow为 hidden|auto|scroll
display为 table-cell|table-caption|inline-block
position为 absolute|fixed
【IE BUG】
1:IE6 双倍margin BUG
对块状容器元素设置了float和与float相同方向的margin值就会出现双倍margin
解决方法:设置BUG元素:display:inline;
由于当元素float的时候,display样式的值就会自动转换为“block”,无论display先前设置的属性是什么都会失去效果,不会影响块级特性。
2.IE6下3像素bug:
当浮动元素与非浮动元素相邻时,会发生3像素间隙,可设置浮动元素_margin-right:-3px;或使非浮动元素浮动.
详细参考资料
中间列自适应布局方案:左右各浮动(层级需要都在不浮动之前!),需要解决3px bug
3.IE6-7浮动自适应布局
IE6-7中浮动创建的自适应布局,需要主动给定父级高度,否则绝对定位的元素无法正常定位。 - clear清除浮动:none,left,right,both
清除浮动只影响自己,而不影响其他元素;
对于CSS的清除浮动(clear),一定要牢记:这个规则只能影响使用清除的元素本身,不能影响其他元素。
参考资料1
参考资料2 - position:static对象遵循常规流
- position:relative
相对定位:对象遵循常规流,并且参照自身在常规流中的位置通过top,right,bottom,left属性进行偏移时不影响常规流中的任何元素
1.相对定位不同于margin-left/top,不会改变原先文档流,html后者层级默认仍然比前者高
2.相对定位可设置z-index改变层级 - position:absolute绝对定位:【参考资料】
特征:
1.对象脱离常规流,会在正常文档流之上,也可以通过z-index改为负值在正常流之下
2.使用top,right,bottom,left等属性进行绝对定位,坐标总是以最近的被定位的父级元素为基准,如没有则以window窗口.
3.盒子的偏移位置不影响常规流中的任何元素,其margin不与其他任何margin折叠。
4.当元素设置为绝对定位时,则该元素变为inline-block块级.(不再占据100%)
特殊用法:
1.(未定义坐标):绝对定位的元素,在top,right,bottom,left属性未设置时,会紧随在其前面的兄弟元素之后,但在位置上不影响常规流中的任何元素。如无兄弟元素则贴在父元素起点。即绝对定位在不赋值位置属性时,可作为脱离文档流的相对定位。
无依赖的绝对定位主要通过margin来实现位移.
可配合text-align+ ;实现一些自动布局。
关于跟随性,默认会跟在图片的顶端,由于200B baseline对齐会错位,可通过注释或串联来规避
2.(未知/已知元素尺寸):垂直/水平/双向居中,可设置绝对定位,并设置top+bottom:0 / left+right:0 / top+left+bottom+right:0,并设置对应方向margin:auto【IE8支持,6-7均不支持】
3.(已知元素尺寸):垂直/水平/双向居中,可设置绝对定位,并设置单向距离(left:50% / top:50%),并设置margin-left/top:-尺寸的一半.【IE6支持】
4.(自适应宽高):一个绝对定位元素,如未对其宽高进行设置,但对其对向方位值设置时,则认为宽高总是扩展值定位点.可利用作为自适应宽高.【IE8支持,6-7均不支持】
BUG:
1.IE6中,父元素区域会管理到内部包含的绝对定位元素范围. - position:fixed窗口定位:
对象脱离常规流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。
HACK:
IE6不支持fixed定位,通过CSS表达式解决,完整参考资料
平板下的fixed有Bug,使用绝对定位代替。 - top/bottom/left/right配合定位属性进行定位,可为负值.
垂直居中一个图片
#container{display:table-cell;text-align:center;vertical-align:middle;} - z-indexZ轴设定,可以为负值.
同一个层叠上下文中,层叠级别相同的两个元素,依据它们在HTML文档流中的顺序,写在后面的将会覆盖前面的。
不同层叠上下文中,元素的显示顺序依据祖先的层叠级别来决定,与自身的层叠级别无关。
在IE浏览器中,定位元素的z-index层级是相对于各自的父级容器,所以会导致z-index出现错误的表现。解决方法是给其父级元素定义z-index,有些情况下还需要定义position:relative。
实例参考 - clip
剪裁,【绝对定位元素】.
auto,不剪裁.rect(50px 20px 10px auto) auto为不剪裁.【上右下左】
更多说明
只有为shape时才支持动画性,可做遮罩动画效果
webkit-mask-image:url(img.png)
[-]布局
动画-
[-]2D/3D
- transform
可以用【空格】(非逗号)分隔多个操作,被定义的元素必须为对外表现块级的元素.
(*老版webkit一定要设置为块,否则内联元素的transfrom和animation无效).
位移动画闪动问题,可提前加载为0. - transform-origin设置或检索对象以某个原点进行转换,数值或百分比.
如果提供两个,第一个用于横坐标,第二个用于纵坐标。
如果只提供一个,该值将用于横坐标;纵坐标将默认为50%。 - transform:rotate旋转[n deg度数]
transform:rotate(Ndeg) / rotateX(n) / rotateY(n) / rotateZ(n)
transform:rotate3d(x,y,z,角度) - transform:skew倾斜[n deg度数]
transform:skew(Ndeg / Xdeg,Ydeg) / skewX(n) / skewY(n) - transform:scale缩放[n倍数]
transform:scale(x,y) / scaleX(n) / scaleY(n) / scaleZ(n)
transform:scale3d(x,y,z)
默认缩放以中心点为起点,不能用zoom - transform:translate位移/滑动[n px长度]
transform:translate(x,y) / translateX(n) / translateY(n)
transform:translate3d:(x,y,z) 案例演示 - transform:matrix矩阵
transform: matrix(6n)
transform: matrix3d(16n) - transform-style规定被嵌套元素如何在 3D 空间中显示。
flat,子元素将不保留其 3D 位置。
preserve-3d 子元素将保留其 3D 位置。 - backface-visibility定义元素在不面对屏幕时是否可见。
取值背面可见/不可见visible|hidden;
消除 transition 闪屏
两个方法
-webkit-transform-style: preserve-3d;
/*设置内嵌的元素在 3D 空间如何呈现:保留 3D*/
-webkit-backface-visibility: hidden;
/*(设置进行转换的元素的背面在面对用户时是否可见:隐藏)*/ - perspective(n)定义 3D 转换元素的透视视图。
取值number|none,常用500; 参考资料 - perspective-origin(x,y)规定 3D 元素的底部位置。
50% 50%默认值,取值left,center,right,length,%
[-]过渡
- transition过渡,简写,属性-时间-缓动-延迟
在Chrome下,使用过渡效果transition时有时会出现页面闪动
设置:-webkit-transform-style:preserve-3d;或-webkit-backface-visibility:hidden; - transition-property过渡的属性,以逗号分割多个
- transition-duration过度所需的时间
- transition-timing-function缓动线:
linear: 线性过渡。等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0)
ease: 平滑过渡。等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0)
ease-in: 由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1.0)
ease-out: 由快到慢。等同于贝塞尔曲线(0, 0, 0.58, 1.0)
ease-in-out: 由慢到快再到慢。等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)
cubic-bezier(, , , ): 特定的贝塞尔曲线类型,4个数值需在[0, 1]区间内
自定义缓动函数 ( stylie教程 ) - transition-delay延迟时间
[-]动画
- @keyframes定义动画
keyframes 名称{
from{}
to{}
}
@keyframes 名称{
0% {}
25%{}
75% {}
100% {}
}
注意写前缀
过渡的动画不能使用简写。例如border:8px solid #fff无效,提前定义样式颜色,并给予0宽度,改变宽度.
利用起点设置为非0%可设置出间隔动画
不想设置断点的数据留空会线性执行到下一个有数据位置
设置内层img等于祖层宽度,对子层尺寸进行变化形成遮罩显示效果(需设置overflow:hidden) - animation执行动画
简写animation:
name 5s ease-in 1s 8/infinite alternate paused forwards;
名称 时间 缓动函数 延迟执行 重复次数 反向 暂停 停留在末尾状态;
多个动画之间用【逗号】隔开,不同组动画属性的变化同时执行,可设置延迟达到队列效果,同属性例transform会覆盖
动画帧数计算 腾讯工具 / cssanimate / liffect / 简单示例 / cssload / loading动画 - animation-name动画名称
- animation-duration时间
- animation-timing-function缓动函数
steps(num)逐帧动画 - animation-delay延迟时间
- animation-iteration-count执行次数
- animation-directionanimation-direction:reverse / alternate / alternate-reverse (反向,奇正偶反,偶正奇反)
- animation-play-stateanimation-play-state: running / paused 运行/暂停
- animation-fill-modeanimation-fill-mode:none / forwards / backwords / both (返回初始,停留末尾,应用初始,两者)
- 移动端动画
参考资料1 |
参考资料2
1.减少BFC属性方式
2.减少使用阴影与渐变
3.让动画元素脱离文档流,减少重排
4.JS中减少layout
移动端-
[-]webkit
-
-webkit-text-size-adjust:100%
开启文字调整(WEBKIT默认最小只支持12px大小字)
参考资料 - -webkit-overflow-scrolling:touch 区域快速回滚 参考资料
- -webkit-tap-highlight-color*{-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}
-
-webkit-appearance
webkit移动表单控件重置
input[type="submit"],input[type="reset"],input[type="button"],button { -webkit-appearance:none; }
- -webkit-touch-callout:nonebody,防止长按复制图片,ipad+iphone