• 慕课前端入门-CSS定位


    1.position属性

    属性值:static,relative,absolute,fixed,sticky,inherit
    top,left,right,bottom,z-index

    1.1 static

    static又称静态定位/常规定位/自然定位,定位中的一股清流,回归本真

    作用使元素定位于常规/自然流中(块、行垂直排列下去、行内水平从左到右),如图1
    特点1.忽略top,bottom,left,right,z-index声明,如图2
    2.两个相邻的元素如果都设置了外边距,那么最终外边距=两者外边距中最大的,如图3
    3.具有固定width和height值的元素,如果把左右外边距设置为auto,则左右外边距会自动扩大占满剩余宽度。造成的效果就是这个块水平居中,如图4

    自然流示例-图1

    自然流示例-图2

    自然流示例-图3

    自然流示例-图4

    1.2 relative

    如果元素被选择了使用relative这种模型,它会变成一个可定位的祖先元素,可以被别人当作定位的标杆、参照物。

    作用使元素成为containing-block,官话是可定位的祖先元素
    特点1.可以使用top/right/bottom/left/z-index进行相对定位——相对的是自己在常规流中原来的位置进行偏移,见图1
    2.相对定位的元素不会离开常规流——心念家乡,见图1
    3.任何元素都可以设置为relative,它的绝对定位的后代都可以相对于它进行绝对定位——超好用
    4.可以使浮动元素发生偏移,并控制它们的堆叠顺序,如图2

    相对流示例-图1

    相对流示例-图2

    1.3 absolute

    作用使元素脱离常规流
    特点1.脱离常规流,不再保留位置,如图1
    2.设置尺寸要注意:百分比比的是谁?最近定位祖先元素,如图2
    3.left/right/top/bottom如果设置为0 它将对齐到最近定位祖先元素的各边——衍生出一个居中妙计
    4.left/right/top/bottom如果设置为auto 它将被打回原形
    5.如果没有最近定位祖先元素 会认body做父元素
    6.z-index可以控制堆叠顺序

    绝对流示例-图1

    绝对流示例-图2
    如果长和宽设置的是百分比,而不是具体的值。其百分比比的是最近定位祖先元素(设置relative就会变为定位祖先元素);如果没有,就是body

    绝对流示例-图3
    场景:正文旁边的小广告。只需要将元素设置为relative,再将小广告设置为absolute即可。

    宽高偏移属性外边距效果
    不设置0不设置撑满父元素,如图4
    不设置auto不设置不可见,元素区域为0,如图5
    设置0、auto不设置原样展示,没有任何效果,如图6,7
    设置0auto居中,如图8
    设置autoauto原样展示,没有任何效果,如图9

    绝对流示例-图4
    绝对定位元素未设置宽高,偏移属性设置为0,元素就会填充整个容器。

    绝对流示例-图5
    绝对定位元素未设置宽高,偏移属性设置为auto,元素的区域为0,将不可见。

    绝对流示例-图6
    绝对定位元素设置宽高,偏移属性设置为0,会被打回原形。

    绝对流示例-图7
    绝对定位元素设置宽高,偏移属性设置为auto,会被打回原形。

    绝对流示例-图8
    绝对定位元素设置宽高,偏移属性设置为0,外边距设置为auto,元素会相对定位祖先元素居中展示。
    注意:margin必须和偏移属性配合使用,否则没有效果。

    绝对流示例-图9
    绝对定位元素设置宽高,偏移属性设置为auto,外边距设置为auto,会被打回原形。

    1.4 fixed 固定定位

    fixed常用域狗皮膏药广告

    作用在视口固定位置,不受任何元素的影响
    特点1.跟absolute区别:absolute相对于最近定位祖先元素,而fixed相对于视口固定不变。
    2.固定定位元素不会随着视口滚动而滚动
    3.继承absolute特点,也可以设置偏移量,层叠顺序。

    1.5 position之sticky

    当滚动到特定位置时,导航栏在固定。

    作用relative+fixed的完美结合,制造出吸附效果
    特点1.如果产生偏移,原位置还是在常规流中,即保留原位置
    2.如果它的祖先元素有滚动,那么它的偏移标尺就是最近祖先元素
    3.如果最近祖先元素没有滚动,那么它的偏移标尺是视口
    4.上下左右的偏移规则

    问题:为什么设置top呢?
    当我们不设置top的时候,或者将它设置为自动,它是没有偏移效果的。在磁贴定位模型中,如果没有给目标元素设置偏移量或者偏移属性,它的特性是跟relative一致的。还是在常规流中,不会有特殊的效果。
    当给它设置偏移量的时候,他会按照偏移规则做一个偏移。
    偏移量:top:0为例,从祖先元素的顶部开始,以目标元素的高和宽,绘制一个矩形。当页面向上滚动时,一旦这个矩形和元素重合,即捕获了这个目标元素,会说目标元素进入了定位矩形。当它进入这个定位矩形中,就变成了固定定位,具备了固定定位的特性。当页面向下滚动,离开定位矩形,就失去了固定定位的特性。
    规则:在祖先元素的置顶位置,会以当前元素高和宽绘制一个矩形。矩形捕获目标元素,就固定;离开,就不再固定。
    磁贴定位流示例-图1

    磁贴定位流示例-图2

    2.补充

    2.1 box-sizing

    属性描述
    inherit规定从父元素继承box-sizing属性的值
    content-box在宽度和高度之外绘制元素的内边距和边框,默认
    width=元素的宽度
    height=元素的高度
    border-box从已经设定的宽度和高度中分别减去边框和内边距之后得到的值
    width=padding+border+元素的宽度
    height=padding+border+元素的高度

    2.2 nth-child()

    nth-child(n):匹配属于其父元素的第n个元素。不论元素的类型;其中n可以是数字、关键字或公式。
    nth-child(odd):当n为odd和even时:可用于匹配下表是奇数或偶数的子元素的关键词

    注意:
          第一个元素的下标是1,即元素的下标是从1开始的
          IE不支持:nth-child()选择器
    

    2.3 z-index

    z-index属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。

    描述
    auto默认。堆叠顺序与父元素相等
    number设置元素的堆叠顺序
    inherit规定应该从父元素继承z-index属性的值
    注意:
          1.z-index值可以为负值
          2. z-index仅能在定位元素上奏效,如relative,absolute,fixed
          3. z-index不能逾越层级
    

    3.总结

    盒子:通过改变元素的内边距或外边距来实现盒子的移动
    定位:通过改变元素的位置移动来实现盒子的移动

    4.利用定位属性来实现导航跟随效果

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <!-- <link rel="stylesheet" type="text/css" href="./reset.css"> -->
      <style>
        *{margin:0;padding:0;}
        .page{
           100%;
          height: 4043px;
          background:aquamarine;
        }
        .nav{
           160px;
          height: 205;
          font-family: '微软雅黑';
          position: fixed;
          /* 实现导航居中,先利用位置移动到50%处,再向上挪动一半的距离*/
          left: 0;
          top: 50%;
          margin-top: -103px; 
        }
        .nav-li{
           160px;
          height: auto;/*40px*/
          border-bottom: 1px solid #fff;
          background: #333;
          text-align: center;
          line-height: 40px;
          color: #fff;
          font-size: 16px;
          cursor: pointer;
        }
        .title{
           160px;
          height: 40px;
        }
        .nav-li ul{
           160px;
          height: auto;
          background:#fff;
          display: none;
        }
        .nav-li:hover ul{
          display: block;
    
        }
        .nav-li ul li{
           160px;
          height: 40px;
          border-bottom: 1px dashed #666;
          color:#333;
          text-align: center;
          line-height: 40px;
          list-style-type: none;
          position: relative;
        }
        .nav-li ul li:hover .list-3{
          display: block;
        }
        .list-3{
           160px;
          height: auto;
          position: absolute;
          left: 150px;
          top: 0px;
          display: none;
        }
        .list-3Dom{
           160px;
          height: 40px;
          background:#444;
          border-bottom: 1px solid #fff;
          text-align: center;
          line-height: 40px;
          color:#fff;
        }
      </style>
    </head>
    <body>
      <div class="page">
        <div class="nav">
          
          <div class="nav-li">
            <div class="title">慕课网的标题</div>
            <ul>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                </div>
              </li>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                </div>
              </li>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                </div>
              </li>
            </ul>
          </div>
          
          <div class="nav-li">
            <div class="title">慕课网的标题</div>
            <ul>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                </div>
              </li>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                </div>
              </li>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                </div>
              </li>
            </ul>
          </div>
          
          <div class="nav-li">
            <div class="title">慕课网的标题</div>
            <ul>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                </div>
              </li>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                </div>
              </li>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                </div>
              </li>
            </ul>
          </div>
          
          <div class="nav-li">
            <div class="title">慕课网的标题</div>
            <ul>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
              </div>
              </li>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
              </div>
              </li>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                </div>
              </li>
            </ul>
          </div>
    
          <div class="nav-li">
            <div class="title">慕课网的标题</div>
            <ul>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                </div>
              </li>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                </div>
              </li>
              <li>二级栏目
                <div class="list-3">
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                  <div class="list-3Dom">三级栏目</div>
                </div>
              </li>
            </ul>
          </div>
    
        </div>
      </div>
    </body>
    </html>
    
  • 相关阅读:
    《ActionScript 3 CookBook 简体中文完整版》下载
    打开组件服务超慢,打不开属性窗口。
    无法引用Microsoft.Office.Interop.Excel的解决
    HttpWebResponse类
    反射性能优化 标记个
    配置文件入门 WebConfig.config常用配置节点介绍
    配置文件的读写
    HTTP权威指南阅读记录 第一章
    IIS
    锁机制与原子操作 <第四篇>
  • 原文地址:https://www.cnblogs.com/csj2018/p/13033854.html
Copyright © 2020-2023  润新知