詳解CSS的相對定位和絕對定位

来源:http://www.cnblogs.com/everest33Tong/archive/2016/07/07/5650977.html
-Advertisement-
Play Games

原文地址:http://www.3lian.com/edu/2015/01-31/191131.html 原文地址:http://www.3lian.com/edu/2015/01-31/191131.html 詳解CSS的相對定位和絕對定位 感謝 3lian8 的投遞 時間:2015-01-31 ...


 

原文地址:http://www.3lian.com/edu/2015/01-31/191131.html

詳解CSS的相對定位和絕對定位

感謝 3lian8 的投遞 時間:2015-01-31 來源:cmsgood zcp

 

 CSS的相對定位和絕對定位
通常情況下,我們元素的position屬性的值預設為static 就是沒有定位,元素出現在正常的文檔流中,,這個時候你給這個元素設置的left,right,bottom,top這些偏移屬性都是沒有效果的,不會生效,比如你設置一個距離左邊距偏移100px的聲明:left:100px 那麼這條聲明不會起到任何效果。還有z-index屬性在這時也不會生效。
也就是說我們平時如果不給某元素一個position屬性的聲明,那麼它預設的就是我上述的這種情況,不過因為有了浮動,所以通常情況下我們還真不需要給元素設置position屬性!
但是某些特殊的情況下,我們不得不用到position屬性,那我們今天就講講position屬性的relative和absolute值
首先說relative ,相對定位。
怎麼理解呢?如果說我對某元素設置了相對定位,那麼首先這個元素他會跟其它的元素一樣,出現在文檔流中它該出現的位置,然後,我們可以設置它的水平或垂直偏移量,讓這個元素相對於它在文檔流中的位置的起始點進行移動。有一點要註意,在使用相對定位時,就算元素被偏移了,但是他仍然占據著它沒偏移前的空間。這裡值得註意的一點是:偏移可不是邊距,跟邊距是不一樣的。
我們先看看下圖:
詳解CSS的相對定位和絕對定位 三聯
上圖中有三個浮動的塊,第二個塊是設置了相對定位position:relative了的,這時大家看到它的位置並沒有其它什麼不同,跟其它兩個塊一樣都處在正常的文檔流中。
接下來我給那個設置了position:relative的塊設置一個偏移:left:50px ; top:30px 這時我們再看看效果:

這時我們發現第二個塊針對它本身位置的起始點進行了一個偏移,但是它原來所占據的那個位置空間依然還在(虛線框標示的地方),即使我們把偏移量設置得再大一點,使它完全離開原來的位置,它原來位於文檔流中的位置仍然會存在,不會被第三個塊浮動過來填補掉。
同時,它的偏移也不會把別的塊從文檔流中原來的位置擠開,如果有重疊的地方它會重疊在其它文檔流元素之上,而不是把它們擠開,就像圖中那樣,它已經覆蓋在了第三個塊之上。
我們可以設置它的z-index屬性來調整它的堆疊順序。
接下來我們來看看絕對定位:position:absolute
被設置了絕對定位的元素,在文檔流中是不占據空間的,如果某元素設置了絕對定位,那麼它在文檔流中的位置會被刪除,那這個元素到哪去了呢?它浮了起來,其實設置了相對定位relative時也會讓該元素浮起來,但它們的不同點在於,相對對定位不會刪除它本身在文檔流中占據的那塊空間,而絕對定位則會刪除掉該元素在文檔流中的位置,完全從文檔流中抽了出來,我們可以通過z-index來設置它們的堆疊順序。
那麼絕對定位是如何定位的呢?首先,如果它的父元素設置了除static之外的定位,比如position:relative,或者position:absolute以及position:fixed,那麼它就會相對於它的父元素來定位,位置通過left , top ,right ,bottom屬性來規定,如果它的父元素沒有設置定位,那麼就得看它父元素的父元素是否有設置定位,如果還是沒有就繼續向更高層的祖先元素類推,總之它的定位就是相對於設置了除static定位之外的定位(比如position:relative)的第一個祖先元素,如果所有的祖先元素都沒有以上三種定位中的其中一種定位,那麼它就會相對於文檔body來定位(並非視窗,相對於視窗定位的是fixed)【註意兩者的區別,可以通過最下麵附的一張圖來理解,紅色邊框是視窗body的邊框,紫色背景色是文檔body的部分】

絕對定位的元素相對於誰來定位,我們就把這個"誰"叫著參照物,我們結合上面的講解來看看下圖就明白了 :

我們看一下在瀏覽器里的效果,我們先看看沒有使用絕對定位時的樣子:


 
然後我們給第二個塊設置絕對定位:position:absolute 然後再設置一個偏移:left:150px;top:40px; 這時就變成了下圖所示:


還有一點就是:在設置偏移量的時候,我們可以設置負值。
好了,既然理解了相對定位和絕對定位,那我們應該怎麼把它們運用到實際案例中呢?
首先我們來看看下圖:

在上圖中的去購物車結算按鈕左上方有一個紅色的小塊,用來顯示購物車中有幾件商品,大家在沒學會絕對定位之前可能不知道這個紅色的小塊要怎麼實現,但是現在剛剛學了絕對定位,這個問題就不再是問題了。
我還是親自來做一下吧,我們先把這個背景圖片弄出來:

