天天看點

CSS基礎-定位

相對定位

什麼是相對定位?

相對定位就是相對于自己以前在标準流中的位置來移動

格式如下

position: relative;      

示例程式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>相對定位</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        div {
            width: 100px;
            height: 100px;
        }

        .box1 {
            background-color: red;
        }

        .box2 {
            background-color: green;
            position: relative;
            top: 20px;
            left: 20px;
        }

        .box3 {
            background-color: blue;
        }
    </style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</body>
</html>      
CSS基礎-定位

相對定位的注意點

  • 在相對定位中同一個方向上的定位屬性隻能使用一個
  • top / bottom 隻能用一個
  • left / right 隻能用一個
  • 相對定位是不脫離标準流的, 會繼續在标準流中占用一份空間
  • 由于相對定位是不脫離标準流的, 是以在相對定位中區分塊級元素 / 行内元素 / 行内塊級元素
  • 由于相對定位是不脫離标準流的, 并且相對定位的元素會占用标準流中的位置, 是以當給相對定位的元素設定 margin / padding 等屬性時會影響到标準流的布局
CSS基礎-定位

相對定位的應用場景

  • 用于對元素進行微調
  • 配合後面學習的絕對定位來使用
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>定位流</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" name="" id="">
<img src="images/vcode.jpg" alt="">
</body>
</html>      
CSS基礎-定位

絕對定位

什麼是絕對定位?

  • 絕對定位就是相對于 body 或者某個定位流中的祖先元素來定位

格式如下

position: absolute;      

示例代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>絕對定位</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        div {
            width: 100px;
            height: 100px;
        }

        .box1 {
            background-color: red;
        }

        .box2 {
            background-color: green;
            position: absolute;
            left: 0;
            top: 0;
        }

        .box3 {
            background-color: blue;
        }
    </style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</body>
</html>      
CSS基礎-定位
CSS基礎-定位

絕對定位的注意點

  • 絕對定位的元素是脫離标準流的, 不會占用标準流中的位置
  • 由于絕對定位的元素是脫離标準流的, 是以絕對定位的元素不區分塊級元素 / 行内元素 / 行内塊級元素
  • 如果一個絕對定位的元素是以 body 作為參考點, 那麼其實是以網頁首屏的寬度和高度作為參考點, 而不是以整個網頁的寬度和高度作為參考點
  • 相對于 body 定位會随着頁面的滾動而滾動
  • 一個絕對定位的元素會忽略祖先元素的 padding
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>絕對定位</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box1 {
            width: 300px;
            height: 300px;
            background-color: red;
            border: 10px solid #000;
            padding: 30px;
            position: relative;
            box-sizing: border-box;
        }

        .box2 {
            width: 100px;
            height: 100px;
            background-color: green;
            position: absolute;
            left: 0;
            top: 0;
        }
    </style>
</head>
<body>
<div class="box1">
    <div class="box2"></div>
</div>
</body>
</html>      
CSS基礎-定位
CSS基礎-定位

絕對定位的參考點

  • 預設情況下所有的絕對定位的元素, 無論有沒有祖先元素, 都會以 body 作為參考點
  • 如果一個絕對定位的元素有祖先元素, 并且祖先元素中有一個是定位流中的元素, 那麼這個絕對定位的元素就會以定位流的那個祖先元素作為參考點
  • 如果一個絕對定位的元素有祖先元素, 并且祖先元素中有多個是定位流中的元素, 那麼這個絕對定位的元素會以離它最近的那個定位流的祖先元素為參考點
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>絕對定位</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box1 {
            width: 300px;
            height: 300px;
            background-color: red;
            position: relative;
        }

        .box2 {
            width: 200px;
            height: 200px;
            background-color: green;
        }

        .box3 {
            width: 100px;
            height: 100px;
            background-color: blue;
            position: absolute;
            left: 0;
            bottom: 0;
        }
    </style>
</head>
<body>
<div class="box1">
    <div class="box2">
        <div class="box3"></div>
    </div>
</div>
</body>
</html>      
CSS基礎-定位
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>絕對定位</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box1 {
            width: 300px;
            height: 300px;
            background-color: red;
            position: relative;
        }

        .box2 {
            width: 200px;
            height: 200px;
            background-color: green;
            position: relative;
        }

        .box3 {
            width: 100px;
            height: 100px;
            background-color: blue;
            position: absolute;
            left: 0;
            bottom: 0;
        }
    </style>
