CSS3:flex&box-sizing

简介: 本文介绍了CSS中的Flex布局及其相关属性,如`flex-direction`、`flex-wrap`、`justify-content`等,并通过代码示例展示了如何使用这些属性来控制容器内的项目排列方式。同时,还讲解了`align-items`属性用于定义子元素在交叉轴上的对齐方式,以及`box-sizing`属性的不同取值对元素尺寸计算的影响。

前言

在现代网页设计中,CSS Flexbox 布局为开发者提供了一种强大而灵活的方式来控制元素的排列和对齐。Flexbox 特别适合用于构建响应式布局,使得元素在不同屏幕尺寸下都能保持良好的显示效果。本文将深入探讨 Flexbox 的基本概念以及相关属性,包括 flex-direction、flex-wrap、justify-content 等。通过具体的代码示例,您将学习如何利用这些属性来精确控制容器内项目的排列方式。

flex布局

<template>
  <div class="container">
    <div class="box">1</div>
    <div class="box">2</div>
    <div class="box">3</div>
    <!--   order 越小 排在 越前面  默认值为1 -->
    <div class="box" style="order: -1;">4</div>
  </div>
</template>
<script>
export default {
  name: 'app',
  data() {
    return {
    }
  }
}
</script>
<style scoped>
.container {
  margin-left: 100px;
  margin-top: 200px;
  width: 600px;
  border: 1px solid black;
  height: 300px;
  display: flex;
  /*   flex-direction   和 flex-wrap 的合并 复合属性 */
  /* flex-flow: column wrap; */
  /* align-content  和align-items 的区别 
    align-items  适用于 单行  有上对齐 居中 和下对齐
    align-conten 可以设置很多属性 eg: space-between
*/
  /*  这个设置 的是 整个单行  */
  /* align-items: flex-end; */
  /* justify-content: ; */
  /* justify-content: space-around; */
  /* 放在末尾的位置 */
  /* justify-content: flex-end; */
  /*  满了(位置不够)之后会换行 设置nowarp 则 不换行 */
  /* flex-wrap: wrap; */
  /*  反转显示方向 */
  /* flex-direction: row-reverse; */
  /* 超出屏幕滚动 */
  /* overflow: scroll;
  &::-webkit-scrollbar {
    display: none;
  } */
  .box {
    /*   放在子类使用  设置的值 为上中下*/
    /* align-self: flex-end; */
    width: 100px;
    height: 100px;
    background-color: aqua;
  }
}
</style>


flex2

nowrap   默认值  不 换行
.func_btn {
    margin-top: 20px;
    display: flex;
    flex-direction: row;
    justify-content: flex-end;
}
flex-direction
flex-wrap
flex-flow
justify-content    // 左右
align-items
align-content
align-items(定义项目在竖直方向上对齐方式)  // 上下
//父级
.xya_strip{
  justify-content: space-between;
  padding: 0rpx 30rpx;
}
//子级
.xya_strip view{
  width: 100% !important;
}
      .status-boxes{
        display: flex;
        justify-content: space-between;
      }
/* 对齐方式 */
justify-content: center;     /* 居中排列 */
justify-content: start;      /* 从行首开始排列 */
justify-content: end;        /* 从行尾开始排列 */
justify-content: flex-start; /* 从行首起始位置开始排列 */
justify-content: flex-end;   /* 从行尾位置开始排列 */
justify-content: left;       /* 一个挨一个在对齐容器得左边缘 */
justify-content: right;      /* 元素以容器右边缘为基准,一个挨着一个对齐, */
/* 基线对齐 */
justify-content: baseline;
justify-content: first baseline;
justify-content: last baseline;
/* 分配弹性元素方式 */
justify-content: space-between;  /* 均匀排列每个元素
                                   首个元素放置于起点,末尾元素放置于终点 */
justify-content: space-around;  /* 均匀排列每个元素
                                   每个元素周围分配相同的空间 */
justify-content: space-evenly;  /* 均匀排列每个元素
                                   每个元素之间的间隔相等 */
justify-content: stretch;       /* 均匀排列每个元素
                                   'auto'-sized 的元素会被拉伸以适应容器的大小 */
/* 溢出对齐方式 */
justify-content: safe center;
justify-content: unsafe center;
/* 全局值 */
justify-content: inherit;
justify-content: initial;
justify-content: unset;
<template>
  <div id="app">
    <!-- <router-view /> -->
    <div class="main">
      <div class="box1" style="background:red;height:50px;width:50px;">
        box1
      </div>
      <div class="box2" style="background:blue;height:50px;width:50px;">
        box1
      </div>
      <div class="box3" style="background:green;height:50px;width:50px;">
        box1
      </div>
      <div class="box4" style="background:yellow;height:50px;width:50px;">
        box1
      </div>
    </div>
  </div>
</template>
<script>
export default {
  name: "App"
};
</script>
<style scope lang="scss">
.main {
  width: 190px;
  //  如果给出高度 溢出去的 会 和第一行有间距
  height: 210px;
  border: 1px solid black;
  display: flex;
  flex-wrap: wrap;
  flex-shrink: 0;
}
html,
body,
#app {
  margin: 0;
  padding: 0;
  height: 100%;
}
</style>


align-items

定义方块放的位置

