CSS盒子弹性布局

@[TOC]HTML+CSS 实现网页弹性布局

弹性盒子

推荐学习地址:

链接: CSS3 弹性盒子(Flex Box).
居中特性了解:
align-items
justify-content
align-content
B站
可布局效果:
在这里插入图片描述
项目地址:https://download.csdn.net/download/LF2018131/18888035

基本知识及特性

弹性盒子由弹性容器(Flex container)和弹性子元素(Flex item)组成。
弹性容器通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器。
弹性容器内包含了一个或多个弹性子元素。
特点:
灵活,常用于页面布局,解决屏幕的适配问题。
使用:

  • 当使用盒子的弹性布局时,可以不用再使用" display: inline-block " 进行块级元素或行内元素到行内块元素的转化。

  • 将display:flex; 添加到父级容器里面。

注意: 弹性容器外及弹性子元素内是正常渲染的。弹性盒子只定义了弹性子元素如何在弹性容器内布局。
基本语法:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .ourter {
            width: 400px;
            height: 400px;
            border: 1px solid #f40;
            display: flex;/*添加盒子的弹性布局*/
        }
        
        .inner {
            width: 100px;
            /* width: 98px; */
            height: 100px;
            border: 1px solid rgb(0, 0, 0);
            /* display: inline-block; */
            /* display: inline-block; */
            /*当使用盒子的弹性布局时,可以不用再使用 display: inline-block 
            进行块级元素或行内元素到行内块元素的转化*/
        }
    </style>
</head>

<body>

    <div class="ourter">
        <div class="inner"></div>
        <div class="inner"></div>
        <div class="inner"></div>
        <!-- <div class="inner"></div> -->
    </div>
</body>

</html>

效果:在这里插入图片描述

布局可能出现的问题

盒子压缩变形

当容器增加到8个时,原定的width:100px 已经缩小变形。

<style>
        .ourter {
            width: 400px;
            height: 400px;
            border: 1px solid #f40;
            display: flex;
        }
        
        .inner {
            width: 100px;
            /* width: 98px; */
            height: 100px;
            border: 1px solid rgb(0, 0, 0);
            /* display: inline-block; */
        }
    </style>
</head>

<body>

    <div class="ourter">
        <div class="inner">盒子1</div>
        <div class="inner">盒子2</div>
        <div class="inner">盒子3</div>
        <div class="inner">盒子4</div>
        <div class="inner">盒子5</div>
        <div class="inner">盒子6</div>
        <div class="inner">盒子7</div>
        <div class="inner">盒子8</div>
    </div>
</body>

效果:
盒子挤在一行
原因:/* 弹性盒模型, 可以规定盒子内的子元素默认按照水平方向排列 默认不换行 */
解决方法:
style 部分不做改变,只对body 部分做出改变:
将8个小盒子分别装进两个盒子里面,4个一组。

<body>
    <div class="ourter">
    <!-- 添加第一个div -->
        <div>
            <div class="inner">盒子1</div>
            <div class="inner">盒子2</div>
            <div class="inner">盒子3</div>
            <div class="inner">盒子4</div>
        </div>
         <!-- 添加第二个div -->
        <div>
            <div class="inner">盒子5</div>
            <div class="inner">盒子6</div>
            <div class="inner">盒子7</div>
            <div class="inner">盒子8</div>
        </div>
    </div>
</body>

效果:
在这里插入图片描述
结果出现新问题。子代垂直排布。
原因:
默认垂直方向排列剩余的均分 ,即 先把垂直方向填完 。

子代垂直排列

解决方法:
回到上一步,不要添加 div 把它划分为两个模块,直接在父级里面添加 样式:
flex-wrap: wrap;
在这里插入图片描述
若再添加一句align-items: center; 元素在侧轴居中。如果元素在侧轴上的高度高于其容器,那么在两个方向上溢出距离相同。
在这里插入图片描述
align-items用法: 链接.

推荐写法

<style>
        .ourter {
            width: 400px;
            height: 400px;
            border: 1px solid #f40;
            display: flex;
            /* 清除默认垂直排列 */
            flex-wrap: wrap;
            /* 元素在侧轴居中。如果元素在侧轴上的高度高于其容器,那么在两个方向上溢出距离相同。 */
            align-items: center;
            /* 元素向侧轴起点对齐。*/
            /* align-content: flex-start; */
            /* 规定辅轴方向 (y)的排列方式   多个主轴时*/
            align-content: flex-start;
            /* 规定主轴方向 (y)的排列方式 */
            /* justify-content: center; */
            /* 在每行上均匀分配弹性元素。相邻元素间距离相同。每行第一个元素与行首对齐,每行最后一个元素与行尾对齐。 */
            /* justify-content: space-between; */
            /* 每行第一个元素到行首的距离和每行最后一个元素到行尾的距离将会是相邻元素之间距离的一半。 */
            justify-content: space-around;
        }
        
        .inner {
            /* width: 100px; */
            /* 将每个盒子大小减去边框的粗细,使之可以刚好排在一行 */
            width: 98px;
            height: 100px;
            border: 1px solid rgb(0, 0, 0);
            /* display: inline-block; */
        }
    </style>
</head>

<body>
    <div class="ourter">
        <!-- 添加第一个div -->
        <!-- <div> -->
        <div class="inner">盒子1</div>
        <div class="inner">盒子2</div>
        <div class="inner">盒子3</div>
        <div class="inner">盒子4</div>
        <!-- </div> -->
        <!-- 添加第二个div -->
        <!-- <div> -->
        <div class="inner">盒子5</div>
        <div class="inner">盒子6</div>
        <div class="inner">盒子7</div>
        <div class="inner">盒子8</div>
        <!-- </div> -->
    </div>
</body>

效果在这里插入图片描述
调整父级盒子与子盒子的大小,利用居中布局自己想要的模式。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值