1. 程式人生 > >視覺化格式模型(二) 定位概述(普通流、絕對定位)

視覺化格式模型(二) 定位概述(普通流、絕對定位)

2、定位概念

上一節熟悉了盒模型, 現在來看一下視覺化格式模型和定位模型。 理解這兩個模型的細微差異是非常重要的, 因為它們一起控制著如何在頁面上佈置每個元素

2.1 視覺化格式模型

CSS有三種基本的定位機制:普通流、 浮動、絕對定位。 除非專門指定, 否則所有框都在普通流中定位。

在普通流中元素框的位置由元素在HTML中的位置決定。

p、h1或div等元素常被稱為塊級元素, 這意味著這些元素顯示為一塊內容, 即“塊框”。 與之相反, a和span等元素被稱為行內元素, 因為他們的內容顯示在行中, 即“行內框”。

可以使用display屬性改變生成的框的型別。 通過將display設定為block,可以讓行內元素表現得像塊級元素一樣。將display屬性設定為none, 讓生成的元素根本沒有框。 這樣,這個框及所有內容就不再顯示, 不佔用文件的空間

visibility:hidden 只是隱藏了元素的可見性,所佔用的文件空間並未消失, 這就是它與display:hidden的區別。

  • 塊級框從上至下一個接一個地垂直排列, 框之間的垂直距離由框的垂直外邊距計算出來。
  • 行內框在一行中水平排列。 可以使用水平內邊距、邊框和外邊距調整它們的水平間距。 但是垂直內邊距、邊框和外邊距不影響行內框的高度(行內框在文件中的位置)。 同樣, 在行內框上設定顯式的寬高也沒有影響。

    由一行形成的水平框稱為行框, 行框的高度總是足以容納它包含的所有行內框。 但是,設定行高可以增加這個框的高度。 因此, 修改行內框尺寸唯一方法是修改行高或者水平邊框,水平內邊距或水平外邊距

我們來看下面幾個例子:

例1:

html

 <div></div><a href=""></a><a href=""></a><div></div>    

