简明的例子讲解position:relative、float、overflow:hidden和inline-block

本文通过一个简单实例详细解析了CSS中的position:relative、float、overflow:hidden及inline-block等属性的作用原理及浏览器布局顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标签(空格分隔): css relative float


我们通过一个简单的实验来了解position:relative float overflow:hiddeninline-block

下面以index.html和layout_new.css这两个文件为例来探讨。

index.html:

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="assets/css/layout_new.css">
  </head>
  <body>
    <div class = "a1">
    a1
        <div class = "b1"> 
        b1
        </div>
    between b1 and b2
        <div class = "b2">
        b2
        </div>
    </div>
  </body>
</html>

layout_new.css

.a1{
    border:10px red solid;
    width:90%;

    overflow:hidden;
}

.b1, .b2{
  display:inline-block;
  border:5px blue solid;
  width:40%;
}

.b1{
    position:relative;
    left:100px;
    
  height:200px;
  background-color:red;

}

.b2{
    float:left;
    height:300px;
}
  • 在layout_new.css中,我们重点关注以下几点:
    • .class为a1的div被设置为overflow:hidden
    • .b1与.b2倍设置为inline-block
    • .b1被设置为 position:relative和left:100px;
    • .b2被设置为float:left
      代码运行效果图如下:
      824069-20160918000123617-1156047618.jpg

我们一一分析:

  • 首先,inline-block是一种布局方式。之后的inline对象会被排列在同一行内。比如我们可以给一个link(a元素)inline-block属性值,使其既具有block的宽度高度特性又具有inline的同行特性。

  • 然后,overflow:hidden在高/宽度确定时能把多余的部分裁剪掉,但是如果没指定高/宽度的话(比如此例中,.a1就没指定高度)那么就可以根据内部内容的高度来自行适应。所以尽管.b1和.b2的高度不同,但最终.a1为了包含所有元素,其高度便以.b2为准了。
    • 如果一定要追究高度自适应的效果的原因,那就是因为overflow:hidden本质的功能还有一个是清除浮动元素(所以浮动的b2被考虑在高度计算范围内)。
      overflow:hidden可防止float元素遮盖原本在那的元素而发生的重叠现象。

不加overflow:hidden的话效果如下:

824069-20160918001953070-736455059.jpg
(由于b2是float的所以脱离了文档流所以a1高度计算时没有考虑 b2的高度)

.b1中的position:relative就是让对象脱离原本的文档流。

在此例中,本来b1的位置是这样的824069-20160918002301570-2135036753.jpg

但加了position:relativeleft:100px后,它就相对于原来按文档流顺序时本该出现的位置往右偏移了100px。

.b2的float:left就是在文档流安排完成后,浮动到对应位置。浮动的对象是在文档流安排完成后再计算位置的。float对象在没设置overflow:hidden的时候可能会与原本在那的元素重叠,但设置了overflow:hidden后可以避免这种重叠情况。



那么总的来说我们可以推测出浏览器在布局时的顺序时这样的:

  • 先把float以外的内容按文档流一个个地显示到屏幕上(先不管relative的偏移,照常放置在那)
  • 然后把各个relative按设定的偏移去让它偏移。
  • 最后让float元素浮进去,把能挤开的元素都挤开
  • 于是就有了最后的效果图。

转载于:https://www.cnblogs.com/worstprogrammer/p/5880207.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值