前端中重要的屬性,定位position屬性
- 關于定位
- 固定定位fixed
- 相對定位relative
- 絕對定位absolute
- 層級關系z-index
- 使用定位來完成居中效果
提示:
部落客:章飛_906285288
部落格位址:http://blog.csdn.net/qq_29924041
關于定位fixed
定位也就是元素相對于其正常出現的位置,或者是相對于父級應該出現的位置,甚至相對于浏覽器視窗本身出現的内容;
無論是塊級元素還是行級元素,或是什麼類型的标簽,隻要定位以後(relative除外),都可以支援寬高
定位的相關屬性:
屬性 | 屬性值 |
---|---|
position | fixed/relative/absolute |
left | px / % |
right | px / % |
top | px / % |
bottom | px / % |
固定定位position:fixed
固定定位fixed:相對于我們的可視化區域,即浏覽器的視窗,注意的是,它并不是body,而是能見得到的可視化區域
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta charset="UTF-8"><!--申明目前網頁的編碼集UTF-8-->
<meta name="Generator" content="EditPlus®"> <!--編輯器的名稱-->
<meta name="Author" content="作者是誰">
<meta name="Keywords" content="關鍵詞">
<meta name="Description" content="描述和簡介">
<style type="text/css">
body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: ;}
ul,ol{margin: ; list-style: none; padding: ;}
a{ text-decoration: none; }
*{ margin: ; padding: ; }
div{
width: px;
height: px;
background: deepskyblue;
line-height: px;
text-align: center;
}
</style>
</head>
<body>
<div>box</div>
沒有比腳更長的路,沒有比人更高的山first<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>沒有比腳更長的路,沒有比人更高的山<br>沒有比腳更長的路,沒有比人更高的山<br>沒有比腳更長的路,沒有比人更高的山<br>
</body>
</html>
上述的代碼是沒有添加定位屬性的,可以看到box是占據文檔流的,而文字是在盒子的下方進行顯示出來的。
給div的盒子添加屬性
div{
width: px;
height: px;
background: deepskyblue;
position: fixed;
top: px;
left: px;
line-height: px;
text-align: center;
}
顯示如下:
可以看到上圖中,box盒子的定位是固定的,在可視化區域中滾動條滾動的時候,但是并不會影響到盒子的位置,盒子也不會因其滾動而改變位置,并且盒子原來的位置其實已經不去占有了,即脫離了文檔流了,固定定位 fixed (通常用于固定的導航欄,或者側邊欄廣告)
相對定位relative
相對定位,相對總是要有一個參考點的,那麼相對定位的參考點是什麼??相對定位主要是相對于其正常出現的位置(原來的位置),并且不會去脫離文檔流,是以原來的位置依然保留下來,現在的位置是脫離了文檔流,漂浮起來,是以一般情況下,我們并不去使用相對定位,而隻是把它用來當做父級的定位元素
使用:
position:relative;
div{
width: px;
height: px;
background: deepskyblue;
position: relative;
top: px;
left: px;
line-height: px;
text-align: center;
}
将上面的源代碼修改成relative形式
可以看到相對定位之後,原來的位置依然存在,而新的位置是相對于原來位置來說的,原來的位置依舊保留下來,并且沒有脫離文檔流,是以一般情況下面,我們都很少去使用這種定位關系。而隻是用來做為絕對定位的父級元素的定位
絕對定位absolute
絕對定位,既然是定位,肯定要有一個參考點,固定定位相對的是可視化視窗,相對定位是相對于原來出現的位置,那麼絕對定位呢?絕對定位是相對于最近的父級定位元素(包括我們的三種定位fixed,relative,absolute)定位,隻是用relative去做為父級定位元素,不會去影響父級元素的特性,注意:如果一直到body都沒有找到定位元素,那麼這個時候就相對于我們的body定位
使用:
position:absolute;
注意:父級元素同樣是需要定位的,如果沒有定位的話,會一直往上找
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta charset="UTF-8"><!--申明目前網頁的編碼集UTF-8-->
<meta name="Generator" content="EditPlus®"> <!--編輯器的名稱-->
<meta name="Author" content="作者是誰">
<meta name="Keywords" content="關鍵詞">
<meta name="Description" content="描述和簡介">
<style type="text/css">
body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: ;}
ul,ol{margin: ; list-style: none; padding: ;}
a{ text-decoration: none; }
*{ margin: ; padding: ; }
.box1{width: px;height: px;border: px solid red;position: relative;top: px}
.box2{width: px;height: px;border: px solid green;
position: absolute; left: px;
top: px;}
.box3{width: px;height: px;border: px solid blue;position: absolute;left: px;top: px}
</style>
</head>
<body>
<div class="box1">
box1
<div class="box2">
box2
<div class="box3">
box3
</div>
</div>
</div>
沒有比腳更長的路,沒有比人更高的山first<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>沒有比腳更長的路,沒有比人更高的山<br>
沒有比腳更長的路,沒有比人更高的山<br>沒有比腳更長的路,沒有比人更高的山<br>沒有比腳更長的路,沒有比人更高的山<br>沒有比腳更長的路,沒有比人更高的山<br>
</body>
</html>
顯示效果如下所示:
如上所示:
box1采用的是relative定位形式,box2是相對于box1來進行居中的,是以它會去尋找父級box1的定位形式,box3是相對于box2進行居中的,是以它會去尋找box2的定位形式,是以如果需要相對某個元素進行定位的話,這個時候需要在自己添加絕對定位,并且給父級元素也要有一個定位,無論是fixed,還是relative,或者是absolute也可以
注意:使用absolute之後,margin:auto失效了
注意定位的一些問題:
沒有定位的情況下,快級元素如果不給寬度,是預設父級元素的100%,但是定位以後,不再預設寬度100%,是内容撐開寬度
無論是什麼标簽,隻要定位以後都是可以支援寬高的,除了relative,也就是如果脫離了文檔流後,都是可以支援寬高的
脫離文檔流用了absolute之後,這個時候使用margin:auto失效,但是也可以利用其實作居中效果
層級關系z-index
什麼是層級關系??之前在寫float相關的時候,說浮動的時候會提升半個層級,那麼什麼是層級?因為浮動和定位(relative除外),會脫離文檔流,這樣的一種脫離過程就會導緻原來的位置被其他元素填充,而自己浮在其内容之上,造成一種疊加的效果,那麼這樣一層一層的形式,就叫做層級關系。
是以層級的關系是在針對脫離文檔流的基礎之上的,如果沒有脫離文檔流,每個元素都自己占有一塊位置,也就不會形成層級的關系。
層級屬性z-index:999;
注意:值沒有機關,值越大,層級越高,就會越在上面,并且值沒有上限,也沒有下限,隻比較值得大小
使用定位來完成居中效果
使用cacl計算值來進行居中操作:
計算公式如下:
left:calc(50% - 100); //50%是父級元素的寬度的一半,100是子級元素的一半,水準居中
top:cacl(50% - 100);//50%是父級元素高度的一半,100是子元素的一半,垂直居中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta charset="UTF-8"><!--申明目前網頁的編碼集UTF-8-->
<meta name="Generator" content="EditPlus®"> <!--編輯器的名稱-->
<meta name="Author" content="作者是誰">
<meta name="Keywords" content="關鍵詞">
<meta name="Description" content="描述和簡介">
<style type="text/css">
body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: ;}
ul,ol{margin: ; list-style: none; padding: ;}
a{ text-decoration: none; }
*{ margin: ; padding: ; }
.box1{width: px;height: px;box-shadow: px deeppink;position: relative;margin:px}
.box2{width: px;height: px;box-shadow: px blue;position: absolute;left: calc(% - px);
top:calc(% - px);}
</style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
</body>
</html>
顯示如下:
一種奇葩的方法:
水準居中:
position:absolute;
margin:auto;
left:;
right:;
上下居中:
position:absolute;
margin:auto;
left:;
right:;
如果是上下左右居中的話:
position:absulote;
top:;
bottom:;
left:;
right:;
是以對上面的案例進行修改後,依舊是可以實作居中效果的:
對部分style進行修改:
.box1{width: px;height: px;box-shadow: px deeppink;position: relative;margin:px}
.box2{width: px;height: px;box-shadow: px blue;position: absolute;left: ;);
top:;right: ;bottom: ;margin: auto}
同樣是可以實作居中顯示的:
歡迎持續通路部落格,謝謝