css

 body{
     padding:0;
     margin:0; 
     font-size:0;
 }

 a {
     background:#000;
     padding:5px 20px;
     border:3px solid #FF0;
     margin:10px;  
     font-size
:0; height:10px; width:500px; } div { background:#ccc; height:20px; font-size:12px; margin:0; border:1px solid #ff0000; }
View Code

效果:

在上面這個例子中, 給行內元素a, 設定了寬高、內邊距、邊框、外邊距。 在這其中寬高並未起作用, 垂直方向上的內邊距、邊框、外邊距也並未改變元素的尺寸, 也就是說並未改變元素在文件中的位置, 高度仍然是0, 所以我們看到a元素上下的兩個div元素相鄰,並未被a元素隔開。

把上邊的例子稍微改一下, 給a設定設定行高, 看一下效果:

例2:

CSS

 body{
     padding:0;
     margin:0; 
     font-size:0;
 }

 a {
     background:#000;
     padding:5px 20px;
     border:3px solid #FF0;
     margin:10px;  
     font-size:0; 
     height:10px;
     width:500px;
     line-height:16px;

 }

 div {
     background:#ccc;
     height:20px;
     font-size:12px;
     margin:0;
     border:1px solid #ff0000;
 }
View Code

效果

元素高度被改變了!

現在回頭看第一個例子,可以發現body和a都設定了font-size:0, 試一下把body中的刪除只保留a元素,看一下效果:

例3:

CSS

 body{
     padding:0;
     margin:0; 
 }

 a {
     background:#000;
     padding:5px 20px;
     border:3px solid #FF0;
     margin:10px;  
     font-size:0px; 
     height:10px;
     width:500px;

 }

 div {
     background:#ccc;
     height:20px;
     font-size:12px;
     margin:0;
     border:1px solid #ff0000;
 }
View Code

效果

兩個div元素之間出現了垂直邊距? 現在我們看一下上面說過的行框, 行內元素會被行框包圍, 雖然在這裡a元素設定了font-size:0; 但是包含它的行框仍然會有一個預設的font-size。

我們還可以嘗試修改line-height。
例4:

CSS

 body{
     padding:0;
     margin:0; 
     font-size:0;
     line-height:10px;
 }

 a {
     background:#000;
     padding:5px 20px;
     border:3px solid #FF0;
     margin:10px;   
     height:10px;
     width:500px;
     line-height:0;

 }

 div {
     background:#ccc;
     height:20px;
     font-size:12px;
     margin:0;
     border:1px solid #ff0000;
 }
View Code

效果

在上邊的例子中, 給body設定了行高, 即使a元素設定了行高為0, 但是包含它的行內框,仍然繼承了body這個屬性, 所以它有了高度, 上下div之間出現了間距。

各個瀏覽器之間 這些情況或許還會有不同, 總之普通文件流中行內元素的高度很難控制, 個人認為給它們設定display:inline-block是一個不錯的解決辦法

display:inline-block。 顧名思義, 這個宣告讓元素像行內元素一樣水平依次排列。 但是,框的內容仍然符合塊級框的行為, 例如能夠顯示地設定寬高、垂直外邊距、垂直內邊距。

2.2 相對定位(position:relative)

相對定位是一個容易掌握的概念。 如果對一個元素設定相對定位, 通過設定垂直或水平的位置, 這個元素會“相對於”它的起點(原位置)移動。 例如: 設定元素 top:20px; left:20px; 那麼框將出現在距原本元素頂部左側各20px的地方。

使用相對定位時,無論是否移動, 元素仍然佔據原先的空間, 因此移動元素會導致它覆蓋其他框, 相對定位仍然屬於普通流定位模型。 如下圖:

對藍框進行定位後,它仍佔據原先的位置。

2.3 絕對定位(position:absolute)

與相對定位相反, 絕對定位使元素與文件流無關, 因此不佔據空間。 普通文件流中其他的元素的佈局不受絕對定位元素的影響。參見下圖:

對藍框定位後, 它下面的元素上移佔據了藍框原本的位置, 彷彿藍框不存在一般。

絕對定位的元素位置是相對於距離它最近的那個已定位的祖先(相對/絕對)元素決定的。 如果元素沒有已定位的祖先元素, 那麼它的位置相對於初始包含塊。

絕對定位在大多數現代瀏覽器中實現得很好, 但是在IE5.5與IE6中有一個bug。 如果要設定絕對定位框的right或bottom, 那麼需要確保它的 最近的相對定位的祖先元素 已經設定了尺寸。 如果沒有, 那麼IE會錯誤的相對於初始包含快(畫布)定位這個框。 簡單的解決辦法 就是給相對定位的框設定尺寸。 或者儘量使用 top/left定位。

固定定位(position:fixed)

固定定位是絕對定位的一種。 差異在於固定元素的包含快是視口(viewport)。 這使得我們能夠建立總是出現在視窗固定位置的元素。

不過,IE6和更低版本不支援固定定位。 要解決這個問題可以使用javascript。

可以通過z-index屬性控制定位框(相對/絕對)的堆疊次序。 z-index的值越高, 框的位置就上面。

相關推薦

視覺格式模型 定位概述普通絕對定位

2、定位概念 上一節熟悉了盒模型, 現在來看一下視覺化格式模型和定位模型。 理解這兩個模型的細微差異是非常重要的, 因為它們一起控制著如何在頁面上佈置每個元素 2.1 視覺化格式模型 CSS有三種基本的定位機制:普通流、 浮動、絕對定位。 除非專門指定, 否則所有框都在普通流中定位。 在普通流中元

視覺格式模型模型與外邊距疊加

可以參考《精通CSS 高階WEB標準解決方案》第三章。 視覺化格式模型 視覺化格式模型要掌握的3個最重要的CSS概念是 浮動、定位、盒模型。 這些概念控制在頁面上安排和顯示元素的方式, 形成CSS的基本佈局。 主要學習內容: 盒模型的複雜性和特點 如何以及為什麼使用外邊距 絕對定位

學會資料視覺,老闆給我漲薪了附原型文件

❝ 揭開資料視覺化的神祕面紗,升職加薪指日可待! ❞ 敲黑板! 「資料視覺化」 就是讓領導,在看資料這件事上,獲得更爽體驗的辦法。 領導爽到了,自然升職加薪也就水到渠成。所以咱們今天就來一起揭開資料視覺化的神祕面紗。 1 先看看實戰效果 動態折線圖 動態柱形圖 動態環形圖 動態條形圖 2 教練

Web前端面試指導(十四):如何居中一個元素正常絕對定位浮動元素?

web前端題目點評這道題目的提問比較多,連續問了三個問題,正常元素、絕對定位元素、互動元素如何居中,而且居中沒有說清楚是垂直居中還是水平居中,要回答清楚這個問題,必須得有深厚的功底,而且要分類的來回答,條理要清楚。可以先把水平居中各種情況說清楚,然後在把垂直居中說清楚。(一)元素水平居中的方式1)行級元素水平

總結一下各種居中內聯元素塊級元素浮動元素絕對定位元素*水平垂直

一個 常見 一是 -a flex 樣式 有一個 margin round   在平時寫網頁樣式的時候,元素居中應該是最常見不過的了,在這裏我們把常見居中的情況簡單總結一下。本文討論以下幾種情況:內聯元素、塊級元素、浮動元素、絕對定位元素。居中的情況分兩種情況:水平居中和垂直

