CSS定位

一、定位

1.1 网页常见布局方式

1.标准流

  1. 块级元素独占一行 ->垂直布局
  2. 行内元素/行内块元素一行显示多个 ->水平布局

2.浮动

  1. 可以让原本垂直布局的块级元素变成水平布局

3.定位

  1. 可以让元素自由的摆放在网页的任意位置

  2. 一般用于盒子之间的层叠情况 

1.2 定位的常见应用场景

1、可以解决盒子与盒子之间的层叠问题

  • 定位之后的元素层级最高,可以层叠在其他盒子上面

 2、可以让盒子始终固定在屏幕中的某个位置

 2.1 定位初体验

1.需求:页面中两个盒子,要求完成图片的效果,可以如何完成

  • 针对于盒子与盒子之间的层叠问题,推荐使用定位完成

 2.2 使用定位的步骤

1.设置定位方式

属性名:position

常见属性值:

定位方式属性值
静态定位static
相对定位relative
绝对定位absolute
固定定位fixed

2.设置偏移值

  • 偏移值设置分为两个方向,水平和垂直方向各选一个使用即可
  • 选取的原则一般是就近原则(离哪边近用哪个)

方向属性名属性值含义
水平left数字+px距离左边的距离
水平right数字+px距离右边的距离
垂直top数字+px距离上边的距离
垂直bottom数字+px距离下边的距离

 

 

 3.1 静态定位

介绍:静态定位是默认值,就是之间认识的标准流

代码: position:static;

注意点:

  1. 静态定位就是之前的标准流,不能通过方位属性进行移动
  2. 之后说的定位不包括静态定位,一般特指后几种:相对、绝对、固定

 

 4.2 相对定位

介绍:自恋型定位,相对于自己之前的位置进行移动

代码:position:relative;

特点:

  1. 需要配合方位属性实现移动
  2. 相对于自己原来位置进行移动
  3. 在页面中占位置 ->没有脱标

 

错了 是左边。。。。。。。。。。。。。。。。。。。。。。。。。。。

应用场景:

  1. 配合绝对定位组CP(子绝父相)
  2. 用于小范围的移动 

 5.1 绝对定位

介绍:拼爹型定位,相对于非静态定位的父元素进行定位移动

代码:position:absolute;

特点:

  1. 需要配合方位属性实现移动
  2. 默认相对于浏览器可视区域进行移动
  3. 在页面中不占位置 ->已经脱标

 

应用场景:

  1. 配合相对定位组CP(子绝父相) 

5.2 绝对定位到底相对于谁进行偏移

绝对定位相对于谁移动?

  1. 祖先元素中没有定位 -->默认相对于浏览器进行移动
  2. 祖先元素有定位-->相对于 最近的 有定位 的祖先元素进行移动 

 

 

 

 

 

6.1 子绝父相介绍

场景:让子元素相对于父元素进行自由移动 

含义:

  • 子元素:绝对定位
  • 父元素:相对定位

 

子绝父相好处:

  • 父元素是相对定位,则对网页布局影响最小 

 

 

 

 (拓展补充)子绝父绝特殊场景

场景:在使用子绝父相的时候,发现父元素已经有绝对定位了,此时直接子绝即可

原因:

  • 父元素已经有定位已经满足要求,如果盲目修改父元素定位方式,可能会影响之前写好的布局

 

 (案例)卡片模块的hot图标定位案例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            background-color: #f4f5f9;
        }

        .box {
            /* 父相 */
            position: relative;
            width: 228px;
            height: 270px;
            background-color: #fff;
            margin: 100px auto;
        }

        .box .product {
            width: 228px;
            width: 100%;
        }

        .box h3 {
            height: 52px;
            /* background-color: pink; */
            padding-left: 24px;
            padding-right: 20px;
            margin-top: 25px;
            font-size: 14px;
            font-weight: 400;
        }

        .box p {
            margin-left: 24px;
            font-size: 12px;
            color: #929292;
        }

        .box p span {
            color: #f77321;
        }

        .hot {
            /* 子绝 */
            position: absolute;
            right: -4px;
            top: 4px;
        }
    </style>
</head>

