10浮动和定位

CSS定位与布局

定位的基本思想很简单,它允许你定义元素框相对于其正常位置应该出现在哪里,或者相对于父元素、另一个元素甚至浏览器窗口本身的位置。

CSS允许浮动任何元素,从图像到段落再到列表,所有元素都可以浮动。float属性可以实现元素浮动,值:left|right|none|inherit。浮动元素会以某种方式将从文档的正常流中删除,不过它还是会影响布局(一个元素浮动时,其他内容会“环绕”该元素)。浮动元素周围的外边距不会合并。如果确实要浮动一个非替换元素,则必须为该元素声明一个width,否则,根据CSS规范,元素的宽度趋于0。none值用于放置元素浮动。

浮动元素的包含块是其最近的块级祖先元素。浮动元素会生成一个块级框。而不论这个元素本身是什么。

浮动元素会延伸,从而包含其所有后代浮动元素。

负外边距可能导致浮动元素移到其父元素的外面。还有一种方法可以让浮动元素超出其父元素的左右内边界:即浮动元素比其父元素更宽。

行内元素和浮动元素重叠时,行内元素完全覆盖浮动图像(包括背景、边框、内容和一切)。另一方面,块元素只是将其内容显示在浮动元素之上,但其背景和边框都在浮动元素之下。

float属性可以避免内容了流过浮动元素,值:left|right|both|none|inherit。要确保一个清除元素(设置clear属性的元素)的顶端与一个浮动元素的底端之间有一定空间,可以为浮动元素本身设置一个下外边距。

position属性可以选择4种不同类型的定位,会影响元素框生成的方式,值:static|relative|absolute|fixed|inherit。static:元素框正常生成,块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。relative:元素偏移某个距离。absolute:元素框从文档流完全删除,并相对于其包含块定位。fixed:元素框的表现类似于将position设置为absolute,不过其包含块是视窗本身。对于一个非根元素,如果其position值是raletive或static,包含块则由最近的块级框、表单元格或行内块祖先框的内容边界构成。对于一个非根元素,如果其position值是absolute,包含块设置为最近的position值不是static的祖先元素(可以是任何类型)。

top,right,bottom,left位偏移属性,描述了距离包含块最近边的偏移,值<length>|<percentage>|auto|inherit,top和bottom相对于包含块的高度,right和left相对于包含块的宽度。正值会导致向内偏移,使边界朝着包含块的中心移动,而负值会导致向外偏移。当前开发的浏览器都是使用外边距边界来完成偏移的计算。可以用width属性和height属性来为定位元素指定一个宽度和高度。min-width和min-height属性可以为元素的内容区定义一个最小尺寸,值:<length>|<percentage>|inherit.max-width和max-height属性可以为元素的内容区定义一个最大尺寸。最小和最大属性的一个很大的好处是,可以相对安全地混合使用不同的单位。

当内容在元素中放不下时,可以用overflow属性控制溢出的情况,值:visible|hidden|scroll|auto|inherit.默认值visible表明,元素的内容在元素框之外也可见,这一般会导致内容超出其元素框,但不会改变框的形状。值为scroll时,元素的内容会在元素框的边界处剪裁,也就是说,溢出的部分将无法看到,不过还是有办法让用户得到这些额外的内容(如滚动条)。值为hidden时,元素的内容会在元素框的边界处剪裁,不过不会提供滚动接口使用户访问超出剪裁区域的内容。值为auto时,允许用户代理确定采用何种方式,不过都建议在必要时提供一个滚动机制。

当一个绝对定位元素的内容溢出其内容框,而且overflow设置为要求剪裁该内容,通过使用属性clip可以改变剪裁区域的形状,这不会改变内容区的形状,而只是改变将显示内容的区域形状,值:rect(top,right,bottom,left)|auto|inherit.rect(...)的值不是边偏移,而是距元素左上角的距离。可以设置负长度值,使得裁剪区延伸到元素框之外,不过内容只能超越下边界和右边界,不能越过上边界和左边界。rect(...)只接受长度单位和auto。

visibility属性可以控制元素的可见性,值:visible|hidden|collapse|inherit。值为hidden时,元素还在那里,只不过看不见它(而display:none,元素不仅不显示,还会从文档中删除,所以对文档布局没有任何影响)。可以将一个hidden元素的后代元素置为visible,这会使得后代元素正常出现,尽管其祖先元素(以及兄弟)是不可见的。