創建叉樹 叉排序樹Binary Sort Tree

sort data scanf urn pre [] print 二叉樹 str #include<stdio.h> #include<stdlib.h> /* 遞歸前中後遍歷 */ typedef struct node { int data;

遞歸之叉搜索樹和排序雙向鏈表

views ima img practice tpi cti 遞歸 ng- 排序 鏈接:https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=11179&

如何居中一個元素正常絕對定位浮動元素

題目點評 這道題目的提問比較多,連續問了三個問題,正常元素、絕對定位元素、互動元素如何居中,而且居中沒有說清楚是垂直居中還是水平居中,要回答清楚這個問題,必須得有深厚的功底,而且要分類的來回答,條理要清楚。可以先把水平居中各種情況說清楚,然後在把垂直居中說清楚。 (一)元素水平居中的方

資料結構演算法題/最大子矩陣維陣列中和最大的連續子矩陣

給定一個矩陣,都是整數,求出其中的最大子矩陣。 可以將問題轉換為求一維陣列的最大子序列和的問題。具體見https://blog.csdn.net/fkyyly/article/details/83088247 /** * 其實思想是控制新的子矩陣開始,按列相加變成一維陣列,然後再求一維陣列

TesseractOCR光學字元識別引擎概述

目錄 四、單詞識別(Word Recognition) 五、形狀分類器( Shape Classification) 六、分詞與檢索(Segmentation and Search) 七、自適應分類器 (adaptive classifier) 四、單詞識

資料結構篇:校園最短路徑導航:弗洛伊德演算法理解與應用

求最短路徑最常用的有迪傑斯特拉(Dijkstra)和弗洛伊德(Floyd)演算法兩種。本著簡潔為王道的信條,我選擇了Floyd演算法。 Floyd演算法 首先來看一個簡單圖,紅色標記代表在陣列的下標,橙色標記代表距離(邊權值) 我們用D[6][6]這個矩陣儲存兩點之間最短路徑,

caffe權值視覺,特徵視覺,網路模型視覺

-------------------------------------------------------------------------------- 權值視覺化 對訓練後的網路權值進行視覺化可以判斷模型的優劣及是否欠(過)擬合。經過良好訓練的網路權值通常表現為美

劍指offer第24題叉樹中和為某一值的路徑

題目:輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 思想:由於本題中的根要在前面,因而我們首先想到的是前序遍歷。當用前序遍歷的方式訪問某一節點時,我們把該節點新增到路徑上,並累加

Caffe版Faster R-CNN視覺——網路模型,影象特徵,Loss圖,PR曲線

視覺化網路模型   Caffe目前有兩種常用的視覺化模型方式:  * 使用Netscope線上視覺化  * Caffe程式碼包內建的draw_net.py檔案可以視覺化網路模型 Netscope   Netscope能視覺化神經網路體系結構(或技術上說,Netscope能視覺

binary tree level order traversal ii)叉樹自下向上層序遍歷

題目描述 Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by level from leaf t

CSS中的三種基本的定位機制普通定位浮動

一、普通流 普通流中元素框的位置由元素在XHTML中的位置決定。塊級元素從上到下依次排列,框之間的垂直距離由框的垂直margin計算得到。行內元素在一行中水平佈置。 普通流就是html文件中的元

python學習十自己製作模組並安裝到系統靜態方法

第一:自己製作模組並安裝到系統 1、建立檔案setup.py,並對這個檔案新增內容: from distutils.core import setup setup(name="xxx",version="1.0",description="xxx",author="xxx"

【LeetCode-面試演算法經典-Java實現】【145-Binary Tree Postorder Traversal叉樹非遞迴後序遍歷

原題   Given a binary tree, return the postorder traversal of its nodes’ values.   For exampl

【leetcode】145Binary Tree Postorder Traversal叉樹非遞迴後序遍歷

二叉樹後序遍歷非遞迴方法很多書和部落格已經講的很清楚啦,這裡就是記錄一下方便自己日後看 基本思路是: 利用棧來實現 先找到最左節點,過程中的節點都入棧 如果該節點沒有右孩子或前一步訪問了右孩子(根據後序遍歷二叉樹的特點可以知道,如果當前節點有右孩子,則訪問當前節點前一定是

Python學習筆記第三天,文件操作函數

input 釋放空間 打開方式 只需要 不能 解決 信息 無法查看 一個 一、文件處理   1、文件打開模式    打開文本的模式,默認添加t,需根據寫入或讀取編碼情況添加encoding參數。    r 只讀模式,默認模式,文件必須存在,不能存在則報異常。    w