首页 前端知识 CSS-float浮动布局、float清除浮动与flex布局

CSS-float浮动布局、float清除浮动与flex布局

2024-08-04 00:08:32 前端知识 前端哥 25 768 我要收藏

CSS布局

  • 清除浮动
    • 额外标签法
    • 单伪元素法
    • 双伪元素法
    • overfow法
  • Flex布局
    • Flex组成
    • 主轴对齐方式(水平方向对齐)
    • 侧轴对齐方式(单行垂直方向对齐)
    • 弹性盒子换行
    • 行内对齐方式(多行垂直方向对齐)
    • 弹性盒子伸缩比
    • 修改主轴方向(基本不需要改变方向)

清除浮动

场景:浮动元素会脱标,如果父级没有高度,子级无法撑开父级高度(可能导致页面布局错乱)
解决方法:清除浮动(清除浮动带来的影响)

额外标签法

    在父元素内容的最后添加一个块级元素,设置 CSS 属性 clear: both
    .father {
      margin: 10px auto;
      width: 1200px;
      /* height: 300px; */
      background-color: pink;
    }

    .left {
      float: left;
      width: 200px;
      height: 300px;
      background-color: skyblue;
    }

    .right {
      float: right;
      width: 950px;
      height: 300px;
      background-color: orange;
    }

    .bottom {
      height: 100px;
      background-color: brown;
    }

    .clearfix {
      clear: both;
    }
  <div class="father">
    <div class="left"></div>
    <div class="right"></div>
    <!--  在父元素内容的最后添加一个块级元素,设置 CSS 属性 clear: both -->
    <div class="clearfix"></div>
  </div>
  <div class="bottom"></div>

单伪元素法

    用伪元素::after在父级最后添加块级元素
    .father {
      margin: 10px auto;
      width: 1200px;
      /* height: 300px; */
      background-color: pink;
    }

    .left {
      float: left;
      width: 200px;
      height: 300px;
      background-color: skyblue;
    }

    .right {
      float: right;
      width: 950px;
      height: 300px;
      background-color: orange;
    }

    .bottom {
      height: 100px;
      background-color: brown;
    }

    /* 单伪元素法-相当于在父级最后额外添加一个块级元素 */
  .clearfix::after {
    content: "";
    display: block;
    clear: both;
  }
  <div class="father clearfix">
    <div class="left"></div>
    <div class="right"></div>
  </div>
  <div class="bottom"></div>

双伪元素法

	同时解决外边距塌陷问题和浮动问题
    .father {
      margin: 10px auto;
      width: 1200px;
      /* height: 300px; */
      background-color: pink;
    }

    .left {
      float: left;
      width: 200px;
      height: 300px;
      background-color: skyblue;
    }

    .right {
      float: right;
      width: 950px;
      height: 300px;
      background-color: orange;
    }

    .bottom {
      height: 100px;
      background-color: brown;
    }

    /* before 解决外边距塌陷问题 */
    /* 双伪元素法 */
    .clearfix::before,
    .clearfix::after {
      content: "";
      display: table;
    }

    /* after 清除浮动 */
    .clearfix::after {
      clear: both;
    }
  <!-- 父级使用 clearfix 类 -->
  <div class="father clearfix">
    <div class="left"></div>
    <div class="right"></div>
  </div>
  <div class="bottom"></div>

overfow法

	在父级添加overflow:hidden
    .father {
      margin: 10px auto;
      width: 1200px;
      /* height: 300px; */
      background-color: pink;
	  /* 在父级添加overflow:hidden */
      overflow: hidden;
    }

    .left {
      float: left;
      width: 200px;
      height: 300px;
      background-color: skyblue;
    }

    .right {
      float: right;
      width: 950px;
      height: 300px;
      background-color: orange;
    }

    .bottom {
      height: 100px;
      background-color: brown;
    }
  <div class="father">
    <div class="left"></div>
    <div class="right"></div>
  </div>
  <div class="bottom"></div>

Flex布局

Flex 布局也叫弹性布局,是浏览器提倡的布局模型,非常适合结构化布局,提供了强大的空间分布和对齐能力

Flex 模型不会产生浮动布局中脱标现象,布局网页更简单、更灵活

Flex组成

    设置方式:给父元素设置 display: flex,子元素可以自动挤压或拉伸
    组成部分:
      弹性容器
      弹性盒子
      主轴:默认在水平方向
      侧轴 / 交叉轴:默认在垂直方向
     /* 弹性容器 */
    .box {
      display: flex;/*声明为弹性容器*/

      height: 300px;
      border: 1px solid #000;
    }

    /* 弹性盒子:沿着主轴方向排列,当子元素在一行容不下时会被默认压缩子元素宽度 */
    .box div {
      width: 200px;
      /* height: 100px; */
      background-color: pink;
    }
  <div class="box">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <div>6</div>
    <div>7</div>
    <div>8</div>
    <div>9</div>
  </div>

主轴对齐方式(水平方向对齐)

属性名:justify-content

