19.CSS-定位(上)

本文详细介绍了CSS中的定位流,包括相对定位和绝对定位的概念、注意事项及其应用场景。相对定位不脱离标准流,常用于元素微调;绝对定位则脱离标准流,通常与相对定位结合使用,实现子元素相对于父元素的精确定位。文章通过实例展示了如何利用相对和绝对定位解决布局问题,以及如何实现元素的水平居中。

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

定位

定位流的分类

1.相对定位

什么是相对定位?

相对定位就是相对于自己以前在标准流中的位置来移动

注意点
  1. 相对定位是不脱离标准流的,会继续在标准流中占据一份空间;
  2. 需要配合其他的属性一起使用,相对于自己以前在标准流中的位置来移动;
position: relative;
top: 20px;
right: ;
bottom: ;
left: 20px;
  1. 在相对定位中同一个方向上的定位属性只能使用一个;
  2. 由于相对定位是不脱离标准流的,所以在相对定位中是区分块级元素/行内元素/行内块级元素的;
  3. 由于相对定位是不脱离标准流的,并且相对定位的元素会占用标准流中的位置,所以当给相对定位的元素设置margin/padding等属性的时候,会影响到标准流的布局
应用场景
  1. 用于对元素进行微调;
    例如:当input和img的顶部对不齐时
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>75-定位流</title>
  <style>
    *{
      margin: 0;
      padding: 0;
    }
    input{
      width: 200px;
      height: 50px;
    }
    img{
      width: 100px;
      height: 50px;
      position: relative;
      top: 20px;
    }
  </style>
</head>
<body>
<input type="text">
<img src="images/vcode.jpg">
</body>
</html>
  1. 配合绝对定位来使用。

2.绝对定位

什么是绝对定位?

就是相对于body来定位(不一定是相对于body)
规律:

  1. 默认情况下所有的绝对定位的元素,无论有没有祖先元素,都会以body作为参考点。
  2. 如果一个绝对定位的元素有祖先元素,并且祖先元素,那么这个绝对定位的元素就会以定位流的那个祖先元素作为参考点。
    (只要是这个绝对定位元素的祖先元素都可以;定位流指的是绝对定位、相对定位、固定定位,只有静态定位不行)
  3. 如果一个绝对定位的元素有祖先元素,并且祖先元素也是定位流,而且祖先元素中有多个元素都是定位流,那么这个绝对定位的元素会以离他最近的那个元素为参考点(就近原则)
注意点
  1. 绝对定位的元素是脱离标准流的;
  2. 绝对定位的元素是不区分块级元素/行内元素/行内块级元素的。
  3. 如果一个绝对定位的元素是以body作为参考点,那么其实是以网页首屏的宽度和高度作为参考点,而不是以整个网页的高度和宽度作为参考点的;
  4. 一个绝对定位的元素会忽略祖先元素的padding。
应用场景

在企业开发中,不会单独使用相对定位或者绝对定位。
单独使用相对定位的弊端:
相对定位不会脱离标准流,会继续在标准流当中占用一份空间,所以不利于布局界面。
单独使用绝对定位的弊端:
默认情况下绝对定位的元素会以body作为参考点,所以会随着浏览器的宽度高度的变化而变化。
绝对定位和相对定位结合使用:子绝父相
子元素用绝对定位,父元素用相对定位
例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>79-绝对定位-子绝父相</title>
  <style>
    *{
      padding: 0;
      margin: 0;
    }
    ul{
      list-style: none;
      width: 800px;
      height: 50px;
      margin: 0 auto;
      margin-top: 100px;
    }
    ul li{
      float: left;
      width: 100px;
      height: 50px;
      line-height: 50px;
      text-align: center;
      background-color: #cccccc;
    }
    ul li:nth-of-type(4){
      background-color: yellow;
      position: relative;
    }
    ul li img{
      /*单独使用相对定位的弊端:
        相对定位不会脱离标准流,会继续在标准流当中占用一份空间,所以不利于布局界面。*/
      /*position: relative;
      left: -42px;
      top: -18px;*/
      /*单独使用绝对定位的弊端:
      默认情况下绝对定位的元素会以body作为参考点,所以会随着浏览器的宽度高度的变化而变化*/
      /*position: absolute;
      left: 526px;
      top: 90px;*/
      /*绝对定位和相对定位结合使用:子绝父相
      子元素用绝对定位,父元素用相对定位*/
      position: absolute;
      left: 40px;
      top: -10px;
    }
  </style>
</head>
<body>
<ul>
  <li>服装城</li>
  <li>美妆馆</li>
  <li>京东超市</li>
  <li>全球购
    <img src="images/hot.png">
  </li>
  <li>闪购</li>
  <li>团购</li>
  <li>拍卖</li>
  <li>金融</li>
</ul>
</body>
</html>

如何让绝对定位的元素水平居中
只需要设置绝对定位的元素的left:50%;
然后在设置绝对定位元素的margin-left:—元素宽度的一半px;
例如:

ul li img{
      /*单独使用相对定位的弊端:
        相对定位不会脱离标准流,会继续在标准流当中占用一份空间,所以不利于布局界面。*/
      /*position: relative;
      left: -42px;
      top: -18px;*/
      /*单独使用绝对定位的弊端:
      默认情况下绝对定位的元素会以body作为参考点,所以会随着浏览器的宽度高度的变化而变化*/
      /*position: absolute;
      left: 526px;
      top: 90px;*/
      /*绝对定位和相对定位结合使用:子绝父相
      子元素用绝对定位,父元素用相对定位*/
      position: absolute;
      /*left: 40px;*/
      left: 50%;
      margin-left: -12px;
      top: -10px;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值