然後我們寫HTML:

 
    155
    去購物車結算
    
 


上面HTML代碼中的 span元素就是那個用來顯示購物車中商品數量的小紅塊,a元素中是文字描述,b元素是最右邊的小三角。
我們來看一下CSS代碼:
.cart_btn{width:120px;height:30px;background:url(../images/picA.png) no-repeat -17px 7px#f7f7f7;border:1px solid #eee;padding-left:30px;position:relative;_padding-top:5px;_height:25px;}
.cart_btn span{background:url(../images/picA.png) no-repeat -36px -54px;padding-left:7px;position:absolute; top:-12px;left:20px;}
.cart_btn span i{float:left;height:20px;background:url(../images/picA.png) no-repeat right-25px;padding-right:5px;font-style:normal;color:#fff;font-size:14px;}
.cart_btn a{color:#aaa;text-decoration:none;font-size:14px;padding-left:15px;line-height:30px;}
.cart_btn b{display:inline-block;border-color:transparent transparent transparent #CCCCCC;border-style:dashed dashed dashed solid;border-width:5px;height: 0;overflow: hidden;width: 0;}
上面CSS代碼中我們把購物車圖標作為.cart_btn的背景,這裡我們發現一個問題,就是那一張圖片上有三個圖標,大家也發現了,我三個用到圖標的元素都是用這一張圖片做背景,但是顯示的卻不一樣,這裡就用到了我們前面講過的背景定位問題,不會的朋友可認去看看前面的第十一講:css背景屬性background詳細講解-使用背景圖片
CSS中的內容是什麼意思這裡就不講了,要講的話就跑題了,這些都是基本的東西,除了那個CSS三角形之外,其它的如果都還不會,那你肯定沒有好好看前面的文章。再說你實在不懂的話也可以去查一查參考手冊
最後我們來看看瀏覽器里的效果:

詳解CSS的相對定位和絕對定位absolute定位相對於文檔body(並非視窗,相對於視窗定位的是fixed)【註意兩者的區別,可以通過一張圖來理解,紅色邊框是視窗body的邊框,紫色背景色是文檔body的部分


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

-Advertisement-
Play Games
更多相關文章
  • 需求:一個簡單的後臺java程式,收集信息,並將信息發送到遠端伺服器。 實現:實現一個後臺線程,實時處理髮送過來的信息,並將信息發送到伺服器。 技術要點: 1、單例模式 2、隊列 並沒有實現全部代碼,簡單把技術要點寫出來: 此程式只是做信息收集,併為後期數據統計做準備,通過單線程隊列實現,避免申請過 ...
  • js是弱類型語言。許多標準的操作符和代碼庫會把輸入參數強制轉換為期望的類型而不是拋出錯誤。如果未提供額外的邏輯,使用內置操作符的程式會繼承這樣的強制轉換行為。functin square(x){ return x*x; } square("3");//9 強制轉換 強制轉換可以帶來方便性,但也會帶來... ...
  • 第一次接觸NodeJS的文件系統就被它的非同步的響應給搞暈了,後來發現NodeJS判斷文件夾是否存在和創建文件夾是還有同步方法的,但是還是想嘗試使用非同步的方法去實現。 使用的方法:fs.exists(path, callback);fs.mkdir(path, [mode], callback);實現 ...
  • IONIC 是目前最有潛力的一款 HTML5 手機應用開發框架。通過 SASS 構建應用程式,它提供了很多 UI 組件來幫助開發者開發強大的應用。 它使用 JavaScript MVVM 框架和 AngularJS 來增強應用。提供數據的雙向綁定,使用它成為 Web 和移動開發者的共同選擇。Ioni... ...
  • 今天在微信朋友圈裡看到了這樣一條信息: 100只狗排成一行,分別以1、2、3……編號,從這些狗中選出偶數號的殺掉,剩下的狗重新從1開始編號,然後再選偶數殺掉……如此迴圈直到只剩下1只狗為止。 請問這隻狗要站在哪個位置才能保證存活時間最長(除了1號)? 起初,覺得這個很簡單,在本子上隨便傻瓜式的排列下 ...
  • 預設坐標系與當前坐標系 canvas中的坐標是從左上角開始的,x軸沿著水平方向(按像素)向右延伸,y軸沿垂直方向向下延伸。左上角坐標為x=0,y=0的點稱作原點。在預設坐標系中,每一個點的坐標都是直接映射到一個CSS像素上。 但是如果圖像的每次繪製都參考一個固定點將缺少靈活性,於是在canvas中引 ...
  • 本章內容: 簡介 變數 運算符 算術運算符 比較運算符 邏輯運算符 數據類型 語句 簡介 定義 javascript是一門動態的、弱類型的解釋型編程語言,增強頁面動態效果,實現頁面與用戶之間的實時、動態交互。 javascript由三部分組成:ECMAScript、DOM和BOM ECMAScrip ...
  • 開發工具採用WebStorm,沒破解,使用了過期策略:安裝之後不著急打開程式,先設置系統日期為未來的某個日期,比如2020年。然後再打開程式,試用。然後再改回來系統日期。雖然每次打開WebStorm都會提示: 不過不影響使用,點擊“OK”繼續吧。 項目採用anguarjs seed項目作為基礎框架, ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...