CSS布局

68 阅读3分钟

float布局

image-20210324203311068.png

练习:导航栏

  • 效果图

image.png

  • html程序
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <header class="clearfix">
  <div class="logo">
    <img src="https://xiedaimala.com/packs/_/assets/images/logos/red-logo-3f8db9041e6c15d4ae7ed7e4087c4b98.png" alt="">
  </div>
  <ul class="clearfix nav">
      <li>首页</li>
      <li>课程</li>
      <li>优惠</li>
      <li>关于</li>
  </ul>  
  </header>
  
  <div class="content clearfix">
    <aside>一行有6个字</aside>
    <main></main>
    <div class="ad"></div>
  </div>

   <div class="imagelist">
     <div class="x  clearfix">
        <div class="image"></div>
        <div class="image"></div>
        <div class="image"></div>
        <div class="image"></div>
     </div>
   </div>
</body>
</html>
  • CSS程序
*{margin:0;padding:0;box-sizing: border-box;}
ul,ol{
  list-style: none;
}
img{max-width: 100%;}
.clearfix:after{
  content: '';
  display: block;
  clear: both;
}
.logo{
  display: inline-block;
  float: left;
  margin-top: 8px;/*(文字高度-图片高度)/2*/
  margin-left: 10px;
}
.nav{
    float: left;
}
.logo>img{
  height: 26px;
  vertical-align: top;/*可以去掉图片下面的背景色(如果发现图片下有多余的东西就写va:t)*/
}
ul > li{
  float: left;
  padding: 4px 0.5em;
  /*四个参数:分别代表:上、右、下、左四个边框的边距值
 	三个参数:分别代表:上:10px、左右各20px、下:30px
 	两个参数:分别代表:上下各10px、左右各20px
 	一个参数:代表上下左右边距值都是10px*/
  line-height: 32px;
}
ul{
  display: inline-block;
}
header{
  background: white;
  color: red;
}
.content{
  width: 600px;
  margin-left: auto;/*块级元素且宽度固定,使用此居中*/
  margin-right: auto;/*块级元素且宽度固定,使用此居中*/
}
.content>aside{
  width: 190px;
  height: 300px;
  float: left;
  background: #999;
}
.content>main{
  height: 300px;
  width: 300px;
  float: left;
  background: #ccc;
}
.content>.ad{
  height: 300px;
  width: 110px;
  float: left;
  background: #000;
}
.imagelist{
  outline: 1px solid green;
  width: 600px;
  margin-left: auto;
  margin-right: auto;
}
.imagelist > .x > .image{
  width: 141px;
  height: 141px;
  border: 1px solid red;
  background: black;
  float: left;
  margin-top: 10px;
  margin-bottom: 10px;
  margin-right: 12px;
}
.imagelist > .x{
  margin-right: -12px;/*x使用负margin消除右边最后一个image的margin,平均布局需要用到*/
}

flex布局

将一个元素变成flex容器

.container{
  display: flex;/*缩写:d:f*/
  display: inline-flex;/*缩写:d:if*/
}

重点

.container{

  • display: flex;
  • flex-direction: row/column(改变主轴items流动方向)
  • flex-wrap: wrap(改变折行)
  • justify-content: center/space-between(主轴对齐,默认横轴)
  • align-items: center(次轴对齐,默认纵轴) }

练习:导航栏

  • 效果图

image.png

  • html代码
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <header class="header">
  <div class="logo">
    <img src="https://xiedaimala.com/packs/_/assets/images/logos/red-logo-3f8db9041e6c15d4ae7ed7e4087c4b98.png" alt="">
  </div>
  <ul class>
      <li>首页</li>
      <li>课程</li>
      <li>优惠</li>
      <li>关于</li>
  </ul>  
  </header>
  <div class="content">
    <aside>一行有6个字</aside>
    <main></main>
    <div class="ad"></div>
  </div>
  <div class="imagelist">
    <div class="x">
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
    </div>
   </div>
</body>
</html>
  • CSS代码
*{margin:0;padding:0;box-sizing: border-box;}
ul,ol{
  list-style: none;
}
img{max-width: 100%;}
.logo{
  display: flex;
  align-items: center;
}
.logo>img{
  height: 26px;
  vertical-align: middle;/*可以去掉图片下面的背景色(如果发现图片下有多余的东西就写va:t)*/
}
.header{
  display: flex;
  justify-content: space-between;/*或者在子元素中加margin-left: auto;(推荐)*/
  padding: 4px 0;
}
ul{
  display: flex;
  border: 1px solid green;
}
ul>li{
  line-height: 32px;
  padding: 4px;
}
.content{
  display: flex;
  min-width: 800px;
  margin-left: auto;
  margin-right: auto;
}
.content > aside{
  background: #000;
  width: 200px;
}
.content > main{
  background: #666;
  height: 400px;
  flex-grow: 1;
}
.content > .ad{
  background: #999;
  width: 100px;
}
.imagelist{
  outline: 1px solid green;
  min-width: 800px;
  margin-left: auto;
  margin-right: auto;
  margin-top: 10px;
}
.imagelist > .x{
  display: flex;
  flex-wrap: wrap; 
  margin-right: -12px;
}
.imagelist > .x > .image{
  width: 191px;
  height: 191px;
  border: 1px solid red;
  background: black;
  margin-top: 10px;
  margin-bottom: 10px;
  margin-right: 12px;
}

flex青蛙小游戏

Grid布局

二位布局用Grid,一维布局用Flex 将一个元素变成Grid容器

.container{
  display: grid;
  display: inline-grid;
}

重点

.container{

  • display: grid;

  • gird-template-columns: 40px 50px auto 50px 40px;(设置各列及其宽度)

  • gird-template-rows: 40px 50px auto;(设置各行及其宽度)

  • gird-template-columns: 1fr 50px 2fr 1fr;(free space)

  • grid-column/row-gap: 10px(空隙)

  • grid-template-areas:(分区)

    "header header header header"

    "main main .(空) sidebar"

    "footer footer footer footer" }

  • .item-a{

    grid-area: header

    }(设置分区)

  • .item-a{

    grid-column/row-start: 2; grid-column/row-end: 5;

    }(设置行列起始点,分区的另一种办法)

Grid花园小游戏