</head>
<body>
<div class="box1">
    <div class="box2">
        <div class="box3"></div>
    </div>
</div>
</body>
</html>      
CSS基礎-定位

絕對定位的水準居中

  • 注意當一個盒子絕對定位之後不能使用​

    ​margin: 0 auto;​

    ​ 讓盒子自身居中
  • 如果想讓過一個絕對定位的盒子自身居中, 可以使用​

    ​left: 50%;​

    ​​、​

    ​margin-left:-元素寬度一半px;​

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>絕對定位水準居中</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        div {
            width: 400px;
            height: 50px;
            background-color: red;
            position: absolute;
            left: 50%;
            margin-left: -200px;
        }
    </style>
</head>
<body>
<div></div>
</body>
</html>      

絕對定位的應用場景

  • 用于對元素進行微調

子絕父相

企業開發中一般相對定位和絕對定位都是一起出現, 很少單獨使用

為什麼要子絕父相?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>子絕父相</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        ul {
            width: 800px;
            height: 50px;
            background-color: red;
            list-style: none;
            margin: 0px auto;
            margin-top: 100px;
        }

        li {
            width: 100px;
            line-height: 50px;
            float: left;
            background-color: gray;
            text-align: center;
        }

        .li03 {
            background-color: darkgray;
            position: relative;
        }

        ul li img {
            position: absolute;
            left: 37px;
            top: -5px;
        }
    </style>
</head>
<body>
<ul>
    <li>服裝城</li>
    <li>美妝館</li>
    <li>京東超市</li>
    <li class="li03">全球購<img src="images/hot.png"/></li>
    <li>閃購</li>
    <li>團購</li>
    <li>拍賣</li>
    <li>江哥</li>
</ul>
</body>
</html>      
CSS基礎-定位
CSS基礎-定位
CSS基礎-定位

相對定位和絕對定位一般都是用來做覆寫效果的, 當看到某個元素覆寫在另外一個元素上時, 第一時間就要想到定位流

CSS基礎-定位
CSS基礎-定位

固定定位

什麼是固定定位?

固定定位和前面學習的背景關聯方式很像, 背景關聯方式可以讓某個圖檔不随着滾動條的滾動而滾動, 而固定定位可以讓某個盒子不随着滾動條的滾動而滾動

格式如下

position: fixed;      

示例代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>固定定位</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        p {
            width: 100px;
        }

        a {
            width: 50px;
            height: 50px;
            background-color: rgba(0, 0, 0, 0.3);
            border-radius: 25px;
            text-decoration: none;
            text-align: center;
            color: #000;
            position: fixed;
            right: 10px;
            bottom: 10px;
        }
    </style>
</head>
<body>
<p>我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字</p>
<a href="#">^<br>頂部</a>
</body>
</html>      
CSS基礎-定位

固定定位的注意點

  • 固定定位的元素是脫離标準流的, 不會占用标準流中的位置
  • 由于固定定位的元素是脫離标準流的, 是以固定定位的元素不區分塊級元素 / 行内元素 / 行内塊級元素
  • IE6 不支援固定定位

固定定位的應用場景

  • 網頁對聯廣告
  • 網頁頭部通欄(穿透效果)
CSS基礎-定位

靜态定位

什麼是靜态定位?

  • 預設情況下标準流中的元素 position 屬性就等于 static, 是以靜态定位其實就是預設的标準流

靜态定位的應用場景

  • 一般用于配合 JS 清除定位屬性

z-index 屬性

什麼是 z-index 屬性?

用于指定定位的元素的覆寫關系

定位元素的覆寫關系

  • 預設情況下定位的元素一定會蓋住沒有定位的元素
  • 預設情況下寫在後面的定位元素會蓋住前面的定位元素
  • 預設情況下所有元素的 z-index 值都是 0, 如果設定了元素的 z-index 值, 那麼誰比較大誰就顯示在前面

定位元素的從父現象

  • 父元素沒有 z-index 值, 那麼子元素誰的 z-index 大誰蓋住誰
  • 父元素 z-index 值不一樣, 那麼父元素誰的 z-index 大誰蓋住誰
CSS基礎-定位
CSS基礎-定位
CSS基礎-定位
CSS基礎-定位
CSS基礎-定位

z-index 的應用場景

  • 控制界面上的定位元素的覆寫關系, 例如網頁中後面的定位元素不能覆寫前面的導覽列通欄