Blogger Information
Blog 4
fans 0
comment 0
visits 2431
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
1022 作业 1. 实例演示列间隙的二种设置方案,并比较异同 2. 参考课堂案例,自己实现一个等高列的案例(不得抄源码)
移动用户-9921340
Original
569 people have browsed it

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 之前和之后的变化:


Correcting teacher:天蓬老师天蓬老师

Correction status:unqualified

Teacher's comments:专门提示, 不得抄课堂源码, 必须另外举例
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments