博客列表 >1022 作业 1. 实例演示列间隙的二种设置方案,并比较异同 2. 参考课堂案例,自己实现一个等高列的案例(不得抄源码)

1022 作业 1. 实例演示列间隙的二种设置方案,并比较异同 2. 参考课堂案例,自己实现一个等高列的案例(不得抄源码)

移动用户-9921340
移动用户-9921340原创
2020年10月23日 22:54:52571浏览

1022 作业

1. 实例演示列间隙的二种设置方案,并比较异同

方案 1:利用百分比

css 代码:

  1. body {
  2. background-color: #eee;
  3. }
  4. header {
  5. color: #fff;
  6. background-color: #0072b0;
  7. border-radius: 0.5em;
  8. }
  9. /* 群组选择器,同时匹配多个元素 */
  10. .main,
  11. .sidebar {
  12. background-color: #fff;
  13. border-radius: 0.5em;
  14. /* 暂时使用浮动来实现 */
  15. float: left;
  16. /* 将w3c的盒子转为IE盒子: 盒子大小包括了追加上的padding,border */
  17. box-sizing: border-box;
  18. }
  19. .sidebar {
  20. padding: 1.5em;
  21. }
  22. /* 左侧 */
  23. .main {
  24. width: 70%;
  25. }
  26. /* 右侧 */
  27. .sidebar {
  28. width: 29%;
  29. margin-left: 1%;
  30. }

html 代码:

  1. <header>
  2. <h1>PHP中文网 <small>php爱好者的娘家</small></h1>
  3. </header>
  4. <div class="container">
  5. <main class="main">
  6. <h2>欢迎加入战队</h2>
  7. <p>
  8. <a href="https://w3techs.com/">w3techs</a
  9. >统计,目前全球Web开发领域,php仍以78.8%占有率,傲视所有对手,
  10. 那些天天唱衰PHP的家伙们被啪啪打脸
  11. </p>
  12. </main>
  13. <aside class="sidebar">
  14. <div class="widget"></div>
  15. <div class="widget"></div>
  16. </aside>
  17. </div>

将右列(sidebar)的宽度设置为 29%,然后设置左侧外边距为 1%,即 margin-left: 1%; 此时我们发现得到了我们想要的效果,如图:

但是利用百分比有个问题,那就是百分比是依赖父容器大小进行计算的,也就是说屏幕小间隙就小,屏幕大间隙就大,如图:


所以此方案有缺陷,所有我们采取另一种方案,即 em 和百分比,两者组合来解决

方案 2:利用 em + 百分比 组合方案

只需对 sidebar 做如下设置

  1. .sidebar {
  2. width: calc(30% - 1em);
  3. margin-left: 1em;
  4. }

说明:这里当我们设置 margin-left: 1em 时,相当于 sidebar 的宽度多出来 1em,所以 sidebar 要减去 1em,这样一来,无论屏幕大小如何变化,间隙的大小始终不变。


注意:calc 函数的运算符前后都需要保留一个空格

2. 参考课堂案例,自己实现一个等高列的案例(不得抄源码)

当设置container容器的显示类型为表格的时候(即 display: table;),那么此时宽度就以内容决定,所以不会自动填充满整个容器,所以我们需要人为的设置容器的宽度为 100%(即 width: 100%;),接着将每一列的 display 属性设置为 table-cell,如此一来就能实现等高列布局。

css 代码:

  1. body {
  2. background-color: #eee;
  3. }
  4. header {
  5. color: #fff;
  6. background-color: #0072b0;
  7. }
  8. /* 群组选择器,同时匹配多个元素 */
  9. .main,
  10. .sidebar-left,
  11. .sidebar-right {
  12. background-color: #fff;
  13. box-sizing: border-box;
  14. display: table-cell;
  15. text-align: center;
  16. }
  17. .main {
  18. width: 40%;
  19. padding: 1.5em;
  20. }
  21. .sidebar-left {
  22. width: 30%;
  23. padding: 1.5em;
  24. }
  25. .sidebar-right {
  26. width: 30%;
  27. padding: 1.5em;
  28. }
  29. .container {
  30. display: table;
  31. width: 100%;
  32. border-spacing: 1em 0;
  33. }
  34. .big-container {
  35. margin-left: -1em;
  36. margin-right: -1em;
  37. }

html 代码:

  1. <header>
  2. <h1>3列等高列演示</h1>
  3. </header>
  4. <div class="big-container">
  5. <div class="container">
  6. <aside class="sidebar-left">
  7. <div class="widget">左列</div>
  8. </aside>
  9. <main class="main">
  10. <div class="widget">主体</div>
  11. </main>
  12. <aside class="sidebar-right">
  13. <div class="widget">右列</div>
  14. </aside>
  15. </div>
  16. </div>

这里有个重点提一下,由于在 container 容器中设置了 border-spacing 属性的左右间隙为 1em,所以在用 big-container 包裹 container 之前,container 容器两边分别多出 1em 的列间隙,所以这里添加 big-container 容器包裹 container,并且在 big-container 容器中设置负值为 1em 的左右外边距,到处为止 3 列等高列实现。

下面两张图片演示 big-container 包裹 container 之前和之后的变化:


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议