CSS中Position 的用法詳解。

来源:http://www.cnblogs.com/iflygofy/archive/2016/08/08/5748719.html
-Advertisement-
Play Games

記得一年前,到一家公司面試的時候,問我position有哪幾個屬性,我憋半天才回答出2個,大家估計都清楚,就是我們經常用到的2個(relative,absolute)。 最近又用到了好多,深入研究了下。 一、語法: position:static | relative | absolute | fi ...


記得一年前,到一家公司面試的時候,問我position有哪幾個屬性,我憋半天才回答出2個,大家估計都清楚,就是我們經常用到的2個(relative,absolute)。

最近又用到了好多,深入研究了下。

一、語法:

position:static | relative | absolute | fixed

取值:
static :預設值,無特殊定位,對象遵循正常文檔流。top,right,bottom,left等屬性不會被應用,預設值。
relative:相對定位,對象遵循正常文檔流,但將依據top,right,bottom,left等屬性在正常文檔流中偏移位置。
absolute:絕對定位,對象脫離正常文檔流,使用top,right,bottom,left等屬性進行絕對定位。而其層疊通過z-index屬性定義。
fixed:固定定位,對象脫離正常文檔流,使用top,right,bottom,left等屬性以視窗為參考點進行定位,當出現滾動條時,對象不會隨著滾動。

 

二、四個屬性的詳細介紹:

1、static,預設值
說 到這裡我們不得不提一下一個定義——文檔流,很多書對文檔流這個概念只是一筆帶過,沒有詳細解答,但我根據自己的經驗和理解對它進行了總結,文檔流其實就 是文檔的輸出順序,也就是我們通常看到的由左到右、由上而下的輸出形式,在網頁中每個元素都是按照這個順序進行排序和顯示的,而float和 position兩個屬性可以將元素從文檔流脫離出來顯示。

預設值就是讓元素繼續按照文檔流顯示,不作出任何改變。

2、relative,相對定位

相對定位一個最大特點是:自己通過定位跑開了還占用著原來的位置,不會讓給他周圍的諸如文本流之類的對象。相對定位也比較獨立,做什麼事它自己說了算,要定位的時候,它是以自己本身所在位置偏移的(相對對象本身偏移)。本身位置變化了,而元素最初所占的物理空間依然還是存在,另外一點元素相對定位後並沒有影響其他相鄰的元素。

3、absolute,絕對定位

位置被設置為absolute後,被設置的元素會被定義到包含它的元素內的指定坐標(X坐標、Y坐標)。

比如:position:absolute;left:20px;top:80px; 這個容器始終位於距離瀏覽器左20px,距離瀏覽器上80px的這個位置。它不會隨著視窗大小變化,只是固定在一個特定的坐標軸上面;

4、固定位置,fixed

在理論上,被設置為fixed的元素會被定位於瀏覽器視窗的一個指定坐標,不論視窗是否滾動,它都會固定在這個位置。但是目前它在IE6中不被支持.

Ie6處理方法:

body{
    background-image:url(about:blank); /* for IE6 */
    background-attachment:fixed; /*必須*/
}

.demo{
    _position:absolute;
    _top:expression(documentElement.scrollTop + documentElement.clientHeight-this.offsetHeight);
}

總的例子html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>position</title>
<style type="text/css">
*{margin:0;padding:0;}
.clearfix:before,.clearfix:after {content:"";display:table;}
.clearfix:after {clear:both;overflow:hidden;}
.clearfix {zoom:1;}
.mgt20{margin-top:20px;}
.w1000{width:1000px;margin:0 auto;min-height:1900px;}

#demo{  
    position:relative;  
    border:1px solid #000;  
    margin-top:50px;
    top:-50px;  
    line-height:18px; 
} 
.static,.fixed,.absolute,.relative{  
    width:200px;      
}  
.relative{  
    position:relative;  
    left:150px;  
    top:-20px;  
    background-color:#ffe4e1;  
}
.static{   
    position:static; 
    background-color:#bbb;    
}  
.fixed{  
    position:fixed;  
    top:200px;
    left:50%;
    margin-left:-500px;
    background-color:#ffc0cb;
}  
.absolute{ 
    position:absolute;  
    right:10px;  
    top:10px;  
    background-color:#b0c4de;  
} 
</style>
</head>
<body>
<div class="w1000">
    <div class="mgt20 clearfix">
        <div id="demo" class="clearfix">  
            <div class="static">static: 預設值。無特殊定位,對象遵循HTML定位規則 </div>  
            <div class="absolute">absolute: 將對象從文檔流中拖出,使用left,right,top,bottom 等屬性相對於其最接近的一個最有定位設置的父對象進行絕對定位。如果不存在這樣的父對象,則依據body對象。而其層疊通過z-index屬性定義 </div>  
            <div class="fixed">fixed屬性的說明:fixed總是以body為定位時的對象,總是根據瀏覽器的視窗來進行元素的定位,通過"left"、 "top"、 "right"、"bottom" 屬性進行定位。</div>  
            <div class="relative">relative1:對象不可層疊,對象原來占有的位置保留,但將依據 left,right,top,bottom 等屬性在正常文檔流中偏移位置 </div> 
        </div> 
    </div>    
