1. 程式人生 > >CSS定位中“父相子絕”

CSS定位中“父相子絕”

一、定位的介紹

  定位有三種:相對定位(position:relative)、絕對定位(position:absolute)、固定定位(position:fixed)

二、三種定位的用法,特點和例項

2.1、相對定位  特性:不脫標、形影分離、老家留坑

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Document</title>
 6     <style 
type="text/css"> 7 8 *{ 9 padding: 0; 10 margin: 0; 11 } 12 div{ 13 width: 200px; 14 height: 200px; 15 16 } 17 .box1{ 18 background-color: red; 19 } 20 .box2{ 21 background-color
: green; 22 position: relative; 23 /*top: 50px;*/ 24 left: 300px; 25 } 26 .box3{ 27 background-color: blue; 28 } 29 30 31 </style> 32 </head> 33 <body> 34 35 <!-- 相對定位三大特性: 1.不脫標 2.形影分離 3.老家留坑 36 所以說 相對定位 在頁面中沒有什麼太大的作用。影響我們頁面的佈局。但是我們不要使用相對定位來做壓蓋效果
--> 37 38 <div class="box1"></div> 39 <div class="box2"></div> 40 <div class="box3"></div> 41 42 43 </body> 44 </html>
相對定位的特性
  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>超連結美化</title>
  6     <style type="text/css">
  7         /*清除預設樣式*/
  8         *{
  9             padding: 0;
 10             margin: 0;
 11         }
 12         ul{
 13             list-style: none;
 14         }
 15         .nav{
 16             width: 960px;
 17             /*height: 40px;*/
 18             overflow: hidden;
 19             margin: 100px auto ;
 20             background-color: purple;
 21             /*設定圓角*/
 22             border-radius: 10px;
 23         }
 24         .nav ul li{
 25             float: left;
 26             width: 160px;
 27             height: 40px;
 28             line-height: 40px;
 29             text-align: center;
 30         }
 31         .nav ul li.xiaoming{
 32             position: relative;
 33             top: 40px;
 34             left: 30px;
 35         }
 36         .nav ul li a{
 37             display: block;
 38             width: 160px;
 39             height: 40px;
 40             color: white;
 41             font-size: 20px;
 42             text-decoration: none;
 43             font-family: 'Hanzipen SC';
 44         }
 45         /*a標籤除外,不繼承父元素的color*/
 46 
 47 
 48         .nav ul li a:hover{
 49             background-color: red;
 50             font-size: 22px;
 51         }
 52     </style>
 53 </head>
 54 <body>
 55     
 56     <div class="nav">
 57         <ul>
 58             <li>
 59                 <a href="">網站導航1</a>
 60             </li>
 61             <li class="xiaoming">
 62                 <a href="">網站導航2</a>
 63             </li>
 64             <li>
 65                 <a href="">網站導航3</a>
 66             </li>
 67             <li>
 68                 <a href="">網站導航4</a>
 69             </li>
 70             <li>
 71                 <a href="">網站導航5</a>
 72             </li>
 73             <li>
 74                 <a href="">網站導航6</a>
 75             </li>
 76         </ul>
 77     </div>
 78 </body>
 79 </html>
 80 
 81 
 82 
 83 <!-- 因為相對定位有坑,佔著茅房不拉屎,所以我們一般不要使用相對定位來做壓蓋效果。它在頁面中,效果作用極小,就兩個作用:
 84 1.微調元素位置
 85 2.做絕對定位的參考(父相子絕) 講絕對定位會講
 86 
 87  -->
 88 
 89 
 90 
 91 <!DOCTYPE html>
 92 <html lang="en">
 93 <head>
 94     <meta charset="UTF-8">
 95     <title>Document</title>
 96     <style type="text/css">
 97         *{
 98             padding: 0;
 99             margin: 0;
100         }
101         div{
102             margin: 100px;
103         }
104         .user{
105             font-size: 25px; 
106         }
107         .btn{
108             position: relative;
109             top: 3px;
110             left: -5px;
111         }
112 
113     </style>
114 </head>
115 <body>
116     <!-- 微調我們元素位置-->
117 
118     <div>
119         
120         <input type="text" name="username"   class="user">
121         <input type="button" name="" value="點我" class="btn">
122     </div>
123     
124 </body>
125 </html>
相對定位的用途

