css定位

CSS 定位 (Positioning) 屬性允許你對元素進行定位。

CSS 定位和浮動

CSS 為定位和浮動提供了一些屬性勺三,利用這些屬性雷滚,可以建立列式布局,將布局的一部分與另一部分重疊吗坚,還可以完成多年來通常需要使用多個表格才能完成的任務(wù)祈远。
定位的基本思想很簡單,它允許你定義元素框相對于其正常位置應(yīng)該出現(xiàn)的位置刻蚯,或者相對于父元素绊含、另一個元素甚至瀏覽器窗口本身的位置。

一切皆為框

div炊汹、h1p 元素常常被稱為塊級元素躬充。這意味著這些元素顯示為一塊內(nèi)容,即“塊框”讨便。與之相反充甚,spanstrong 等元素稱為“行內(nèi)元素”,這是因為它們的內(nèi)容顯示在行中霸褒,即“行內(nèi)框”伴找。
可以使用 display 屬性改變生成的框的類型。這意味著废菱,通過將 display 屬性設(shè)置為 block技矮,可以讓行內(nèi)元素(比如 <a> 元素)表現(xiàn)得像塊級元素一樣抖誉。還可以通過把 display 設(shè)置為 none,讓生成的元素根本沒有框衰倦。這樣的話袒炉,該框及其所有內(nèi)容就不再顯示,不占用文檔中的空間樊零。

行內(nèi)元素與塊級元素

區(qū)別

行內(nèi)元素會在一條直線上排列(默認寬度只與內(nèi)容有關(guān))我磁,都是同一行的,水平方向排列驻襟。

塊級元素各占據(jù)一行(默認寬度是它本身父容器的100%(和父元素的寬度一致)夺艰,與內(nèi)容無關(guān)),垂直方向排列沉衣。塊級元素從新行開始郁副,結(jié)束接著一個斷行。

塊級元素可以包含行內(nèi)元素和塊級元素豌习。行內(nèi)元素不能包含塊級元素霞势,只能包含文本或者其它行內(nèi)元素。

行內(nèi)元素與塊級元素屬性的不同斑鸦,主要是盒模型屬性上:行內(nèi)元素設(shè)置width無效,height無效(可以設(shè)置line-height)草雕,margin上下無效巷屿,padding上下無效

行內(nèi)元素和塊級元素轉(zhuǎn)換
 display:block; (字面意思表現(xiàn)形式設(shè)為塊級元素)
 display:inline; (字面意思表現(xiàn)形式設(shè)為行內(nèi)元素)
inline-block

inline-block 的元素(如inputimg)既具有塊級元素可以設(shè)置寬高的特性墩虹,同時又具有行內(nèi)元素默認不換行的特性嘱巾。當(dāng)然不僅僅是這些特性,比如 inline-block 元素也可以設(shè)置 vertical-align(因為這個垂直對齊屬性只對設(shè)置了inline-block的元素有效) 屬性诫钓。
HTML 中的換行符旬昭、空格符、制表符等合并為空白符菌湃,字體大小不為 0 的情況下问拘,空白符自然占據(jù)一定的寬度,使用inline-block 會產(chǎn)生元素間的空隙惧所。

關(guān)于如何去除inline-block的間隙骤坐,請看張鑫旭.列出的N種方法...

display屬性
描述
none 此元素不會被顯示。
block 此元素將顯示為塊級元素下愈,此元素前后會帶有換行符纽绍。
inline 默認。此元素會被顯示為內(nèi)聯(lián)元素势似,元素前后沒有換行符拌夏。
inline-block 行內(nèi)塊元素僧著。
list-item 此元素會作為列表顯示。
run-in 此元素會根據(jù)上下文作為塊級元素或內(nèi)聯(lián)元素顯示障簿。
table 此元素會作為塊級表格來顯示(類似 <table>)盹愚,表格前后帶有換行符。
inline-table 此元素會作為內(nèi)聯(lián)表格來顯示(類似 <table>)卷谈,表格前后沒有換行符杯拐。
table-row-group 此元素會作為一個或多個行的分組來顯示(類似 <tbody>)。
table-header-group 此元素會作為一個或多個行的分組來顯示(類似 <thead>)世蔗。
table-footer-group 此元素會作為一個或多個行的分組來顯示(類似 <tfoot>)端逼。
table-row 此元素會作為一個表格行顯示(類似 <tr>)。
table-column-group 此元素會作為一個或多個列的分組來顯示(類似 <colgroup>)污淋。
table-column 此元素會作為一個單元格列顯示(類似 <col>)
table-cell 此元素會作為一個表格單元格顯示(類似 <td> 和 <th>)
table-caption 此元素會作為一個表格標(biāo)題顯示(類似 <caption>)
inherit 規(guī)定應(yīng)該從父元素繼承 display 屬性的值顶滩。

