学习布局(17) 特殊布局---定位布局

18 篇文章 0 订阅
14 篇文章 0 订阅

 特殊布局情况----- 定位布局

        HTML+CSS布局方式之中,最常见的两种布局模式是,浮动布局和定位布局当页面中出现多个元素

 定位-----position属性:

        为一个元素设置位置区域

position: static 默认值
position: absolute

  •  生成绝对定位的元素,相对于static定位以外的第一个父元素进行定位
  • 元素通过 left、top、right、bottom属性

position: fixed 

  •    生成绝对定位的元素,相对于浏览器窗口进行定位
  •    元素通过 left、top、right、bottom属性

position: relative 

  • 生成相对定位的元素,相对于其正常位置进行定位

 定位对文档流的影响:

  •  当一个元素设置了position:absolute 和 postion: fixed时, 该元素会脱离文档流,从而对父级以及兄弟级元素的布局造成影响。

  • position: relative,不会脱离文档流,不会有布局上的问题

 

.wrap div {
            width: 200px;
            height: 200px;
            border: 2px solid red;
            background-color: #ff9999;
        }

        /**
           第一个div设置position:relative,也根据top等属性产生了位置偏差,而第二个div的位置没有受到任何影响,说明
           相对定位不会让一个元素脱离文档流
         */
        .wrap .box {
            position: relative;
            left: 20px;
            top: 50px;
            background-color: #3399ff;
        }
<div class="wrap">
        <div class="box">设置relative的div元素</div>
        <div>HTML5布局之路</div>
    </div>

 

        .wrap div {
            width: 200px;
            height: 200px;
            border: 2px solid red;
            background-color: #ff9999;
        }      
        .wrap .box1 {
            position: absolute;
            left: 20px;
            top: 50px;
            background-color: #3399ff;
        }
 <div class="wrap">
         <div class="box1">设置absolute的div元素</div>
         <div>HTML5布局之路</div>
     </div>

 绝对定位的位置控制

 绝对定位的元素彼此之间不互相影响

       设置属性值为absolute会将对象脱离出正常的文档流,进行绝对定位,并不会考虑它周围内容的布局。假如其他定位对象

已经占据了给定的位置,它们之间不会相互影响,而会在同一个位置层叠。

  <div class="wrap">
        <div class="box1">设置absolute的div元素</div>
        <div>HTML5布局之路</div>
    </div>

 绝对定位激活:

   必须设置position: absolute, 且指定left right top bottom 中至少一个属性。

 绝对定位针对谁进行定位?

  •    如果父级没有设置position属性,那么当前的absolute则结合 top,right,left,bottom属性则以浏览器左上角为原始点进行定位。
  •    如果父级设置了position属性,且值为relative、absolute、fixed,则top,right,left,bottom针对父级的左上角为原始点进行定位

定位-----left属性:

    控制元素偏移的4种属性,top,right,left,bottom属性均可以设置为负值,单位可以选用绝对单位、或者是相对定位百分比。
    同时设置同方向的两个值,要基于元素是否存在固定宽高而分成两类
  绝对定位元素存在固定宽高:

  •  在水平方向上,无论是先写left,还是先写right,都按照left的值进行渲染
  •  在垂直方向上,不论先写top值,还是后书写bottom值,均按照了top值进行渲染

  绝对定位元素没有设置固定的宽高:

  •  合理的left与right(或top与bottom)都会生效
  •  元素宽度 = 父级宽度 - left值 - right值
  •  如果计算得到的元素宽度为负值,会自动变为0像素

 层级覆盖关系

定位----- z-index属性

       在一个网页中存在多个定位的元素,当这些元素相互重叠时,就涉及到层叠的关系。定位元素默认的z-index值为0,数字越大,级别越高,数字越小,级别越低。如果将z-index设置为负值,那么层叠顺序会在HTML文档之后, 如果HTML文档设置了背景颜色,这个定位元素将不会被看见。

      z-index 只能针对同级的标签有效,针对两个绝对定位的元素进行层级比较时,首先比较其父级,再比较其子级

.demo {
            position: relative;
        }

        .box_1 {
            position: absolute;
            top: 50px;
            left: 50px;
            width: 150px;
            height: 150px;
            background-color: #3399ff;
            border: 1px solid salmon;
            z-index: 12;
        }

        .box_2 {
            position: absolute;
            top: 100px;
            left: 100px;
            width: 180px;
            height: 180px;
            background-color: chocolate;
            border: 1px solid red;
            z-index: 5;
            text-align: right;
        }

固定定位 :

     fixed可定位相对于浏览器窗口的指定坐标。这个元素的位置可通过left,right,top,bottom属性来规定不论窗口滚动与否,元素都会留在指定位置。
     该定位方法,在移动端极为常用,在pc端也会用于头部导航区,无论内容区的高度有多少,滚动条是否滚动,固定位置的元素始终显示在初始位置。

         .main {
            width: 400px;
            margin: 0 auto;
            padding-top: 40px;
        }

        .nav {
            position: fixed;
            top: 0px;
            width: 400px;
            height: 40px;
            background-color: #ff9999;
            text-align: center;
            line-height: 40px;
            color: white;
        }

        .box {
            height: 150px;
            border: 1px solid black;
        }
   <!-- 固定定位 -->
    <div class="main">
        <!-- 当滚动条滚动时,导航条始终显示在浏览器窗口的最顶端 -->
        <div class="nav">被固定定位的导航条</div>
        <!--
            由于导航条进行了固定定位,已经脱离了文档流,因此它之后的兄弟级元素在计算布局时会忽略到
         导航条,但导航条依旧占据着空间,并且位于所有的结构之上,通过为父元素设置一个padding-top值,并且
         让这个值等于导航条的高度,从而避免这个问题。
        -->
        <div class="box">内容块01</div>
        <div class="box">内容块02</div>
        <div class="box">内容块03</div>
        <div class="box">内容块04</div>
        <div class="box">内容块05</div>
    </div>

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值