<style>
        .box00 {
            height: 400px;
            width: 400px;
            border: 4px solid #000;
            display: flex;
            /* align-items: center; */
            align-items: end;
        }
        .box1 {
            height: 100px;
            width: 100px;
            border: 1px solid #000;
            flex: 1;
        }
        .box2 {
            height: 100px;
            width: 100px;
            border: 1px solid #000;
            flex: 1;
        }
    </style>
</head>
<body>
    <div class="box00">
        <div class="box1">box1</div>
        <div class="box2">box2</div>
    </div>
</body>



box-sizing

默认值,标准盒子模型。[width](https://developer.mozilla.org/zh-CN/docs/Web/CSS/width)[height](https://developer.mozilla.org/zh-CN/docs/Web/CSS/height) 只包括内容的宽和高,不包括边框(border),内边距(padding),外边距(margin)。注意:内边距、边框和外边距都在这个盒子的外部。比如说, 在浏览器中的渲染的实际宽度将是 370px。.box {width: 350px; border: 10px solid black;}

<!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>
        div {
            width: 160px;
            height: 80px;
            padding: 20px;
            border: 8px solid red;
            background: yellow;
        }
        .content-box {
            /* 会向外面借大小  默认 */
            box-sizing: content-box;
            /* Total width: 160px + (2 * 20px) + (2 * 8px) = 216px
     Total height: 80px + (2 * 20px) + (2 * 8px) = 136px
     Content box width: 160px
     Content box height: 80px */
        }
        .border-box {
            /*  规定了 大小 就不会改变了  宽高 固定  只会 向里面 借 大小 */
            box-sizing: border-box;
            /* Total width: 160px
     Total height: 80px
     Content box width: 160px - (2 * 20px) - (2 * 8px) = 104px
     Content box height: 80px - (2 * 20px) - (2 * 8px) = 24px */
        }
    </style>
</head>
<body>
    <div class="content-box">Content box</div>
    <br>
    <div class="border-box">Border box</div>
</body>
</html>



相关文章
|
1月前
|
前端开发 UED 容器
在 CSS 中使用 Flex 布局实现页面自适应时需要注意什么?
【10月更文挑战第22天】在使用 Flex 布局实现页面自适应时,需要对其基本原理和特性有深入的理解,同时结合具体的布局需求和场景,进行细致的调整和优化。通过合理的设置和注意事项的把握,才能实现理想的自适应效果,提升用户体验。还可以根据实际情况进行更深入的探索和实践,以不断提升 Flex 布局的应用能力。
移动端的打开方式,打开F12之后,就可以看到手机样式设计,移动端的初始化使用normalize.css代码库录到,box-sizing: border-box; 定宽度为多少就是多少,代码库,移动端
移动端的打开方式,打开F12之后,就可以看到手机样式设计,移动端的初始化使用normalize.css代码库录到,box-sizing: border-box; 定宽度为多少就是多少,代码库,移动端
|
2月前
|
数据可视化 前端开发 搜索推荐
FLEX组件可视化设计器CSS3代码生成器
FLEX组件可视化设计器CSS3代码生成器
43 4
|
5月前
|
前端开发 容器
你不知道的css——1. 外在盒子、内在盒子,宽度和高度的计算,box-sizing属性
你不知道的css——1. 外在盒子、内在盒子,宽度和高度的计算,box-sizing属性
32 3
你不知道的css——1. 外在盒子、内在盒子,宽度和高度的计算,box-sizing属性
|
5月前
|
编解码 前端开发 容器
CSS Flex布局实战案例:构建响应式卡片组件
【7月更文挑战第17天】通过上述步骤,我们成功地使用CSS Flex布局构建了一个响应式的卡片组件。Flexbox不仅简化了布局代码,还让我们能够轻松实现复杂的布局效果,如响应式设计。在实战中,掌握Flexbox将大大提高前端开发的效率和网页布局的质量。希望这个案例能够帮助你更好地理解和应用Flexbox布局。
|
5月前
|
前端开发
css的flex布局中使用margin:auto智能分配剩余空间
css的flex布局中使用margin:auto智能分配剩余空间
47 1
|
5月前
|
编解码 前端开发 C++
CSS【详解】布局 display ( 含 flex 布局,grid 布局,table 布局,float 布局,响应式布局 等)
CSS【详解】布局 display ( 含 flex 布局,grid 布局,table 布局,float 布局,响应式布局 等)
143 0
|
5月前
|
前端开发
CSS 自测题 -- 用 flex 布局绘制骰子(一、二、三【含斜三点】、四、五、六点)
CSS 自测题 -- 用 flex 布局绘制骰子(一、二、三【含斜三点】、四、五、六点)
39 0
|
5月前
|
前端开发
前端 CSS 经典:flex + margin 布局
前端 CSS 经典:flex + margin 布局
41 0
|
6月前
|
前端开发 开发者 容器
CSS进阶-盒模型调整:box-sizing
【6月更文挑战第14天】`box-sizing`属性在CSS中调整盒模型行为,让元素宽度和高度包含内容、内边距和边框。默认是`content-box`,仅计算内容区,而`border-box`则包含所有。不一致的布局、预期尺寸不符和复杂计算错误是常见问题。使用`* { box-sizing: border-box; }`可简化布局,确保元素尺寸直观一致。了解和正确使用`box-sizing`能提升布局效率和准确性。
113 0