<body>
    <div class="box">
        <img src="../img/hot.png" class="hot">
        <img src="../img/product.png" class="product">
        <h3>Android网络图片加载框架详解</h3>
        <p><span>高级</span>• 1125人在学习</p>
    </div>
</body>

</html>

 6.3 子绝父相水平居中案例

需求:使用子绝父相,让子盒子在父盒子中水平居中(父子元素任意宽度下都能实现) 

 步骤:

  1. 子绝父相
  2. 先让子盒子往右移动父元素宽度的一半
    1. left: 50%;
  3. 再让子盒子往左移动子元素宽度的一半
    1. 普通做法:margin-left:负的子盒子宽度的一半 缺点:子盒子宽度变化后需要重新改代码  margin-left取值的百分比相对于父元素
    2. 优化做法:transform:translateX(-50%); 优点:表示沿着X轴负方向(往左)始终移动自己宽度的一半,子盒子宽度变化不需要更改代码

 

 

 6.5 子绝父相水平垂直都居中案例

需求:使用子绝父相,让子盒子在父盒子中水平垂直都居中(父子元素任意宽高下都实现)

 

 步骤:

  1. 子绝父相
  2. left:50%;
  3. top:50%;
  4. transform:translate(-50%,-50%);

(案例)导航二维码居中定位案例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .nav {
            height: 40px;
            border-bottom: 1px solid #ccc;
        }

        ul {
            list-style: none;
            width: 1200px;
            margin: 0 auto;
            background-color: red;
        }

        ul li {
            float: left;
            width: 20%;
            height: 40px;
            border-right: 1px solid #ccc;
            box-sizing: border-box;
            text-align: center;
            line-height: 40px;
        }

        ul li:last-child {
            border-right: 0;
        }

        ul li a {
            /* 为了让用户可点击的范围更大,点击整个框就可以跳转而不是点击文字,所以给a
            标签设置了高度和宽度,转换成块元素 */
            display: block;
            height: 40px;
            /* background-color: red; */
            text-decoration: none;
            color: #000;

        }

        .nav .app {
            position: relative;
        }

        .nav .app .code {
            position: absolute;
            left: 50%;
            transform: translateX(-50%);
            top: 40px;
            border: 1px solid #ccc;
        }
    </style>
</head>

<body>
    <div class="nav">
        <ul>
            <li><a href="#">我要投资</a></li>
            <li><a href="#">平台介绍</a></li>
            <li><a href="#">新手专区</a></li>
            <li><a href="#" class="app">手机微金所<img src="../img/code.jpg" class="code"></a></li>
            <li><a href="#">个人中心</a></li>
        </ul>
    </div>
</body>

</html>

 (案例)底部半透明遮罩效果案例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            width: 1226px;
            height: 600px;
            /* background-color: pink; */
            margin: 0 auto;
            background: url('../img/bg.jpg');
            position: relative;
        }

        .mask {
            /* 本来块元素不设置宽度默认是父元素的宽度,但是设置了绝对定位之后,子元素就不再具有标准流的特性,会脱标,宽高默认由内容撑开,不再显示宽度,因此不设置宽度,子盒子不会显示出来 */
            /* width: 1226px; */
            width: 100%;
            height: 150px;
            background-color: rgba(0, 0, 0, .7);
            position: absolute;
            bottom: 0;
            right: 0;
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="mask"></div>
    </div>
</body>

</html>

 注意点:定位的元素会脱标(如:绝对定位),脱标后的元素宽高默认由内容撑开

 7.1 固定定位

介绍:死心眼型定位,相对于浏览器进行定位移动

代码:position:fixed;

特点:

  1. 需要配合方位属性实现移动
  2. 相对于浏览器可视区域进行移动
  3. 在页面中不占位置->已经脱标

应用场景:

  1. 让盒子固定在屏幕中的某个位置 

 

 

 

 

 8.1 元素层级问题

不同布局方式元素的层级关系:

  • 标准流 < 浮动 < 定位

 

不同定位之间的层级关系

  • 相对、绝对、固定默认层级相同
  • 此时HTML中写在下面的怨怒是层级更高,会覆盖上面的元素

 

 

 8.2 更改定位元素的层级

场景:改变定位元素的层级

属性名:z-index

属性值:数字

  • 数字越大,层级越高

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值