属性值效果
flex-start默认值,弹性盒子从起点开始依次排列
flex-end弹性盒子从终点开始依次排列
center弹性盒子沿主轴剧中排列
space-between弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子之间
space-around弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子两侧
space-evenly弹性盒子沿主轴均匀排列,弹性盒子与容器之间间距相等
    .box {
      display: flex;
      /* justify-content: flex-start; */

      /* justify-content: flex-end; */

      /* 居中 */
      /* justify-content: center; */

      /* 父级剩余的尺寸分配成间距 */

      /* 弹性盒子之间的间距相等 */
      /* justify-content: space-between; */

      /* 间距出现在弹性盒子两侧 */
      /* 视觉效果:弹性盒子之间的间距是两端间距的2倍 */
      /* justify-content: space-around; */

      /* 各个间距都相等 */
      justify-content: space-evenly;

      height: 300px;
      border: 1px solid #000;
    }

    .box div {
      width: 200px;
      height: 100px;
      background-color: pink;
    }
  <div class="box">
    <div>1</div>
    <div>2</div>
    <div>3</div>
  </div>

侧轴对齐方式(单行垂直方向对齐)

  • align-items:当前弹性容器内所有弹性盒子的侧轴对齐方式(给弹性容器设置)
  • align-self:单独控制某个弹性盒子的侧轴对齐方式(给弹性盒子设置)
属性值效果
stretch弹性盒子沿着侧轴线被拉拉伸至铺满容器(弹性盒子没有设置侧轴方向尺寸则默认拉伸)
center弹性盒子沿侧轴居中排列
flex-start弹性盒子从起点开始依次排列
flex-end弹性盒子从终点开始依次排列
    .box {
      display: flex;
      /* 弹性盒子在侧轴方向没有尺寸才能拉伸 */
      /* align-items: stretch; */

      /* align-items: center; */

      /* align-items: flex-start; */

      align-items: flex-end;

      height: 300px;
      border: 1px solid #000;
    }

    /* 第二个div,侧轴居中对齐 */
    .box div:nth-child(2) {
      align-self: center;
    }

    .box div {
      width: 200px;
      height: 100px;
      background-color: pink;
    }
  <div class="box">
    <div>1</div>
    <div>2</div>
    <div>3</div>
  </div>

弹性盒子换行

	弹性盒子可以自动挤压或拉伸,默认情况下,所有弹性盒子都在一行显示。

    属性名:flex-wrap
    属性值
    wrap:换行
    nowrap:不换行(默认)
        .box {
      display: flex;
      /* 当超出父级尺寸自动换行 */
      /* 换行后的元素上边距和下边距距离一样 */
      flex-wrap: wrap;

      /* 不换行 */
      /* flex-wrap: nowrap; */

      justify-content: space-between;

      height: 300px;
      border: 1px solid #000;
    }

    .box div {
      width: 200px;
      height: 100px;
      background-color: pink;
    }
  <div class="box">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <div>6</div>
    <div>7</div>
    <div>8</div>
    <div>9</div>
    <div>10</div>
    <div>11</div>
    <div>12</div>
  </div>

行内对齐方式(多行垂直方向对齐)

属性名:align-content
注意:该属性对单行弹性盒子模型无效

属性值效果
flex-start默认值,弹性盒子从起点开始依次排列
flex-end弹性盒子从终点开始一次排列
center弹性盒子沿主轴居中排列
space-between弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子之间
space-around弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子两侧
space-eenly弹性盒子沿主轴均匀排列,弹性盒子与容器之间间距相等
   	.box {
      display: flex;
      flex-wrap: wrap;
      justify-content: space-between;

      /* 调整 行对齐方式:对单行弹性盒子不生效 */
      /* align-content: flex-start; */
      /* align-content: flex-end; */

      /* align-content: center; */

      align-content: space-between;
      /* align-content: space-around; */

      /* align-content: space-evenly; */
      height: 400px;
      border: 1px solid #000;
    }

    .box div {
      width: 200px;
      height: 100px;
      background-color: pink;
    }
  <div class="box">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <div>6</div>
    <div>7</div>
    <div>8</div>
  </div>

弹性盒子伸缩比

    默认情况下,主轴方向尺寸是靠内容撑开;侧轴默认拉伸 
    作用:控制弹性盒子的主轴方向的尺寸
    属性名:flex
    属性值:整数数字,表示占用父级剩余尺寸的份数
    .box {
      display: flex;
      /* 主轴为垂直 */
      flex-direction: column;

      height: 300px;
      border: 1px solid #000;
    }

    .box div {
      /* height: 100px; */
      background-color: pink;
    }

    .box div:nth-child(1) {
      /* 不设置宽度,侧轴默认拉伸,高度由内容撑开 */
      width: 200px;
    }

    .box div:nth-child(2) {
      /* 占剩余尺寸的1份(被分为3分) */
      flex: 1;
    }

    .box div:nth-child(3) {
       /* 占剩余尺寸的2份(被分为3分) */
      flex: 2;
    }
  <div class="box">
    <div>1</div>
    <div>2</div>
    <div>3</div>
  </div>

修改主轴方向(基本不需要改变方向)

主轴默认在水平方向,侧轴默认在垂直方向
属性名:flex-direction

属性值效果
row水平方向,从左向右(默认)
column垂直方向,从上向下
row-reverse水平方向,从右向左
column-reverse垂直方向,从下向上
转载请注明出处或者链接地址:https://www.qianduange.cn//article/14731.html
标签
评论
发布的文章

RapidJSON介绍

2024-08-14 00:08:38

jQuery 4 beta 震撼发布

2024-08-14 00:08:36

cJSON的使用

2024-08-14 00:08:36

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!