2.2、絕對定位  特性:脫標、做遮蓋效果,提升了層級、設定絕對定位之後,不區分行內元素和塊級元素,都能設定寬高

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Document</title>
 6     <style type="text/css">
 7         
 8         *{
 9             padding: 0;
10             margin: 0;
11         }
12         div{
13             width: 200px;
14             height: 200px;
15         }
16         .box1{
17             background-color: red;
18 
19             /*絕對的定位: 1.脫標 2.做遮蓋效果,提升層級 3.設定絕對定位之後,不區分行內元素和塊級元素,都能設定寬高。*/
20             position: absolute;
21         }
22         .box2{
23             background-color: green;
24             
25         }
26         .box3{
27             background-color: blue;
28         }
29         span{
30             width: 100px;
31             height: 100px;
32             background-color: pink;
33             position: absolute;
34         }
35 
36 
37     </style>
38 </head>
39 <body>
40 
41     
42 
43     <div class="box1"></div>
44     <div class="box2"></div>
45     <div class="box3"></div>
46     <span>文字</span>
47     
48 </body>
49 </html>
絕對定位的特性
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <style type="text/css">
 7         body{
 8             width: 100%;
 9             height: 2000px;
10             border: 10px solid green;
11         }
12         
13         .box{
14             width: 200px;
15             height: 200px;
16             background-color: red;
17             /*絕對定位參考點: 
18             1.當我使用top屬性描述的時候 是以頁面的左上角(跟瀏覽器的左上角區分)為參考點來調整位置
19             2.當我使用bottom屬性描述的時候。是以首屏頁面左下角為參考點來調整位置。
20             */
21             position: absolute;
22             top: 100px;
23             /*bottom: 100px;*/
24             left: 18px;
25         }
26     </style>
27 </head>
28 <body>
29     <div class="box">
30         
31     </div>
32 
33 
34     
35 </body>
36 </html>
絕對定位參考點
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <style type="text/css">
 7         *{
 8             padding: 0;
 9             margin: 0;
10         }
11         .box{
12             width: 300px;
13             height: 300px;
14             border: 5px solid red;
15             margin: 100px;
16             /*父盒子設定相對定位*/
17             position: relative;
18             padding: 50px;
19         }
20         .box2{
21             width: 300px;
22             height: 300px;
23             background-color: green;
24             position: relative;
25             
26         }
27 
28         .box p{
29             width: 100px;
30             height: 100px;
31             background-color: pink;
32             /*子元素設定了絕對定位*/
33             position: absolute;
34             top: 0;
35             left: 0;
36         }
37 
38         /*父輩元素設定相對定位,子元素設定絕對定位,那麼會以父輩元素左上角為參考點
39         這個父輩元素不一定是爸爸,它也可以是爺爺,曾爺爺。 如果父親設定了定位,那麼以父親為參考點。那麼如果父親沒有設定定位,那麼以父輩元素設定定位的為參考點
40         */
41 
42     </style>
43 </head>
44 <body>
45     <div class="box">
46 
47         <div class="box2">
48             <p></p>
49         </div>
50     </div>
51     
52 </body>
53 </html>
絕對定位以盒子作為參考點
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <style type="text/css">
 7         *{
 8             padding: 0;
 9             margin: 0;
10         }
11         .box{
12             width: 300px;
13             height: 300px;
14             border: 5px solid red;
15             margin: 100px;
16             /*父盒子設定相對定位*/
17             position: absolute;
18             padding: 50px;
19         }
20         
21 
22         .box p{
23             width: 100px;
24             height: 100px;
25             background-color: pink;
26             /*子元素設定了絕對定位*/
27             position: absolute;
28             top: 10px;
29             left: 20px;
30         }
31 
32 
33     </style>
34 </head>
35 <body>
36 
37     <!-- 不僅僅是父相子絕,父絕子絕 ,父固子絕,都是以父輩元素為參考點 。
38 
39         注意了:父絕子絕,沒有實戰意義,做站的時候不會出現父絕子絕。因為絕對定位脫離標準流,影響頁面的佈局。相反‘父相子絕’在我們頁面佈局中,是常用的佈局方案。因為父親設定相對定位,不脫離標準流,子元素設定絕對定位,僅僅的是在當前父輩元素內調整位置資訊。
40 
41     -->
42     <div class="box">
43 
44             <p></p>
45 
46     </div>
47     
48 </body>
49 </html>
絕對定位以父輩盒子做參考點2
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <style type="text/css">
 7         *{
 8             padding: 0;
 9             margin: 0;
10         }
11         .father{
12             width: 300px;
13             height: 300px;
14             margin: 100px;
15             border: 10px solid red;
16             position: relative;
17             padding: 50px;
18         }
19         .father p{
20             width: 100px;
21             height: 100px;
22             background-color: yellow;
23             position: absolute;
24             top: 10px;
25             left: 40px;
26         }
27     </style>
28 </head>
29 <body>
30     <div class="father">
31         <p></p>
32     </div>
33     
34 </body>
35 </html>
絕對定位的盒子無視父輩的padding
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <style type="text/css">
 7         *{
 8             padding: 0;
 9             margin: 0;
10         }
11         .box{
12             width: 100%;
13             height: 69px;
14             background: #000;
15         }
16         .box .c{
17             width: 960px;
18             height: 69px;
19             background-color: pink;
20             /*margin: 0 auto;*/
21             position: relative;
22             left: 50%;
23             margin-left: -480px;
24 
25             /*設定絕對定位之後,margin:0 auto;不起任何作用,如果想讓絕對定位的盒子居中。當做公式記下來 設定子元素絕對定位,然後left:50%; margin-left等於元素寬度的一半,實現絕對定位盒子居中*/
26         }
27 
28 
29     </style>
30 </head>
31 <body>
32     <div class="box">
33         <div class="c"></div>
34     </div>
35     
36 </body>
37 </html>
絕對定位盒子居中