display 屬性規(guī)定元素應(yīng)該生成的框的類型。這個屬性用于定義建立布局時元素生成的顯示框類型寸爆。對于 HTML 等文檔類型礁鲁,如果使用 display 不謹慎會很危險,因為可能違反 HTML 中已經(jīng)定義的顯示層次結(jié)構(gòu)赁豆。

CSS 定位機制

CSS 有三種基本的定位機制:普通流(文檔流)仅醇、浮動和絕對定位。
除非專門指定魔种,否則所有框都在普通流中定位析二。也就是說,普通流中的元素的位置由元素在 (X)HTML 中的位置決定节预。

塊級框從上到下一個接一個地排列叶摄,框之間的垂直距離是由框的垂直外邊距計算出來。

行內(nèi)框在一行中水平布置安拟「蛳牛可以使用水平內(nèi)邊距、邊框和外邊距調(diào)整它們的間距糠赦。但是会傲,垂直內(nèi)邊距、邊框和外邊距不影響行內(nèi)框的高度拙泽。由一行形成的水平框稱為行框(Line Box)唆铐,行框的高度總是足以容納它包含的所有行內(nèi)框。不過奔滑,設(shè)置行高可以增加這個框的高度艾岂。

CSSposition屬性

通過使用position 屬性,我們可以選擇 4 種不同類型的定位朋其,這會影響元素框生成的方式王浴。
??static
??元素框正常生成脆炎。塊級元素生成一個矩形框,作為文檔流的一部分氓辣,行內(nèi)元素則會創(chuàng)建一個或多個行框秒裕,置于其父元素中。
??relative
??元素框偏移某個距離钞啸。元素仍保持其未定位前的形狀几蜻,它原本所占的空間仍保留。
??absolute
??元素框從文檔流完全刪除体斩,并相對于其包含塊定位梭稚。包含塊可能是文檔中的另一個元素或者是初始包含塊。元素原先在正常文檔流中所占的空間會關(guān)閉絮吵,就好像元素原來不存在一樣弧烤。元素定位后生成一個塊級框,而不論原來它在正常流中生成何種類型的框蹬敲。
??fixed
??元素框的表現(xiàn)類似于將 position 設(shè)置為 absolute暇昂,不過其包含塊是視窗本身。

相對定位實際上被看作普通流定位模型的一部分伴嗡,因為元素的位置相對于它在普通流中的位置急波。

描述
absolute 生成絕對定位的元素,相對于 static 定位以外的第一個父元素進行定位瘪校。元素的位置通過 "left", "top", "right" 以及 "bottom" 屬性進行規(guī)定幔崖。
fixed 生成絕對定位的元素,相對于瀏覽器窗口進行定位渣淤。元素的位置通過 "left", "top", "right" 以及 "bottom" 屬性進行規(guī)定。
relative 生成相對定位的元素吉嫩,相對于其正常位置進行定位价认。因此,"left:20" 會向元素的 LEFT 位置添加 20 像素自娩。
static 默認值用踩。沒有定位,元素出現(xiàn)在正常的流中(忽略 top, bottom, left, right 或者 z-index 聲明)忙迁。
inherit 規(guī)定應(yīng)該從父元素繼承 position 屬性的值脐彩。

CSS 相對定位

設(shè)置為相對定位的元素框會偏移某個距離。元素仍然保持其未定位前的形狀姊扔,它原本所占的空間仍保留惠奸。

