美文网首页
CSS-版心和布局

CSS-版心和布局

作者: Imkata | 来源:发表于2022-03-06 02:53 被阅读0次

阅读报纸时容易发现,虽然报纸中的内容很多,但是经过合理地排版,版面依然清晰、易读。同样,在制作网页时,要想使页面结构清晰、有条理,也需要对网页进行“排版”。

“版心”(可视区) 是指网页中主体内容所在的区域。一般在浏览器窗口中水平居中显示,常见的宽度值为960px、980px、1000px、1200px等。

为了提高网页制作的效率,布局时通常需要遵守一定的布局流程,具体如下:

  1. 确定页面的版心(可视区)。
  2. 分析页面中的行模块,以及每个行模块中的列模块。
  3. 制作HTML结构 。
  4. CSS初始化,然后开始运用盒子模型的原理,通过DIV+CSS布局来控制网页的各个模块。

1. 一列固定宽度型

这种布局很简单,我们只需让盒子水平居中对齐,并且设置每一行的宽度固定,高度不同即可。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <style>
    * {
      margin: 0;
      padding: 0;  /* 清除内外边距*/
    }
    /* 相同的样式,我们会想到并集选择器 */
    .top,
    .banner,
    .main,
    .footer {
      width: 960px;
      text-align: center; /* 文字居中对齐 */
      margin: 0 auto; /* 可以让盒子水平居中对齐  只要保证 左右auto就阔以了 */
      margin-bottom: 10px;
      border: 1px dashed #ccc;
    }
    .top {      
      height: 80px;
      background-color: pink;                                   
    }
    .banner {
      height: 120px;
      background-color: purple;
    }
    .main {
      height: 500px;
      background-color: hotpink;
    }
    .footer {
      height: 150px;
      background-color: black;
    }
  </style>
</head>
<body>
  <div class="top">top</div>
  <div class="banner">banner</div>
  <div class="main">main</div>
  <div class="footer">footer</div>
</body>
</html>

2. 两列左窄右宽型

比如: 小米官网

这种布局就是在上面那种布局的基础上,其中main的两个子盒子添加左右浮动即可。