元素绝对定位时,会从文档流中完全删除。绝对定位元素的包含块是最近的position值不为static的祖先元素。元素绝对定位时,如果除bottom外某个任意偏移属性设置为auto,元素的这个边界会相对于其未定位前本来的边界位置对齐。

非替换元素假如左右外边距都设置为auto,而left、width和right不是auto,左右外边距会设置为相等的值。假如左右外边距都不为auto,用户代理会忽略right的值(从左向右读的语言中)。如果只有一个属性设置为auto,就会修改这个属性来满足给出的等式。垂直轴的规则也类似,但在垂直布局中,只有top可以取静态位置,处于某种原因,bottom做不到,另外,如果一个绝对定位元素的大小在垂直方向上过度受限,将忽略bottom。

非替换元素和替换元素的定位规则不大相同,因为替换元素有固有高度和宽度。从左向右的语言中,如果left为auto,要把auto替换为静态位置。如果值过度受限,用户代理会忽略right的值(对于从左边向右边读的语言)。

z-index属性可以改变元素相互覆盖的顺序。所有整数都可以用作为z-index的值,包括负数。一个元素的后代可能在钙元素的上面或下面,但它们与其祖先元素都归为一组。

固定元素的包含块是视窗。固定定位时,元素会完全从文档流中去除,不会有相对于文档中任何部分的位置。

相对定位通过使用偏移属性移动定位元素。当元素相对定位时,它会从其正常位置移走,不过,原来所占的空间并不会消失。

 

转载于:https://www.cnblogs.com/dingzibetter/p/6168552.html

### CSS3 中浮动定位的概念及其区别 #### 浮动 (Float) 浮动是一种用于布局的技术,允许元素沿指定方向移动直到碰到包含框或另一个浮动元素为止。设置了 `float` 的块级元素会脱离文档的标准流,不再占据原来的空间。 例如,在给定的 HTML 结构中: ```html <style> .a { float: left; width: 50px; height: 50px; background-color: red; } .b { height: 100px; width: 100px; background-color: blue; } </style> <body> <div class="a"></div> <div class="b"></div> </body> ``` 这里 `.a` 被设置为左浮动,这意味着它将尽可能靠近左边并向上对齐页面顶部[^1]。由于`.a` 已经漂浮出去了,所以 `.b` 将填充由 `.a` 空出来的空间,除非采取措施阻止这种情况发生。 为了防止后续内容环绕在浮动对象周围或者被推挤变形,可以通过应用 `clear` 属性来解决这个问题: ```css .outside.clear::after { content: ""; display: table; clear: both; } ``` 这段代码创建了一个伪元素作为清除器,确保任何跟随的内容都不会受到前面浮动的影响[^2]。 #### 定位(Positioning) 相对于浮动而言,定位提供了更灵活的方式来控制元素的确切位置。通过改变 `position` 属性值,可以实现不同的定位效果: - **Static**: 默认情况下所有元素都是静态定位,即按照正常文档流排列,不考虑其他定位方式。 - **Relative**: 相对于自身原本所在的位置偏移一定距离而不影响其它兄弟节点;即使指定了上下左右偏移量也不会脱离标准流。 - **Absolute**: 绝对定位使元素完全跳出当前文档流,并依据最近已定位祖先元素进行绝对坐标计算(如果没有找到这样的父元素,则基于初始包含块——通常是视窗)。 - **Fixed**: 类似于绝对定位但是固定相对于浏览器窗口而不是某个特定容器。 - **Sticky**: 这种类型的定位结合了相对固定的特性,当滚动条到达设定阈值时变为固定状态[^3]。 下面是一个简单的例子展示如何利用 `relative` `absolute` 来调整两个 div 的位置关系: ```html <style type="text/css"> #first { width: 200px; height: 100px; border: 1px solid red; position: relative; top: 20px; left: 20px; } #second { width: 200px; height: 100px; border: 1px solid blue; position: absolute; top: 40px; left: 60px; } </style> ``` 在这个案例里,`#first` 是相对于自己原始位置向下向右各移动了 20 像素,而 `#second` 则是从它的最接近已经过定位的父亲那里获取起始点再做相应偏移[^4]。 综上所述,虽然两者都能用来构建网页布局,但它们的工作机制完全不同:浮动主要用于让文本或其他内联内容围绕着某些区域流动,而定位则是精确地放置单个组件在整个页面中的确切地点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值