css细节复习笔记——基本视觉格式化

css包含如此开放、如此强大的一个模型,对于这样一个模型,可以有无数种方法结合应用各种属性,可以得到的效果数不胜数。

基本框

css假定每个元素都会生成一个或多个矩形框,这称为元素框。各元素中心有一个内容区,这个内容区周围包含可选的内外边距和边框(之所以认为是可选,是因为可以设置为0)。

对不同类型的元素格式化时存在着差别。块级元素的处理就不同于行内元素,而浮动元素和定位元素也分别有各自不同的表现。

包含块

每个元素都相当于包含块摆放;可以这么说,包含块就是一个元素的”布局上下文“,css2.1定义了一系列规则来确定元素的包含块。

常用名词:

正常流,文本从左向右,从上向下显示。要让一个元素不在正常流中,唯一的办法是使之成为浮动或定位元素。

非替换元素,如果元素的内容包含在文档中,则称之为非替换元素。

替换元素,指用作为其他内容占位符的一个元素。替换元素的一个经典例子就是img元素。它只是指向一个图像文件,这个文件将插入到文档流中该img元素本身的位置。

块级元素,这是指段落、标题或div之类的元素。这个元素在正常流中,会在其框之前和之后生成”换行“,所以处于正常流中的块级元素会垂直摆放。通过声明display:block,可以让元素生成块级框。

行内元素,这是指strong或span之类的元素。这个元素不会在之前或之后生成”行分割符“,它们是块级元素的后代。通过声明display:inline,可以让元素生成vyige行内框。

根元素,位于文档流顶端的元素,在html文档中,这就是元素html。

块级元素-水平格式化

width并不是指可见元素框的宽度,如果为一个元素声明了内编剧、边框以及宽度,他们指定的宽度则是左外边界到右外边界的距离。可以通过设定box-sizing:content-box来模拟ie6的怪异现象,即使得元素的宽度为实际设置的宽度width,而不是width+padding+border。

使用auto

<div class ="container1"><p>A paragraph</p></div>
.container1{width: 400px;border: 1px solid #000;}
.container1 p{margin-left:auto;margin-right: 100px;width: 100px;}

假设padding-left(padding-right)、margin-left(margin-rignt)、width,border-left-right(border-right)七个属性的和必须等与外容器的宽度,即400px,设置左边距auto,那么左边距的宽度将是200px。就是说,auto是用来”填补“所需的距离,使元素的总宽度等于其包含块的width。

.container1 p{background: #ccc;margin-right: auto;margin-left: auto;width: 100px; }

效果如下:

因此,如果设置margin-left和margin-right都为auto:

将两个外边距设置为相等的长度是将元素居中的一个正确方法,这不同于使用text-align(text-align只应用与块级元素的内联内容,所以将元素的text-align设置为center并不能将这个元素居中)。

如果设置width和marin-left都为auto,那么margin-left将会被设置为0:

.container1 p{
        background: #ccc;margin-right: 100px;
        margin-left: auto;width: auto;
    }

设置负外边距,

.container1 p{
        background: #ccc;margin-right: 100px;
        margin-left: -100px;width: auto;
    }

width的值为400px-100px(+margin-left)+100px。因为marin-left的为负值,因此content的实际width要加上(负的margin-left值)

块级元素-垂直格式化

一个元素默认的高度由其内容决定。高度还会受内容宽度的影响;段落越窄,相应地就会越高,以便容纳其中所有的内联内容。

如果正常流中一个块元素的margin-top或margin-bottom设置为auto,它会自动计算为0.遗憾的是,如果值为0,就不能你容易地将正常流元素在其包含块中居中。也就是说,如果将一个元素的上、下外边距设置为auto。实际上它们都会被重置为0,使得元素没有外边距。

 合并垂直外边距

垂直格式化的另一个重要方面是垂直相邻外边距的合并。这种合并性为只应用于外边距。如果元素有内边距和边框,它们绝对不会合并。

举个例子,一个无序列表,其列表项前后相邻。

li{margin-top: 10px;margin-bottom: 15px;}

每个列表项有10px的上外边距和15px的下外边距。不过,在显示这个列表时,相邻列表项之间的距离是15px而不是25px:

之所以会这样,是因为相邻外边距会沿着竖起轴合并。换句话,两个外边距中较小的一个会被比较大的一个合并。

如果相邻有多个外边距,也会出现合并,如列表的最后。对前面的例子进行补充,假设应用一下规则:

ul{margin-bottom:15px}
li{margn-top:10px;margin-bottom:20px;}
h1{margin-top:28px;}

最后列表合并外边距为28px.

如果其中一个外边距为负数,那么实际外边距就是最大的外边距减去负数外边距的绝对值。

行内元素的行布局

对于行内元素来说,这没有块级元素那么简单和直接,块级元素知识生成框,通常不允许其他内容与这些框并存。

文本使用text-align进行两端对其时,word-spacing的值可能被覆盖(如果letter-spacing是一个长度值,这个值不能被覆盖)。

基本术语和概念

匿名文本,是指所有未包含在行内元素中的字符串<p>I‘m<em>so</em>happy!</p>

序列中I‘m和happy!都是匿名文本。

em框,em框在字体中定义,也成为字符框。实际的字形可能比其em框更高或更矮。

内容区,在非替换元素中,内容区可能有两种。内容区可以是元素中个字符的em框串在一起构成的框,也可以是由元素中字符字形描述的框。

行间距,是font-size值和line-height值只差,这个差实际上要分为两半,分别应用到内容区的顶部和底部。为内容区增加的这两部分分别称为版兼具。行内距只应用于非替换元素。

行内框,这个框通过向内容区增加行间距来描述。对于非替换元素,袁术行内框的高度刚好等于line-height的值。对于替换元素,元素行内框的高度则恰好等于内容区的高度,因为行间距不应用到替换元素。

行框,这个包含该行中出现的行内框的最高点和最低点的最小框。换句话说,行框的上边界要位于最高行内框的上边界,而行框的底边要放在最低行内框的下边界。

1)内容区类似于一个块级元素的内容框。

2)行内元素的背景应用于内容区及所有内边距。