</div>
</body>
</html>

 

顯示:

 

三、position註意事項

1、當Position屬性值為Relative時對象原來占有的位置保留,其後面 的對象按原來文檔流仍然保持原來的位置Top的值表示對象相對原位置向下偏移的距離bottom的值表示對象相對原位置向上偏移的距離兩者同時存在時,只有Top起作用。left的值表示對象相對原位置向右偏移的距離right的值表示對象相對原位置向左偏移的距離兩者同時存在時,只有left起作用。

2、當Position屬性值為absolute時對象從文檔流中抽取出來,原占有的位置被後面的對象頂替上來Top的值表示對象上邊框與瀏覽器視窗頂部 的距離bottom的值表示對象下邊框與瀏覽器視窗底部的距離兩者同時存在時,只有Top起作用;如果兩者都未指定,則其頂端將與原文檔流位置一致,即垂 直保持位置不變。left的值表示對象左邊框與瀏覽器視窗左邊的距離right的值表示對象右邊框與瀏覽器視窗右邊的距離兩者同時存在時,只有left起 作用;如果兩者都未指定,則其左邊將與原文檔流位置一致,即水平保持位置不變。
在Position屬性值為absolute的同時,如果有一級父對象(無論是父對象還是祖父對象,或者再高的輩分,一樣)的Position屬性值為Relative時,則上述的相對瀏覽器視窗定位將會變成相對父對象定位,這對精確定位是很有幫助的。

 

五、positon 與 display
元素分為內聯元素和區塊元素兩類(當然也有其它的),在內聯元素中有個非常重要的常識,即內聯元素是不可以設置區塊元素所具有的樣式,例如:width | height。
relative : 原來是什麼類型的依舊是什麼類型。
absolute | fixed : 元素就被重置為了區塊元素,

例如:打算為span元素指定大小,並絕對定位

<span style="position:absolute; width:100px; height:50px;">span</span>這是完全正確的,
<span style="position:absolute; display:block; width:100px; height:100px;">span</span>,這裡的display:block就是多餘的了。

 

六、position 與 float
一個元素若設置了 position:absolute | fixed; 則該元素就不能設置float。這是一個常識性的知識點,因為這是兩個不同的流,一個是浮動流,另一個是“定位流”。
但是 relative 卻可以。因為它原本所占的空間仍然占據文檔流。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 實例運行結果如下 實例運行結果如下 ...
  • 今天寫了個java類連接oracle,拋出了這個問題 java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@127.0.0.1:1521:orcl; 很顯然是URL錯誤,以前碰到過類似的問題,故一起總結一下。 以前 ...
  • 前言:關於EL表示式開發用的非常多,現在我們回顧一下關於如果去操作EL表達式 1:EL表達式語法 所有EL表達式都是由{開始}結束,表達式中用.和[]操作符來訪問數據比喻${user.userName}、${user["userName"]}是等效的。 2:幾個重要的操作符 算術,邏輯,關係操作符和 ...
  • 學習設計模式的過程中,發現相關的作者們都會用UML類圖來表示一個模式的整體脈絡,這種方式確實直觀明瞭,既能體現巨集觀思路、又能兼顧實現細節。真的是很妙的工具。在開始正式學習設計模式之前,有必要對UML有個大概的掌握。然後,日後有望解鎖更多關於UML方面的技能,比如說:建模。哈哈,有點小興奮呢。 UML ...
  • 一、概述 外觀模式提供了一個統一的介面,用來訪問子系統中的一群介面。外觀定義了一個高層介面,讓子系統更容易使用。 二、解決問題 在上一講中,我們學習了適配器模式,它是用來轉換一個介面的,而外觀模式可以理解為轉換一群介面,客戶只要調用一個介面,而不用調用多個介面就可以達到目的。想想現實生活中例子,我們 ...
  • 一、概述 適配器模式將一個類的介面,轉換為客戶期望的另一個介面。適配器讓原本不相容的類可以合作無間 二、解決問題 從模式的定義中,我們看到適配器模式就是用來轉換介面,解決不相容問題的。想想我們現實生活中的適配器,最常用的就是手機充電器了,也叫做電源適配器,它把家用交流強電轉換為手機用的直流弱電。其中 ...
  • 還記得剛學ADO.NET的情景麽?還記得當年是怎麼從ADO.NET被忽悠到用SqlHelper的麽?話說從入門到走上工作崗位那些年,我們就一直被純純地教導或引導,ADO.NET太原始,得封裝成SqlHelper或DBHelper......後來,這種思維一直深深就存在腦海裡,並不知不覺中進入了潛意識... ...
  • 線上預覽 源碼下載 lightgallery.js是一款純JavaScript輕量級響應式lightbox插件。該Lightbox插件支持圖片,視頻,iframe等多種媒體。支持全屏,導航,縮放,下載等功能,還支持多種動畫過渡效果。lightgallery.js的特點還有: 完全響應式設計。 內置插 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...