2.3、固定定位  特性:脫標、遮蓋,提成層級、固定位置

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <style type="text/css">
 7         
 8         *{
 9             padding: 0;
10             margin: 0;
11         }
12         p{
13             width: 100px;
14             height: 100px;
15             background-color: red;
16             /*固定定位:固定當前的元素不會隨著頁面滾動而滾動,
17             特性:1.脫標 2.提升層級 3.固定不變 不會隨頁面滾動而滾動
18                 
19             參考點:設定固定定位,用top描述。那麼是以瀏覽器的左上角為參考點
20             如果用bottom描述,那麼是以瀏覽器的左下角為參考點
21 
22             作用: 1.返回頂部欄 2.固定導航欄 3.小廣告
23 
24             */
25             position: fixed;
26             bottom: 30px;
27             right: 40px;
28         }
29     </style>
30 </head>
31 <body>
32     
33     <div>
34         <p></p>
35         <img src="./bojie.jpg" alt="">
36         <img src="./bojie.jpg" alt="">
37         <img src="./bojie.jpg" alt="">
38         <img src="./bojie.jpg" alt="">
39         <img src="./bojie.jpg" alt="">
40         <img src="./bojie.jpg" alt="">
41 
42     </div>
43 </body>
44 </html>
固定定位特性和應用場景
  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>固定導航欄</title>
  6     <style type="text/css">
  7         *{
  8             padding: 0;
  9             margin: 0;
 10         }
 11         ul{
 12             list-style: none;
 13         }
 14         a{
 15             text-decoration: none;
 16         }
 17         body{
 18             /*給body設定導航欄的高度,來顯示下方圖片的整個內容*/
 19             padding-top: 49px;
 20         }
 21         .wrap{
 22             width: 100%;
 23             height: 49px;
 24             background-color: #000;
 25             /*設定固定定位之後,一定一定要加top屬性和left屬性*/
 26             position: fixed;
 27             top: 0;
 28             left: 0;
 29 
 30             
 31         }
 32         .wrap .nav{
 33             width: 960px;
 34             height: 49px;
 35             margin: 0 auto;
 36 
 37         }
 38         .wrap .nav ul li{
 39             float: left;
 40             width: 160px;
 41             height: 49px;
 42             
 43             text-align: center;
 44         }
 45         .wrap .nav ul li a{
 46             width: 160px;
 47             height: 49px;    
 48             display: block;
 49             color: #fff;
 50             font: 20px/49px "Hanzipen SC";
 51             background-color: purple;
 52         }
 53         .wrap .nav ul li a:hover{
 54             background-color: red;
 55             font-size: 22px;
 56         }
 57 
 58 
 59 
 60     </style>
 61 </head>
 62 <body>
 63     <div class="wrap">
 64         <div class="nav">
 65             <ul>
 66                 <li>
 67                     <a href="#">網頁開發</a>
 68                 </li>
 69                 <li>
 70                     <a href="#">網頁開發</a>
 71                 </li>
 72                 <li>
 73                     <a href="#">網頁開發</a>
 74                 </li>
 75                 <li>
 76                     <a href="#">網頁開發</a>
 77                 </li>
 78                 <li>
 79                     <a href="#">網頁開發</a>
 80                 </li>
 81                 <li>
 82                     <a href="#">網頁開發</a>
 83                 </li>
 84             </ul>
 85         </div>
 86     </div>
 87     <img src="./bojie.jpg" alt="">
 88     <img src="./bojie.jpg" alt="">
 89     <img src="./bojie.jpg" alt="">
 90     <img src="./bojie.jpg" alt="">
 91     <img src="./bojie.jpg" alt="">
 92     <img src="./bojie.jpg" alt="">
 93     <img src="./bojie.jpg" alt="">
 94     <img src="./bojie.jpg" alt="">
 95     <img src="./bojie.jpg" alt="">
 96     <img src="./bojie.jpg" alt="">
 97     <img src="./bojie.jpg" alt="">
 98     <img src="./bojie.jpg" alt="">
 99 