3)行内元素的边框要包围内容区及所有内边距和边框。非替换元素的内边距、边框和外边距对行内元素或其生成的框没有垂直效果;也就是所它们不会影响元素行内框的高度。

4)替换元素的外边距和边框确实会影响该元素行内框的高度,相应地,也可能影响包含该元素的边框高度。

行内非替换元素

假设有一下标记:

<p style="font-size:12px;line-height:12px;">
    This is text<em>some of which emphasized</em>,plus other text<br>which id <strong style ="font-size:24px;">strongly emphasized</strong>and which is<br>larger than the surrounding text.
</p>

效果如下:

大多数文本的font-size都是12px,只有一个行内非替换元素中的文本大小是24px。不过,所有文本的line-height都是12px,因为line-heght是一个继承属性。因此strong元素的line-height也是12px。

由于行内框的顶端在元素内容区内部,所以元素的内容落在了行框的外边,实际上与其他行框发生了重叠。其结果是,文本行看上去很不规则。

<p style="font-size:12px;line-height:14px;">
    This is text<em>some of which emphasized</em>,plus other text<br>which id <strong style ="font-size:24px;verical-align:4px">strongly emphasized</strong>and which is<br>larger than the surrounding text.
</p>

把元素上升4像素,折回同时提升其内容区和行内框。由于strong元素的行内框顶端已经是行中的最高点,对垂直对其的这个修改会把整个行框的顶端也向上移4像素。效果如图:

垂直对齐影响行框高度。

如果line-height不使用单位,而是用值小于1的数值,那么line-height将会相对于元素本省font-size设置行高,而不是相对于父元素设置。

时间: 2024-10-10 01:01:34

css细节复习笔记——基本视觉格式化的相关文章

css细节复习笔记——浮动

CSS除了能够改变字体.背景和所有其他属性,还能够完成基本布局任务. div+css通过浮动和定位.盒子模型等技术应用,是最常用的布局方式. 定位的基本思想很简单,它允许定义元素框相对于其正常位置应该出现在哪里,或者相对于父元素,另一个元素甚至浏览器窗口本身的位置. 另一方面,css1提出浮动.浮动不完全是定位,不过,他当然也不是正常流布局. 浮动 声明<img src ="b5.jpg" align="right">会导致一个图像浮动到右边,而允许其他

css细节复习笔记——结构与层叠

