聖杯布局與雙飛翼布局的實現思路

2021-07-05 02:20:53 字數 3430 閱讀 5705

主要為了理解思考的過程,而不是僅僅為了背過一段**。

1負邊距  margin-left為負值,且兩個元素不在一行的時候(可以用元素float:left,width:100%實現)margin-left可以吃掉兄弟元素的margin.

想像一下,假設width:99%,右邊留一條縫隙,當margin-left為負值,即可讓右邊的這條縫隙向左走

即當使用margin左負值,超過自身的寬度時,這個元素在第一行就有位置了。 而margin的負值達到-100%時,恰能達到視窗最左側。。

這個100%為父元素的寬度。同理我們假設要擠的元素寬度為200px,則「擠」200px就可以讓這個元素完全擠到兄弟元素的右邊去

考慮以下結構 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20 &

lt;div id=

"bd">

; <

;div

class

="main">

;<

/div>

; <

;div

class

="left">

;<

/div>

; <

;div

class

="right">

;<

/div>

; <

;/div>

根據我們上面講的,可以這麼寫:

.main

.left

.right

1以上為第一步,可以看到left,right到了正確位置。這時肯定有疑問了?這個main怎麼沒了?因為被擠跑了唄

2 給擠的空間留空

考慮padding屬性,會給元素的邊緣留出緩衝空間,即我人為的留給你空間讓你擠,比如padding:0 200px,左右兩邊留出了200讓你使勁擠。這時候出問題了,因為文件流裡,塊狀元素盒子包括padding啊,如果擠的話整個盒子不就跑了麼。

這時能夠脫離文件流的定位出場了,我無視你,就在你上面的空間擠,然後父元素眼睜睜的看著上面擠,下面留出被遮擋的空間就是了。

這種思路即聖杯布局。(負邊距+定位)

給個空間: 1

#bd1 .

main

1

2

3

4

5

6

7

8

9

10

11

12

13

14 .

left

.right

3.**ued對此的優化

聖杯布局已經挺好了,但是利用了相對定位。如果人為加乙個標籤,來控制上面說的「擠」的空間呢?

完整** 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

<

!doctype

html

>

<

html

lang

="en-us"

>

<

head

>

<

meta

charset

="utf-8"

>

<

title

>

<

/title

>

<

/head

>

<

body

>

<

div id=

"bd"

>

<

div

class

="main"

>

<

div

class

="in"

>

test11111111111

<

/div

>

<

/div

>

<

div

class

="left"

>

test11111111111

<

/div

>

<

div

class

="right"

>

test11111111111

<

/div

>

<

/div

>

<

/body

>

<

/html

>

聖杯布局與雙飛翼布局

聖杯布局和雙飛翼布局都是實現的三欄布局,兩邊的盒子寬度固定,中間盒子自適應,也就是我們常說的固比固布局。它們實現的效果是一樣的,差別在於其實現的思想。聖杯布局的出現是來自於a list part上的一篇文章in search of the holy grail。比起雙飛翼布局,它的起源不是源於對頁面...

雙飛翼布局與聖杯布局

中間層100 佔滿同一高度空間的整層寬度,左右兩層被擠出中間層所在區域時,使用margin left的負值將左右層拉回與中間層同一高度的空間 接著調整左右兩層到指定位置 最後使用margin或padding屬性調整中間層被左右層佔住的顯示區。聖杯布局採用乙個父層包含中間 左右三個子層,設定父層的pa...

雙飛翼布局與聖杯布局

怎麼設定min width我還沒搞懂 稍微說明一下 html 中 middle部分首先要放在container的最前部分。然後是left,right 1.將三者都 float left 再加上乙個position relative 因為相對定位後面會用到 2.middle部分 width 100 佔...