100     
101 </body>
102 </html>
固定定位_固定導航欄

 

三、父相子絕

當父盒子設定為相對定位,子盒子絕對定位的參考點是父盒子的左上角。如果父盒子設定為絕對定位或者固定定位,子盒子同樣是以父盒子的左上角做參考點,但是那樣,父盒子就脫離標準流,沒什麼意義。所以一般情況下,都是要遵從“父相子絕”的原則。附一個父相子絕的案例,如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <style type="text/css">
 7         *{
 8             padding: 0;
 9             margin: 0;
10         }
11         .box{
12             width: 300px;
13             height: 300px;
14             border: 5px solid red;
15             margin: 100px;
16             /*父盒子設定相對定位*/
17             position: relative;
18             padding: 50px;
19         }
20         .box2{
21             width: 300px;
22             height: 300px;
23             background-color: green;
24             position: relative;
25             
26         }
27 
28         .box p{
29             width: 100px;
30             height: 100px;
31             background-color: pink;
32             /*子元素設定了絕對定位*/
33             position: absolute;
34             top: 0;
35             left: 0;
36         }
37 
38         /*父輩元素設定相對定位,子元素設定絕對定位,那麼會以父輩元素左上角為參考點
39         這個父輩元素不一定是爸爸,它也可以是爺爺,曾爺爺。 如果父親設定了定位,那麼以父親為參考點。那麼如果父親沒有設定定位,那麼以父輩元素設定定位的為參考點
40         */
41 
42     </style>
43 </head>
44 <body>
45     <div class="box">
46 
47         <div class="box2">
48             <p></p>
49         </div>
50     </div>
51     
52 </body>
53 </html>