前端-浮动与定位

浮动与定位

1. 浮动

要讲块级盒子变为行内属性 需要用display 解析空格:display: inline-block

行内块的本质:就是行内元素

行内元素的对齐方式:基线对齐

xhgf: x下面两个脚 形成的线就是基线

  • 盒子里面没有内容的时候,最底部就是基线
  • 盒子里面有内容的时候,以盒子内容最下面的一行文字的基线为准

这种布局就太麻烦了 可以设置 vertical-align: bottom; 水平对齐盒子,所以做水平布局就不使用 display 来做

选择使用浮动来做 最开始用于做图文环绕的效果

浮动可以使一个元素脱离自己原本的位置,脱离原本的排列规则(浏览器默认的排序规则),并在父元素的内容区中向左或向右移动,直到碰到父元素内容区的边界或者其它浮动元素为止。主要用于设置块元素的水平排列。

属性:float

描述
left元素向左浮动
right元素向右浮动
  • 元素设置浮动会从原始位置脱流,在文档中不再占位
  • 浮动找浮动,下一个浮动元素会在上一个浮动元素后面左右浮动 但是两个浮动的盒子按理说是不会相互重叠或覆盖遮挡
  • 任何标签都可以添加浮动属性浮动后的标签有行内块的特点,可以在一行显示,可以设置宽高 。但是比行内块高级,标签换行没有空格的
  • 浮动元素会遮挡正常元素的位置,无法遮挡正常内容的显示。内容围绕在浮动元素周围显示 只会遮挡盒子的背景,合理里的内容和文字会浮动溢出(文字的层级比较高)

清除浮动:

清除浮动带来的影响:

当父级元素没有设置高度时,高度会由文档流内容撑开。而当子元素浮动之后,脱离了文档流,所以父级高度不会被撑开,会被非浮动的元素给挤开导致其脱离了我们想要的位置,这对我们后续的布局结构会造成很多困扰。

  • 对于内容固定的元素,如果子元素都浮动,可以给父元素固定高度(例:导航栏)
    • 有些布局当中
  • 在父元素的末尾添加空的块元素。设置clear:both;清除浮动
  • 为父元素设置overflow:hidden;解决高度为0

2. 定位

宏观上调整元素的位置用定位和浮动,调整盒子与盒子之间的关系用外边距 margin

CSS中的position 属性用来设置元素在页面中的位置,您可以把任何属性放置在任何您认为合适的位置。position 属性分别对应不同的定位方式

一种方式是设置: 但是会使页面更加复杂

可以先设置定位,然后通过 left right top bottom 来设置定位元素具体的位置

可以想 left 等传入具体的数值表示移动了多少个像素,也可以传入一个百分比(left:50%表示矩形盒子左上方的圆点移动到了页面一半的位置)

<style>
    .clearfix {
        clear : both;
    }
</style>
  • relative相对定位:元素设置相对定位,可参照元素在文档中的原始位置进行偏移,不会脱离文档流

    • 元素开启相对定位后,不设置偏移量不会又任何变化
    • 相对定位参照自己自身位置进行定位
    • 不会脱离文档流 相对移动后不会影响页面的布局 只是盒子的表现在页面上的位置发生了变化
    • 不会影响改变元素本身的性质,块级还是块级,行内还是行内
    • 不适于去做很大位置的调整,适合小范围的移动
  • absolute绝对定位:绝对定位的元素参照离他最近已经定位的祖先元素进行偏移,如果没有,则参照窗口进行偏移,以浏览器窗口作为参照物。

    • 绝对定位的元素会脱流,不保留位置,会盖住文字(定位的层级比文字要高)
    • 在文档中不占位,可以手动设置宽高
    • 这就会产生堆叠次序

    “父相子绝” : 父元素设置相对定位,子元素绝对定位,参照已定位的父元素偏移

  • **fixed固定定位:**参照窗口进行定位,不跟随网页滚动而滚动。脱离文档流 参考物是浏览器本身,参考与导航栏

设置定位的元素可以使用偏移属性调整距离参照物的位置

单纯的设置定位方式在我们页面看不到任何的效果,想要元素移动的话还需要设置四个属性

top   	距参照物的顶部
right	距参照物的右侧
bottom	距参照物的底部
left	距参照物的左侧

堆叠次序

元素发生堆叠时可以使用 z-index 属性调整已定位元素的显示位置值越大元素越靠上

  • 属性 : z-index
  • 取值 : 无单位的数值,数值越大,越靠上
  • 堆叠:
    1. 定位元素与文档中正常元素发生堆叠,永远是已定位元素在上
    2. 同为已定位元素发生堆叠,按照HTML代码的书写顺序,后来者居上

通过定位将一个盒子居中:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>通过定位将盒子居中</title>
    <style>
        .box {
            position: absolute;
            left: 50%;
            top: 50%;
            width: 500px;
            height: 500px;
            margin-left: -250px;
            margin-top: -250px;
            background-color: skyblue;
        }
    </style>
</head>
<body>
<div class="box"></div>
</body>
</html>

具体效果:
请添加图片描述
不管屏幕的大小如何调整,盒子永远处于中间位置:
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WhenXuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值