相對定位是一個非常容易掌握的概念。如果對一個元素進行相對定位恰梢,它將出現(xiàn)在它所在的位置上佛南。然后梗掰,可以通過設(shè)置垂直或水平位置,讓這個元素“相對于”它的起點進行移動嗅回。

如果將 top 設(shè)置為 20px及穗,那么框?qū)⒃谠恢庙敳肯旅?20 像素的地方。如果 left 設(shè)置為 30 像素绵载,那么會在元素左邊創(chuàng)建 30 像素的空間埂陆,也就是將元素向右移動。

#box_relative {
  position: relative;
  left: 30px;
  top: 20px;
}

image

注意娃豹,在使用相對定位時焚虱,無論是否進行移動,元素仍然占據(jù)原來的空間培愁。因此著摔,移動元素會導(dǎo)致它覆蓋其它框。

CSS絕對定位

設(shè)置為絕對定位的元素框從文檔流完全刪除定续,并相對于其包含塊定位谍咆,包含塊可能是文檔中的另一個元素或者是初始包含塊。元素原先在正常文檔流中所占的空間會關(guān)閉私股,就好像該元素原來不存在一樣摹察。元素定位后生成一個塊級框,而不論原來它在正常流中生成何種類型的框倡鲸。

絕對定位使元素的位置與文檔流無關(guān)供嚎,因此不占據(jù)空間。這一點與相對定位不同峭状,相對定位實際上被看作普通流定位模型的一部分克滴,因為元素的位置相對于它在普通流中的位置。
普通流中其它元素的布局就像絕對定位的元素不存在一樣:

#box_relative {
  position: absolute;
  left: 30px;
  top: 20px;
}

image

絕對定位的元素的位置相對于最近的已定位祖先元素优床,如果元素沒有已定位的祖先元素劝赔,那么它的位置相對于最初的包含塊。
因為絕對定位的框與文檔流無關(guān)胆敞,所以它們可以覆蓋頁面上的其它元素着帽。可以通過設(shè)置z-index屬性來控制這些框的堆放次序移层。

z-index屬性

z-index 屬性設(shè)置元素的堆疊順序仍翰。擁有更高堆疊順序的元素總是會處于堆疊順序較低的元素的前面。
元素可擁有負的 z-index 屬性值观话。

描述
auto 默認予借。堆疊順序與父元素相等。
number 設(shè)置元素的堆疊順序。
inherit 規(guī)定應(yīng)該從父元素繼承 z-index 屬性的值蕾羊。

CSS浮動

浮動的框可以向左或向右移動喧笔,直到它的外邊緣碰到包含框或另一個浮動框的邊框為止。
由于浮動框不在文檔的普通流中龟再,所以文檔的普通流中的塊框表現(xiàn)得就像浮動框不存在一樣书闸。

請看下圖,當(dāng)把框 1 向右浮動時利凑,它脫離文檔流并且向右移動浆劲,直到它的右邊緣碰到包含框的右邊緣:


image

再請看下圖,當(dāng)框 1 向左浮動時哀澈,它脫離文檔流并且向左移動牌借,直到它的左邊緣碰到包含框的左邊緣。因為它不再處于文檔流中割按,所以它不占據(jù)空間膨报,實際上覆蓋住了框 2,使框 2 從視圖中消失适荣。
如果把所有三個框都向左移動现柠,那么框 1 向左浮動直到碰到包含框,另外兩個框向左浮動直到碰到前一個浮動框弛矛。


image
CSS float 屬性

在 CSS 中够吩,我們通過 float 屬性實現(xiàn)元素的浮動。

float 屬性定義元素在哪個方向浮動丈氓。以往這個屬性總應(yīng)用于圖像周循,使文本圍繞在圖像周圍,不過在 CSS 中万俗,任何元素都可以浮動湾笛。浮動元素會生成一個塊級框,而不論它本身是何種元素闰歪。

描述
left 元素向左浮動
right 元素向右浮動嚎研。
none 默認值。元素不浮動课竣,并會顯示在其在文本中出現(xiàn)的位置。
行框和清理