```html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    .top,  /* 并集选择器给相同样式集体声明 */
    .banner,
    .main,
    .footer {
      width: 960px;
      margin: 0 auto;
      border: 1px dashed #ccc;
      text-align: center;
      background-color: #eee;
      margin-bottom: 8px;
    }
    .top {
      height: 80px;
    }
    .banner {
      height: 150px;
    }
    .main {
      height: 500px;
    } 
    .left {
      width: 360px;
      height: 500px;
      background-color: pink;
      float: left;  /* 添加左浮动 */
    }
    .right {
      width: 592px;
      height: 500px;
      background-color: purple;
      float: right;  /* 添加右浮动,中间自动会有8px的间距 */
    }
    .footer {
      height: 120px;
    }
  </style>
</head>
<body>
  <div class="top">top</div>
  <div class="banner">banner</div>
  <div class="main">
    <div class="left">left</div>
    <div class="right">right</div>
  </div>
  <div class="footer">footer</div>
</body>
</html>

3. 通栏平均分布型

比如: 锤子官网

main里面添加8个小li,main不设置高度,由子元素撑起高度,并且小li都浮动,8个小li宽度都一样,前4个小li高度设置200px,后4个小li高度设置400px,为了不影响后面的布局,父元素main清除浮动。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    ul {
      list-style: none;  /* 取消列表的默认小点样式 */
    }
    .top {
      height: 60px;
      background-color: #000;
    }
    .banner {
      width: 960px;
      height: 400px;
      background-color: skyblue;
      margin: 20px auto;
      border-radius: 15px;
    }
    .main {
      width: 960px;
      margin: 0 auto;
      /* 父元素清除浮动 */
      overflow: hidden;
    }
    .main ul li {
      width: 240px;
      background-color: pink;
      float: left;  /* 浮动的目的,是让多个块级li一行显示,而且木有缝隙 */
    }
    .main .noMargin {
      margin-left: 0; /* 再将第一块的左边距去掉 */
    }
    .main ul li:nth-child(even) {  /* even偶数,odd奇数 */
      background-color: purple;
    }
    /* n 从 0 开始计算,当是第 0 个元素或者超出了元素的个数会被忽略, 所以-n+4代表前4个 */
    .main ul li:nth-child(-n+4) {  
      height: 200px;
    }
    /* n+5代表从第5个开始(包括第5个),到最后 */
    .main ul li:nth-child(n+5) {   
      height: 400px;
    }
    .footer {
      height: 100px;
      background-color: #000;
    }
  </style>
</head>
<body>
  <div class="top">top</div>
  <div class="banner">banner</div>
  <div class="main">
    <ul>
      <li class="noMargin">1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li class="noMargin">5</li>
      <li>6</li>
      <li>7</li>
      <li>8</li>
    </ul>
  </div>
  <div class="footer">footer</div>
</body>
</html>

4. 圣杯布局和双飞翼布局

圣杯布局和双飞翼布局实现的效果是一样的,都是左右的宽度固定,中间栏宽度要自适应,只不过代码有些不同。

① 圣杯布局

  1. 首先写好html结构,注意中间栏(main)要在放在文档流前面以优先渲染。
<body>
  <div id="header">#header</div>
  <div class="container">
    <div class="main">中间栏</div>
    <div class="left">左边栏</div>
    <div class="right">右边栏</div>
  </div>
  <div id="footer">#footer</div>
</body>
  1. 写好header和footer样式,使之横向撑满。
#header, #footer {
    height: 60px;
    line-height: 60px;
    text-align: center;
    background: rgba(29, 27, 27, 0.726);
  }
  1. 左右两栏设置200x200px宽高,中间栏设置宽度100%,高度设置200px。
.left,.right{
  width: 200px;
  height: 200px;
  background: red;
}
.main{
  width:100%;
  height: 200px;
  background: blue;
}
  1. left、right、main全部设置左浮动,并且给父元素container设置最小宽度,而且要清除浮动(因为我们的footer也要正常显示)。
.container{
  min-width: 400px; 
  background: #eee;
  overflow: hidden;
}
  1. 下面就是最重要的一步了,给left设置margin-left:-100%;(这个100%是整个屏幕的宽度)。
    为什么要这么设置?我们可以先给left设置margin-left:10%;然后继续加大,可以发现right会被顶到下一行,同理,如果margin-left一直变小,left也会被顶到上一行,所以我们给left设置margin-left:-100%;就会把left拉到行头。

同理我们给right设置margin-left:-200px;(right的宽度)right就会跑到行尾。

.left{
  margin-left:-100%; 
}
.right{
  margin-left:-200px;
}

效果图如下:

  1. 现在的问题就是左右两边的元素覆盖了main元素的内容,我们可以给父容器container加上两边padding。因为浮动的盒子不会与父盒子的边框重叠,也不会超过父盒子的内边距,所以左右元素都被挤了进来。
.container{
  padding: 0px 200px; 
}
  1. 我们可以通过定位来解决上面的问题。因为子元素已经浮动了,也就是已经脱标了,如果再设置绝对定位(absolute),绝对定位会使浮动失效,这时就可能产生各种奇葩bug,所以当一个盒子已经进行了浮动,就不要再对其进行绝对定位,所以我们使用相对定位(relative)使left左移一个自身的宽度,使right右移一个自身的宽度。
.left{
  position: relative;
  left: -200px; 
}
.right{
  position: relative;
  right: -200px; 
}

大功告成:

完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>圣杯布局</title>
  <style type="text/css">
    body, div {
      padding:0px;
      margin:0px;
    }
    #header, #footer {
      height: 60px;
      line-height: 60px;
      text-align: center;
      background: rgba(29, 27, 27, 0.726);
    }
    .container {
      min-width: 400px; 
      background: #eee;
      overflow: hidden;
      padding: 0px 200px; 
    }
    .main {
      width:100%;
      height: 200px;
      background: blue;
      float: left; 
    }
    .left,.right {
      width: 200px;
      height: 200px;
      background: red;
      float: left; 
    }
    .left {
      margin-left:-100%; 
      position: relative;
      left: -200px; 
    }
    .right {
      margin-left:-200px;
      position: relative;
      right: -200px; 
    }
  </style>
</head>
<body>
  <div id="header">#header</div>
  <div class="container">
    <div class="main">中间栏</div>
    <div class="left">左边栏</div>
    <div class="right">右边栏</div>
  </div>
  <div id="footer">#footer</div>
</body>
</html>

② 双飞翼布局

双飞翼布局的前5步和圣杯布局一样,我们就省略了。

  1. 经过圣杯布局的第5步之后,会有左右两边元素覆盖住了main元素内容的问题,圣杯布局通过是给父元素container添加左右padding,然后给left和right设置相对定位的方式来解决。在双飞翼布局中我们换个思路,既然main元素被盖住了,那么我们索性就不用main了,我们可以给main添加一个子元素main_w,并且给其设置左右margin,这样就巧妙的解决了左右两边的元素覆盖main元素内容的问题,这时候我们真正的中间栏其实就是main_w,我们就在main_w里面进行布局。
.main_w {
  margin:0px 200px;
}

<div class="main">
  <div class="main_w">中间栏</div>
</div>

完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>双飞翼布局</title>
  <style type="text/css">
    body, div {
      padding:0px;
      margin:0px;
    }
    #header, #footer {
      height: 60px;
      line-height: 60px;
      text-align: center;
      background: rgba(29, 27, 27, 0.726);
    }
    .container {
      min-width: 400px; 
      background: #eee;
      overflow: hidden;
    }
    .main {
      width:100%;
      height: 200px;
      background: blue;
      float: left; 
    }
    .left,.right {
      width: 200px;
      height: 200px;
      background: red;
      float: left; 
    }
    .left {
      margin-left:-100%; 
    }
    .right {
      margin-left:-200px;
    }
    .main_w {
      margin:0px 200px;
    }
  </style>
</head>
<body>
  <div id="header">#header</div>
  <div class="container">
    <div class="main">
      <div class="main_w">中间栏</div>
    </div>
    <div class="left">左边栏</div>
    <div class="right">右边栏</div>
  </div>
  <div id="footer">#footer</div>
</body>
</html>

相关文章

  • CSS-版心和布局

    阅读报纸时容易发现,虽然报纸中的内容很多,但是经过合理地排版,版面依然清晰、易读。同样,在制作网页时,要想使页面结...

  • CSS 版心和布局

    版心(可视区)指网页中的主体内容区域。一般在浏览器中居中显示,显示宽度常见960px,980px,1000px,1...

  • [前端学习]移动web部分学习笔记,第二天

    网页布局方法总结: 目前已经学习了两种布局方式:固定宽度布局:常见于PC端,设定固定的宽度作为版心来布局流式布局:...

  • 第十三天(css浮动)

    1、css布局高级 版心:版心是网站的核心区域,一般居中显示。1024px时代,宽度为960px。现在1000px...

  • css-布局

    css基础的知识看完后,我们就要学习如何布局,这里详细的总结一下最近了解的布局方式。 一 单列水平居中 1.子元素...

  • css-布局

    关于css布局里,主要的有浮动(float)关键词,可以设置为left/right/;再一个是overflow解决...

  • css-布局

  • css-布局

    历史 1 .table布局2 .float布局3 .fllex布局 默认:正常流布局 1 .在不对页面进行任何布局...

  • CSS布局

    布局流程 为了提高网页制作的效率,布局时通常需要遵守一定的布局流程,具体如下: 1、确定页面的版心(可视区)。 2...

  • 4.css高级布局及定位

    1.版心和布局流程 2.元素的定位属性 3.静态定位static 4.相对定位relative (自恋型) 5.绝...

网友评论

      本文标题:CSS-版心和布局

      本文链接:https://www.haomeiwen.com/subject/pyqirrtx.html