CSS-简写属性的默认行为【Collection】

在segmentfault写的笔记归总能力太差了,以后写笔记还是跑来简书记录一下算了。

we known:CSS有很多属性简写(shorthand),比如:font text-decoration background border outline list-style overflow margin padding flex flex-flow transition transform animation等等(暂时想到这些)。
其中要注意的是fontbackground(以及background-positionbackground-clipbackground-origin)、flex的缺省属性值。


font

来看看font简写的可包括哪些分写属性:

[font-style||font-variant||font-weight||font-stretch]? font-size[/line-height]? font-family
font-style = normal|italic|oblique
font-variant = normal|small-caps
font-weight = normal|bold|lighter|bolder
|100|200| 300|400|500|600|700|800|900
font-stretch = ultra-condensed|extra-condensed|condensed|semi-condensed|normal
|semi-expanded|expanded|extra-expanded|ultra-expanded
Global values:inherit|initial|unset
line-height = normal|<number>|<length>|<percentage>

font简写还可以直接使用浏览器自带的一些设置:captioniconmenumessage-boxsmall-captionstatus-bar

1.其简写时,font-sizefont-family是必填且顺序不能颠倒过来。
以下代码可以检验:

#p2 {font: 12px/24px;}
#p3 {font: 12px/24px monospace;}
<p id="p1">Lorem ipsum dolor sit amet.</p>
<p id="p2">Lorem ipsum dolor sit amet.</p>
<p id="p3">Lorem ipsum dolor sit amet.</p>
var p1style = window.getComputedStyle(document.getElementById('p1'));
var p2style = window.getComputedStyle(document.getElementById('p2'));
var p3style = window.getComputedStyle(document.getElementById('p3'));
console.log(p1style.font);
console.log(p2style.font);
console.log(p3style.font);

console输出证明一切:

normal normal normal normal 16px / normal Simsun
normal normal normal normal 16px / normal Simsun
normal normal normal normal 12px / 24px monospace

至于顺序只要手动改下就知道了。

2.根据《CSS权威指南 第三版》P130:

在使用简写属性font时,所有被忽略的值都会重置为默认值。

所以才会有font: 1em monospace;会重置line-height的情况存在。
还是上面那段html代码先把样式设置改为:

p {line-height: 3em;}
#p1 {font: 1em monospace;}

console输出:

normal normal normal normal 13px / normal monospace
normal normal normal normal 16px / 48px Simsun

本来浏览器会有line-height的默认值,但是使用简写属性后,这个属性被重置为属性的初始值(初始值比较妥当,initial

background

background比较麻烦的,各个分属性的初始值都不一样,没有啥规律可言,而且还可以逗号分隔同时设置多个简写属性。
先看看简写包含什么:

[<bg-layer>]* <final-bg-layer>
<bg-layer> = background-image||background-position[/background-size]?
||background-repeat||background-attachment||background-origin||background-clip
<final-bg-layer> = <bg-layer>||background-color
background-image = none|url|gradient|element()
background-position = [ [top|bottom|left|right|center
|<percentage>|<length>]{1,2} ]#
background-size = [<length>|<percentage>|auto]{1,2} |cover|contain
background-repeat = repeat-x|repeat-y| [repeat|space|round|no-repeat]{1,2}
background-attachment = scroll|fixed|local
background-origin = border-box|padding-box|content-box
background-clip = border-box|padding-box|content-box

1.这里需要注意的是最下面一层<final-bg-layer>,是可以同时包含background-imagebackground-color的,而且无顺序限制。<final-bg-layer>必须放在background属性声明的最右边,否则整条规则都无效。

2.然后要注意的background-position,虽然初始值(initial)是0% 0%,也就是元素的左上角。但是设置一个属性值时,第二个属性值(也就是水平方向的属性值)默认为50%。这个属性主要是在background-image属性是一个url或者渐变图像是体现出来。

3.background-clip初始值是border-box,主要体现为背景设置的可视内容区域。
background-origin初始值是padding-box。跟background-position类似,在设置background-image为url或者渐变图像时体现出来,表现为图像从哪个位置开始绘制。实际上这个属性是可以对应background-position的:background-origin:padding-box就可以对应到background-position: 0 0background-origin:border-box;对应background-position: -10px -10px;(如果设置border-width: 10px;border-style不是none);background-origin:content-box;对应background-position: 10px 10px;(如果设置padding: 10px;)。

另外,在简写background中,background-originbackground-clip同时使用时,background-origin是排在左边的,说明有顺序要求,如:background:url('luoxiaohei.png') content-box padding-box;这时background-origincontent-boxbackground-clippadding-box
而如果设置一个值,则两者都是这个值,如:background: url('luoxiaohei.png') border-box;这时background-originbackground-clip均为border-box

4.background-size的初始值是auto,也就是自适应对应宽高。(这里用url加载的图片做举例)在水平和垂直方向都未设置时,即两者都是auto,则背景图的尺寸就是加载的图片的实际尺寸;如果有一个设置长度或者百分比(也就是设置了宽度),另一个不设置(还是初始值auto),则图片的高度也会随着宽度等比缩放。

如果设置的是长度值(如以px为单位的),图片的实际宽高就是长度值指定的;当然如果只设置一个值,则第二个值为auto,即高度会根据第一个值(高度)的设置而等比缩放。

如果设置的是百分比,计算则要根据background-origin的设置来确定:
background-origin:content-box;时,background-size的百分比计算以内容区的宽/高为基数;
background-origin:padding-box时,百分比计算以边框的内边界以内的区域(包括padding区和内容区)的宽/高为基数;
background-origin:border-box;时,百分比计算以边框的外边界以内的区域(包括border区、padding区好内容区)的宽/高为基数。
测试代码可以去我的Github找[1]

flex

flex作为CSS3新增的属性,还一直在修改。目前要使用的话,要注意其简写属性时的特殊情况。

flex-grow||flex-shrink||flex-basis

flex-grow初始值为0,表现为不拉伸;flex-shrink初始值为1,表现为按1份的比例收缩;flex-basis初始值为auto,表现为跟随子项内容宽/高。
flex作用在弹性项(flex item)上。这个简写属性的特殊属性值,对应的分写属性值需要特别小心:
1.flex: initial;等价于flex: 0 1 auto;,也等价于flex: 0 auto;,全是分写属性的初始值;
2.flex: auto;等价于flex: 1 1 auto;。从属性声明可以看出其意思就是表示弹性项可以自有拉伸和收缩;
3.flex: none;等价于flex: 0 0 auto;。从属性声明可以看出其意思就是表示弹性项必能拉伸和收缩。
4.flex: 1;基本等价于flex: 1 0 0;。这个要特别小心了不是flex: 1 0 auto;。我做过检验,可以去我的segmentfault查看[2]

补充

其他重要的简写属性,以后遇到了再补充...


  1. github

  2. segmentfault

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,689评论 0 2
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,629评论 1 92
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,377评论 0 6
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,279评论 0 11
  • 听蒋勋老师的《孤独六讲》,讲到孤独,深有体会。身愈处喧嚣,心愈觉隔离。孤独并不包含贬义,在我看来。很多时候它已成为...
    清和qinghe阅读 190评论 6 4