每个合法的文档都会生成一个结构树,有了结构树元素的祖先.属性兄弟元素等等创建选择器来选择元素,这是CSS继承的核心.继承是从一个元素向后代元素传递属性值所采用的机制.面向一个元素使用哪些值时,用户代理不仅要考虑继承,还要考虑特殊性,另外需要考虑声明本身的来源,这个过程就叫层叠. 本文讨论3种机制之间的关联:特殊性.继承和层叠. 特殊性 同一元素可以使用不同的方法来选择元素.但是每个规则,用户代理会计算选择器的特殊性,并将这个特殊性附加到规则的个个声明.如果一个元素有两个或多个冲突的属性声明,那么

css细节复习笔记——内边距、边框和外边距

一个元素的内边距.边框和外边距属性会影响着整个文档如何布局,更重要的是,它们会严重影响给定元素的外观. 高度和宽度 这两个属性不能应用到行内非替换元素,其高度和宽度由链接的内容确定,而不是由创作人员确定.正常流中的元素很少有设定的高度. 外边距和内边距 如果元素有背景,则会影响使用内边距和外边距,因为背景会延伸到内边距中,但不会延伸到外边距.为元素指定的内边距和外边距会影响元素的背景何时结束. 为内容区的个边增加10像素空白,margin:10px,类似于html的hspace和vspace,设

CSS综合复习笔记 01

1.1开发前的准备工作            1.配置开发环境(常用前端开发工具) (1)sublime (2)webstorm (3)vscode (4)hbuilder (5)atom 2.建立项目文件夹(为了将与项目相关的文件放在一起,便于管理和以后的维护) 包括与项目相关的一些文件 (1)主页或是首页(index.html.default.html) (2)css文件夹     (存放css文件) 公用样式css文件的常用命名: [1] base.css [2] global.css (

学习CSS视觉格式化模型,你需要掌握这些知识

本文主要是学习CSS的视觉格式化模型visual formatting model(视觉格式化模型),它是一种处理文档并把它显示在可视化媒体上的算法.这是CSS中的一个基础概念.visual formatting model把文档的每一个元素转换成0个,1个或多个符合CSS盒模型的盒子,每个盒子的布局内容包括如下部分: . 盒子尺寸:明确指定受限制或不指定 . 盒子类型:行内,行内级,原子行内级,块盒 . 定位方案:包括正常文档流,float或者绝对定位 . 节点树的其他元素:其子元素或兄弟元素

计算机图形学 复习笔记

计算机图形学 复习笔记 (个人整理,仅做复习用 :D,转载注明出处:http://blog.csdn.net/hcbbt/article/details/42779341) 第一章 计算机图形学综述 研究内容 图形的概念:计算机图形学的研究对象 能在人的视觉系统中产生视觉印象的客观对象 包括自然景物.拍摄到的图片.用数学方法描述的图形等等 图形的要素 几何要素:刻画对象的轮廓.形状等 非几何要素:刻画对象的颜色.材质等 图形表示法 点阵表示 枚举出图形中所有的点,简称为图像. 参数表示 由图形的

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.

CSS2.1SPEC:视觉格式化模型之包含块

原汁原味的才是最有味道的,在阅读CSS标准时对这一点的体会更加深刻了,阅读文档后的一大感觉就是很多看上去理所应当的样式表现也都有了对应的支持机制.本文首先从包含块写起,一方面总结标准中相应的阐述,并且结合具体的实例进行具体分析,特别是对于CSS2.1支持并不完善的IE6/7.由于经验尚浅,文中肯定存在一些问题,希望大家可以多多包涵并且指出问题. 阅读本文前,应当对于CSS盒模型以及视觉格式化模型中会产生的各种框(box,也可以成为盒子)以及各种不同的布局方式有比较准确的认识,可以阅读杜瑶大神的两

css权威指南笔记(知识点总结)

第一章 css和文档 ?1.替换元素与非替换元素,替换元素如 img input等,大多数html元素都是非替换元素. 2.块级元素和行内元素?,块级元素会自动填满父级元素的内容框,表格与其他块级元素一致,唯一有区别的是表格会生成一个标记符,就是小黑点.在html中块级元素不能继承行内元素,也就是说块级元素不能嵌套在行内元素里面,但是css中块级元素能继承行内元素的样式. 3.link里面包含以下几个属性,rel:来源:href:路径:media:默认为all(一般浏览器支持all.print.