浮動框旁邊的行框被縮短置媳,從而給浮動框留出空間于樟,行框圍繞浮動框。
因此拇囊,創(chuàng)建浮動框可以使文本圍繞圖像:

image

要想阻止行框圍繞浮動框迂曲,需要對該框應(yīng)用 clear 屬性。clear 屬性的值可以是 left寥袭、right路捧、bothnone关霸,它表示框的哪些邊不應(yīng)該挨著浮動框。
為了實現(xiàn)這種效果杰扫,在被清理的元素的上外邊距上添加足夠的空間队寇,使元素的頂邊緣垂直下降到浮動框下面:

image
CSS clear屬性

clear 屬性規(guī)定元素的哪一側(cè)不允許其他浮動元素。

描述
left 在左側(cè)不允許浮動元素章姓。
right 在右側(cè)不允許浮動元素佳遣。
both 在左右兩側(cè)均不允許浮動元素。
none 默認值凡伊。允許浮動元素出現(xiàn)在兩側(cè)零渐。
inherit 規(guī)定應(yīng)該從父元素繼承 clear 屬性的值。

讓我們更詳細地看看浮動和清理系忙。假設(shè)希望讓一個圖片浮動到文本塊的左邊诵盼,并且希望這幅圖片和文本包含在另一個具有背景顏色和邊框的元素中。您可能編寫下面的代碼:

<style>
  .news {
      background-color: gray;
      border: solid 1px black;
  }
  .news img {
      float: left;
  }
 .news p {
      float: right;
  }
</style>

<div class="news">
    <img src="news-pic.jpg" />
    <p>some text</p>
</div>

這種情況下银还,出現(xiàn)了一個問題风宁。因為浮動元素脫離了文檔流,所以包圍圖片和文本的 div 不占據(jù)空間见剩。
如何讓包圍元素在視覺上包圍浮動元素呢杀糯?需要在這個元素中的某個地方應(yīng)用 clear:


image

不幸的是出現(xiàn)了一個新的問題,由于沒有現(xiàn)有的元素可以應(yīng)用清理苍苞,所以我們只能添加一個空元素并且清理它固翰。

<style>
  .news {
      background-color: gray;
      border: solid 1px black;
  }
  .news img {
      float: left;
  }
 .news p {
      float: right;
  }
 .clear {
      clear: both;
  }
</style>

<div class="news">
    <img src="news-pic.jpg" />
    <p>some text</p>
    <div class="clear"></div>
</div>

這樣可以實現(xiàn)我們希望的效果,但是需要添加多余的代碼羹呵。常常有元素可以應(yīng)用 clear骂际,但是有時候不得不為了進行布局而添加無意義的標(biāo)記。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冈欢,一起剝皮案震驚了整個濱河市歉铝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凑耻,老刑警劉巖太示,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異香浩,居然都是意外死亡类缤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門邻吭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來餐弱,“玉大人,你說我怎么就攤上這事「囹荆” “怎么了瓢谢?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長驮瞧。 經(jīng)常有香客問我氓扛,道長,這世上最難降的妖魔是什么剧董? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任幢尚,我火速辦了婚禮,結(jié)果婚禮上翅楼,老公的妹妹穿的比我還像新娘尉剩。我一直安慰自己,他們只是感情好毅臊,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布理茎。 她就那樣靜靜地躺著,像睡著了一般管嬉。 火紅的嫁衣襯著肌膚如雪皂林。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天蚯撩,我揣著相機與錄音础倍,去河邊找鬼。 笑死胎挎,一個胖子當(dāng)著我的面吹牛沟启,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播犹菇,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼德迹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了揭芍?” 一聲冷哼從身側(cè)響起胳搞,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎称杨,沒想到半個月后肌毅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡姑原,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年悬而,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片页衙。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡摊滔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出店乐,到底是詐尸還是另有隱情艰躺,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布眨八,位于F島的核電站腺兴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏廉侧。R本人自食惡果不足惜页响,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望段誊。 院中可真熱鬧闰蚕,春花似錦、人聲如沸连舍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽索赏。三九已至盼玄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間潜腻,已是汗流浹背埃儿。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留融涣,地道東北人童番。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像暴心,于是被迫代替她去往敵國和親妓盲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容