当前位置:Gxlcms > css > css中圣杯布局和双飞翼布局的介绍(附代码)

css中圣杯布局和双飞翼布局的介绍(附代码)

时间:2021-07-01 10:21:17 帮助过:67人阅读

这篇文章给大家介绍的内容是关于css中圣杯布局和双飞翼布局的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

圣杯布局

659018467-5b61ac73ed6b0_articlex.png

  1. <div id="header">#header</div>
  2. <div id="container">
  3. <div id="center" class="column">#center</div>
  4. <div id="left" class="column">#left</div>
  5. <div id="right" class="column">#right</div>
  6. </div>
  7. <div id="footer">#footer</div>

实现的效果主要在container中,left 和 rgith固定宽度,center首先渲染,且自适应宽度。

  1. body {
  2. min-width: 500px;
  3. }
  4. #container {
  5. overflow: auto; /* BFC */
  6. padding-left: 180px;
  7. padding-right: 150px;
  8. }
  9. #container .column {
  10. height: 200px;
  11. position: relative;
  12. float: left;
  13. }
  14. #center {
  15. background-color: #e9e9e9;
  16. width: 100%;
  17. }
  18. #left {
  19. background-color: red;
  20. width: 180px;
  21. right: 180px;
  22. margin-left: -100%
  23. }
  24. #right {
  25. background-color: blue;
  26. width: 150px;
  27. margin-right: -150px;
  28. }
  29. #header,
  30. #footer {
  31. background-color: #c9c9c9;
  32. }

该方案几个注意的点:

  1. center元素位于left和right之前,可以让center先渲染,用户首先看到页面的主要内容。

  2. container (width:100%)包裹着三栏内容,通过padding-left和padding-right为左右两栏腾出空间。

  3. center,left,right都设置一个左浮动(float:left),所以container内部是一个浮动流

  4. 通过给 left 元素设置 margin-left: -100%,使得left移动到container的左上角,在通过position:relative; right: 180px,移动到container的padding-left的位置上去。

  5. 给right 元素设置 margin-right: -150px,使得它移动到container的padding-right的位置上去。

ps: margin-left 和 margin-right 利用了浮动流的特性,使得第一行能够同时容纳center,left,right这三个元素。

圣杯布局(flexbox实现)

474238071-5b61ac741c53f_articlex.png

  1. <div id="HolyGrail">
  2. <div id="header">#header</div>
  3. <div id="container">
  4. <div id="center" class="column">#center</div>
  5. <div id="left" class="column">#left</div>
  6. <div id="right" class="column">#right</div>
  7. </div>
  8. <div id="footer">#footer</div>
  1. body {
  2. min-width: 550px;
  3. }
  4. #HolyGrail {
  5. display: flex;
  6. min-height: 100vh;
  7. flex-direction: column;
  8. }
  9. #container {
  10. display: flex;
  11. flex: 1;
  12. }
  13. #center {
  14. background-color: #e9e9e9;
  15. flex: 1;
  16. }
  17. #left {
  18. background-color: red;
  19. order: -1;
  20. width: 150px;
  21. }
  22. #right {
  23. background-color: blue;
  24. width: 150px;
  25. }
  26. #header,
  27. #footer {
  28. height: 50px;
  29. background-color: #c9c9c9;
  30. }

如果不考虑ie10及以下的浏览器,那么可以使用flex来实现圣杯布局。而且圣杯布局可以通过让container填充高度来使得footer达到一个sticky的效果。
flex兼容性

双飞翼布局

659018467-5b61ac73ed6b0_articlex.png

圣杯布局和双飞翼布局解决的问题是一样的,就是两边定宽,中间自适应的三栏布局,中间栏要在放在文档流前面以优先渲染。圣杯布局和双飞翼布局解决问题的方案在前一半是相同的,也就是三栏全部float浮动,但左右两栏加上负margin让其跟中间栏p并排,以形成三栏布局。不同的地方在于解决中间p内容不被遮挡的思路上面

  1. 圣杯布局的为了中间内容不被修改,是通过包裹元素的padding-leftpadding-right来使得内容p置于中间,然后再通过相对定位position:relative,配合right或left属性让左右两栏不则当中间内容。

  2. 双飞翼布局的解决方案是:通过再中间元素的内部新增一个p用于放置内容,然后通过左右外边距margin-leftmargin-right为左右两栏留出位置。

  3. 双飞翼布局多了1个p标签,少用了4个css属性。少用了padding-left,padding-right,左右两个p用相对布局position: relative及对应的right和left,多了margin-left,margin-right。

  1. <div id="header">#header</div>
  2. <div id="container">
  3. <div id="center" class="column">
  4. <div id="center-content">#center</div>
  5. </div>
  6. <div id="left" class="column">#left</div>
  7. <div id="right" class="column">#right</div>
  8. </div>
  9. <div id="footer">#footer</div>
  1. body {
  2. min-width: 500px;
  3. }
  4. #container {
  5. overflow: auto; /* BFC */
  6. }
  7. #container .column {
  8. height: 200px;
  9. float: left;
  10. }
  11. #center {
  12. background-color: #e9e9e9;
  13. width: 100%;
  14. }
  15. #center-content {
  16. margin-left: 180px;
  17. margin-right: 150px;
  18. }
  19. #left {
  20. width: 180px;
  21. background-color: red;
  22. margin-left: -100%;
  23. }
  24. #right {
  25. background-color: blue;
  26. width: 150px;
  27. margin-left: -150px;
  28. }
  29. #header,
  30. #footer {
  31. background-color: #c9c9c9;
  32. }

相关文章推荐:

css中如何实现浮动的元素换行

CSS中Grid布局的用法总结(附代码)

以上就是css中圣杯布局和双飞翼布局的介绍(附代码)的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行