![Web前端开发技术](https://wfqqreader-1252317822.image.myqcloud.com/cover/759/42637759/b_42637759.jpg)
3.5 CSS定位与盒模型
3.5.1 元素可见性
1.display属性:该属性主要有inline、block和none三个属性值。
(1)display:inline
主要用来设置元素为行内元素,设置了该属性之后再设置高度、宽度都无效。
(2)display:block
设置元素为块级元素,如果不指定宽高,默认会继承父元素的宽度,并且独占一行,即使宽度有剩余也会独占一行,高度一般以子元素撑开的高度为准,当然也可以自己设置宽度和高度。
(3)display:none
将元素设置为none的时候既不会占据空间,也无法显示,相当于该元素不存在。
2.visibility属性:该属性设置元素是否可见,确定元素是显示还是隐藏。visibility="visible|hidden",visible为显示,hidden为隐藏。当visibility被设置为"hidden"的时候,元素虽然被隐藏了,但它仍然占据原来所在的位置,仍然会影响布局。
然而,visibility还可能取值为collapse。当设置元素“visibility:collapse”后,一般的元素的表现与“visibility:hidden”一样,即也会占用空间。但如果该元素是与table相关的元素,例如table row、table column、table column group等,其表现却与“display:none”一样,即将其占用的空间释放。
3.5.2 CSS定位
CSS为定位和浮动提供了一些属性,利用这些属性,可以建立列式布局,将布局的一部分与另一部分重叠,还可以完成多年来通常需要使用多个表格才能完成的任务。定位的基本思想很简单,它允许定义元素框相对于其正常位置应该出现的位置,或者相对于父元素、另一个元素甚至浏览器窗口本身的位置。
1.position属性:该属性指定了元素的定位类型。元素可以使用顶部、底部、左侧和右侧属性定位。然而,这些属性无法工作,除非事先设定position属性。position属性的主要取值如下:
·static:HTML元素的默认值,即没有定位,元素出现在正常的文档流中。静态定位的元素不会受到top、bottom、left、right或者z-index的影响。
·relative:元素框偏移某个距离,相对定位元素的定位是相对其正常位置。元素仍保持其未定位前的形状,它原本所占的空间仍保留。
·fixed:元素的位置相对于浏览器窗口是固定位置,即使窗口是滚动的它也不会移动。fixed定位使元素的位置与文档流无关,因此不占据空间。fixed定位的元素和其他元素重叠。
·absolute:元素框从文档流中完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。
例3-10:position定位
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_45_01.jpg?sign=1739122563-a6LDXt5CJa8iYaaQ2vqOeA2W3hQydgia-0-0acb999a1ea1f71aa6f37e4cf954d656)
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_46_01.jpg?sign=1739122563-VnJRswdCsMpHW4T4wPQyAsyuhtfcHMdK-0-e2e83ebd4d304560a9ed3c27d4c69635)
绝对定位:脱离文档流,遗留空间由后续元素填充。
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_46_02.jpg?sign=1739122563-ylMCDjl7lGJZAITbxVHIp6qIkDScGat5-0-387070150e44431d371d7a2bc5fade42)
相对定位:不脱离文档流,只改变自身的位置,在文档流原先的位置遗留空白区域。
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_46_03.jpg?sign=1739122563-xai8oen0UguKv6vvyHrcV85nTUOIt94a-0-de8290884f1e6c3f6335522a849c2194)
固定定位:固定在页面中,不随浏览器的大小改变而改变位置。
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_46_04.jpg?sign=1739122563-aKVCiIo8zDNuixBSTGVAkkElvtHASEHC-0-588c6626c3ab46eb121ed94fa302e301)
2.z-index属性:该属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。该属性设置一个定位元素沿z轴的位置,z轴定义为垂直延伸到显示区的轴。如果为正数,则离用户更近,为负数则表示离用户更远。
3.float属性:会使元素向左或者向右移动,其周围的元素也会重新排列。浮动往往是用于图像,但它在布局时也一样非常有用。元素在水平方向浮动,意味着元素只能左右移动而不能上下移动。一个浮动元素会尽量向左或者向右移动,直到它的外边缘碰到包含框或者另一个浮动框的边框为止。浮动元素之后的元素将围绕它,而浮动元素之前的元素将不会受到影响。
3.5.3 CSS盒模型
所有HTML元素可以看作盒子。CSS盒模型(Box Model)本质上是一个盒子,封装在HTML元素的周围。它规定了元素框处理元素内容、内边距、边框和外边距的方式。CSS盒模型见图3-1。
元素框的最内部分是实际的内容,直接包围内容的是内边距(padding)。内边距呈现了元素的背景。内边距的边缘是边框(border)。边框以外是外边距(margin),外边距默认是透明的,因此不会遮挡其后的任何元素。背景通常是由内容、内边距和边框组成的区域。在CSS中,width和height指的是内容区域的宽度和高度。增加内边距、边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸。
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_47_01.jpg?sign=1739122563-3SlaL1XWxGq5ZBHch7RJMmc5SlGBeCVh-0-304549680a68330c9ea277e42c9f2a43)
图3-1 CSS盒模型
3.5.3.1 内边距
CSS padding属性用于定义元素的内边距。padding属性接受长度值或者百分比值,但不允许使用负值。可以按照上、右、下、左的顺序分别设置各边的内边距,各边均可以使用不同的单位或者百分比值。
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_48_01.jpg?sign=1739122563-A3vsg4UekwxCQk9b6f91sQusTgkfGAVM-0-a92fa944ee1207d31ed9640f9dc60380)
提示:px,em,ex,%都是CSS的相对长度单位,其中ex代表字母x的高度。
也可以通过使用下面四个单独的属性,分别设置上、右、下、左内边距:
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_48_02.jpg?sign=1739122563-BFXh2miKDGWRezmyG6KlxBonaixCV6Sl-0-fe3c818871c01527a3c68abefda38f07)
3.5.3.2 边框
元素的边框(border)是围绕元素内容和内边距的一条或者多条线。CSS border属性允许规定元素边框的样式、宽度和颜色。
1.边框样式
边框样式使用border-style属性。可以为一个边框定义多个样式,这里的值采用的也是top-right-bottom-left顺序。边框的样式包括:none:无样式;dotted:点线;dashed:虚线;solid:实线;double:双线;groove:槽线;ridge:脊线;inset:内凹;outset:外凸。例如:
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_48_03.jpg?sign=1739122563-H1oYjmc5u8q6LLrVHXKCmYypgzjtg90a-0-66226a3ee10afe24498d737614a2f2d0)
上面这条规则为div层定义了四种边框样式:实线上边框、点线右边框、虚线下边框和一个双线左边框。
如果希望为元素框的某一个边单独设置边框样式,而不是设置所有4个边框样式,可以使用下面的单边边框样式属性:
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_48_04.jpg?sign=1739122563-g6l7qh8n0gETJmRMeXnb1CsxSY0wHi6z-0-cca508c3d5f1ecf9dd30156201040c07)
2.边框宽度
可以通过border-width属性为边框指定宽度。为边框指定宽度有两种方法:可以指定长度值,例如2px或者0.1em;或者使用3个关键字之一,它们分别是thin、medium(默认值)和thick。
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_48_05.jpg?sign=1739122563-XnNEQAnKawlz83yXC0QNcIftIZ2CflnZ-0-df59b35bc9b774baa456f202d94c69ec)
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_49_01.jpg?sign=1739122563-2vIeUYPSo2vDxaL3tMgKs0TFAs09K21B-0-83eb2ed14cf33d5a5921efa8eeeb0a00)
可以按照top-right-bottom-left的顺序设置元素的各边边框:
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_49_02.jpg?sign=1739122563-YFJRmq8loBVueM4IC2eizIiuaYt23uE7-0-640e59c898ebbf535a46f5af82df2da4)
或者简写成:
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_49_03.jpg?sign=1739122563-i1xVuZl9SZcWYvYT64lWJr9Lyq2P1rUC-0-ba9e9a9fb46c6b4c989934f56a876115)
用两个值取代前面4个值的情形,叫作值复制。CSS定义了一些规则,允许为外边距指定少于4个值。规则如下:
·如果缺少左外边距的值,则使用右外边距的值。
·如果缺少下外边距的值,则使用上外边距的值。
·如果缺少右外边距的值,则使用上外边距的值。
换句话说,如果为外边距指定了3个值,则第4个值(即左外边距)会从第2个值(右外边距)复制得到。如果给定了两个值,第4个值会从第2个值复制得到,第3个值(下外边距)会从第1个值(上外边距)复制得到。最后一种情况,如果只给定一个值,那么其他3个外边距都由这个值(上外边距)复制得到。
同样地,也可以通过下列四个属性分别设置边框各边的宽度:border-top-width,border-right-width,border-bottom-width,border-left-width。
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_49_04.jpg?sign=1739122563-7skm7rQnHbwr7dR5fqHPC1m7rK8ypdNJ-0-b1fede8441535954a24007f2d086f0a3)
3.边框颜色
设置边框颜色非常简单,CSS使用一个简单的border-color属性,它一次可以接受最多4个颜色值。
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_49_05.jpg?sign=1739122563-ePUSheBphKqWLF9OGe2S9woniZOdTFRD-0-289bf7db66bb11ef9672cd39eeed7d20)
还有一些单边边框颜色属性,它们的原理与单边样式和单边宽度属性相同:border-top-color,border-right-color,border-bottom-color,border-left-color。
CSS2引入了边框颜色值transparent,这个值用于创建有宽度的不可见边框。
3.5.3.3 外边距
设置外边距的最简单的方法就是使用margin属性。这个属性接受任何长度单位、百分数甚至负值。
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_50_01.jpg?sign=1739122563-NrYloroGBbPaP52aHQSQRVKnoER8hFvB-0-e9b357233f178b34687810abba645aa9)
与内边距的设置相同,这些值的顺序是从上外边距(top)开始围着元素顺时针旋转的。也可以使用下列任何一个属性单独设置相应的外边距,而不会直接影响其他外边距:margin-top,margin-right,margin-bottom,margin-left。
![](https://epubservercos.yuewen.com/6DD77C/22139294709122706/epubprivate/OEBPS/Images/978-7-111-61820-1_50_02.jpg?sign=1739122563-cBpQA6Rm8LHOvkdWUltZW23y55LMthCE-0-9db6f634844f4238aed59cc878ff7a93)