CSS权威指南读书笔记-基本视觉格式化

基本框:

假设每个元素都会生成一个或多个矩形框,成为元素框
各元素中心有个内容区,内容区周围有内边距边框和外边距

包含块:

每个元素都相对于其包含块摆放,包含块是一个元素的“布局上下文”由最近的块级祖先框

块级元素

水平格式化

关键在于width影响的是内容区的宽度,而不是整个可见的元素框。
p{width:200px;padding:10px;margin:20px;}
可见元素框的宽度是220px=200px + padding-left:10px+padding-right:10px
整个元素框的宽度是260px=200px+20px+10px+10px+20px

*正常流中块级元素框的水平部分总和等于父元素的width *

水平属性7大属性

margin-left border-left padding-left width padding-right border-right margin-right
元素框与其父元素的width相同
width必须为auto或某种类型的非负值

使用auto
  • 如果width margin-left margin-right 三个值都是固定值,margin-right会强制置为auto
  • 如果width是auto其他两个值固定width的宽将设置为所需的某个值
  • 如果margin左右设置为auto,其两个值置为相等的长度,因此该元素会在父元素居中
    *将某个外边距及width设置为auto。设置为auto的外边距会减为0,width会设置为所需的值,使元素完全填充其包含块
  • 如果三个属性都设置为auto,两个外边距会设置为0。
    ***水平外边距不会合并,父元素的内边距、边距和外边距可能影响其子元素。例如父元素内边距30px,子元素margin20px,则偏移50px ***
负外边距

由于7个水平属性总和要等于父元素的width,只要属性都是>=0的,元素就不会大于其父元素的内容区。

div{width:400px}
p.wide{margin-left:10px;width:auto;margin-right:-50px}
width的值为440px比父元素还宽,这样是合法的

百分数

width内边距和外边距设置为百分数,会应用相同的基本规则

替换元素

  • 如果width是auto元素的宽度将是元素的固有宽度,
  • 如果一个元素的宽度不同于其固有元素,height的值也会成比例变化,反过来设置的height,width也会成比例的变化。

垂直格式化

  • 默认情况下如果设置高度大于内容高度会在下方添加空白,如果设置高度小于内容区域,浏览器会增加滚动条;如果元素内容的高度大于元素框的高度,用户代理的具体行为将取决于overflow属性的值。

垂直属性7个

同水平格式化属性,这7个属性必须等于元素包含块的height。往往是父元素的height值
依然是三个值可以是auto height margin-top margin-bottom

  • 如果上下边距置为auto,不能使元素垂直居中,margin-top及bottom会置为0,使元素没有外边距
  • 如果没有显式声明包含块的height,百分数高度会重置为auto

    <div> {height:auto}
    <p height="50%">xxxxxx</ p>
    </div>
    这种情况下p元素百分数高度会置为auto
  • auto高度,在段落上设置一个边框,并认为没有内边距,下边框正好在文本最后一行的下面,上边框正好在文本第一行的上面
  • 如果块级正常流元素的高度为auto,而且只有块级子元素,其默认高度是讲从最高块级子元素的外边框边界到最低块级子元素外边框边界之间的距离,因此子元素的外边距将会超出包含这个子元素的元素;不过如果块级元素有上或下内边距,或者有上或下边框,其高度将则是从最高子元素的上外边距边界到其最低子元素的下外边距边界之间的距离。

合并垂直外边距

垂直相邻外边距的合并,这种行为只应用于外边距,如果元素有内边距和边框,他们绝对不会合并
li{margin-top:10px;margin-bottom:15px}
这种情况下,相邻列表元素之间的距离是15px,而不是25px,因为相邻外边距会沿竖轴合并,如果相邻有多个外边距,也会出现合并

  • 对于负外边距,如果两个都为负,则合并为绝对值大的那个,如果一个为正一个为负,则是相加得到的结果。

列表项

行内元素

  • 非替换元素的内边距边框和外边距对行内元素或其生成的框没有垂直效果,他们不会影响元素行内框的高度。
  • 替换元素的外边距和边框确实会影响该元素行内框的高度,也可能影响包含该元素的行框高度

行内替换元素

行内替换元素有固定的宽度和高,他不会改变行中任何元素的line-height值,包括替换元素本身,只会让行框的高度恰好能包含替换元素,会使用替换元素整体,包含内边距框和外边距来定义元素的行内框。

  • *** virtual-align会根据line-height 设置偏移,因此对于替换元素,完成百分比的垂直对齐,会根据line-height计算。***
  • 替换元素没有自己的基线,其行内框的地段与基线对齐,实际上是外边距边界与基线对齐

改变元素显示display

display:none|inline|block|inline-block|list-item|run-in|table|inline-table|table-row-group|table-header-group|……

***这种改变只是显式的改变元素的显示角色而不是本质,因此不能把一个段落真正的改变为行内元素,因此行内元素比如<a display="block">即使改变显示为块级元素,其仍然是行内元素,不能包含块级元素,比如<a style="display:block"></a><p>错误的包含关系</p></a>

行内块元素 display:inline-block

行内块元素作为一个行内框与其他元素的内容相关,他就像图像一样放在一个文本行中,实际上行内块元素会作为替换元素放在行中
行内块元素的地点默认位于文本行的基线上,内部没有行分割符

  • 如果行内框元素的width未定义,或显式的声明为auto,元素框会收缩以适应内容,元素框的宽度刚好包含该内容,而没有多余空间。不过行内框可能会跨多个行文本,而行内块元素不能

run-in元素

改变元素的display的值实际上是改变元素的生成框,如display:blcok 是生成块级框,而display:inline是生成行内框

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

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,709评论 1 92
  • 基本框 CSS假定每个元素都会生成一个或多个矩形框,这称为元素框。各元素框中心有一个内容区(content are...
    exialym阅读 733评论 0 2
  • 学习CSS的最佳网站没有之一 http://www.w3school.com.cn/tags/index.asp ...
    Amyyy_阅读 1,008评论 0 1
  • 1.块级元素和行内元素 块级(block-level)元素;行内(内联、inline-level)元素。 块元素的...
    饥人谷_小侯阅读 1,970评论 1 4
  • 基本元素框 宽度和高度 一个元素的width被定义为从左内边界到右内边界的距离,同样height也是。该属性不能用...
    风色透明阅读 608评论 0 0