css基础知识(1)------弹性盒子flex的使用

 弹性盒子的特点

        弹性盒子由弹性容器(Flex container)和弹性子元素(Flex item)组成。
        弹性容器通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器。
        弹性容器内包含了一个或多个弹性子元素。
        不会脱离文档流,不会破环网格布局,不会存在高度塌陷问题
        注意:
        弹性容器外及弹性子元素内是正常渲染的。弹性盒子只定义了弹性子元素如何在弹性容器内布局。
        弹性子元素通常在弹性盒子内一行显示。默认情况每个容器只有一行。
        设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。

 主轴对齐


    主轴对齐方式 :justify-content
 
        属性值 作用
        flex-start 默认值, 起点开始依次排列
        flex-end 终点开始依次排列
        center 沿主轴居中排列
        space-around 弹性盒子沿主轴均匀排列, 空白间距均分在弹性盒子两侧
        space-between 弹性盒子沿主轴均匀排列, 空白间距均分在相邻盒子之间
        space-evenly 弹性盒子沿主轴均匀排列, 弹性盒子与容器之间间距相等


    单行侧轴对齐方式 : align-items

        属性值    作用
        flex-start    起点开始依次排列
        flex-end    终点开始依次排列
        center    沿侧轴居中排列
        stretch    默认效果, 弹性盒子沿着侧轴线被拉伸至铺满容器
        flex-start


    多行侧轴对齐方式align-content
        
        属性值    作用
        flex-start    默认值, 起点开始依次排列
        flex-end    终点开始依次排列
        center    沿主轴居中排列
        space-around    弹性盒子沿主轴均匀排列, 空白间距均分在弹性盒子两侧
        space-between    弹性盒子沿主轴均匀排列, 空白间距均分在相邻盒子之间


  设置弹性元素自身在侧轴(纵轴)方向上的对齐方式align-self

 <el-select v-model="value1" placeholder="请选择justify-content">
    <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value">
    </el-option>
  </el-select>
  <el-select v-model="value2" placeholder="请选择align-items">
    <el-option v-for="item in options2" :key="item.value" :label="item.label" :value="item.value">
    </el-option>
  </el-select>
  <el-select v-model="value3" placeholder="请选择align-content">
    <el-option v-for="item in options3" :key="item.value" :label="item.label" :value="item.value">
    </el-option>
  </el-select>

  <el-select v-model="value4" placeholder="请选择 flex-direction">
    <el-option v-for="item in options4" :key="item.value" :label="item.label" :value="item.value">
    </el-option>
  </el-select>
  <div class="f f1" :style="{ justifyContent: value1, alignItems: value2, alignContent: value3, flexDirection: value4 }">
    <div class="a s"></div>
    <div class="b s"></div>
    <div class="c s"></div>
    <div class="a s"></div>
    <div class="b s"></div>
    <div class="c s"></div>
  </div>
  <div class="f">
    <div class="a a1 s1"></div>
    <div class="b b1 s1"></div>
    <div class="c c1 s1">center</div>
    <div class="d d1 s1">baseline</div>
    <div class="e e1 s1">stretch</div>
  </div>
  <!-- 两种居中 -->
  <div class="f">
    <div class="a s2"></div>
  </div>

修改主轴方向属性: flex-direction

      属性值    作用
      row    行, 水平(默认值)
      column    *列, 垂直
      row-reverse    行, 从右向左
      column-reverse    列, 从下向上


弹性子元素分配空间
      - flex 属性用于指定弹性子元素如何分配空间。

      auto: 计算值为 1 1 auto
      initial: 计算值为 0 1 auto
      none:计算值为 0 0 auto
      inherit:从父元素继承
      flex数值分配空间


  flex为1的推算过程
 flex作为属性出现的时候表示占据主轴上剩下的空间,由以下三个属性复合而成
      即flex属性 是 flex-grow、flex-shrink、flex-basis三个属性的缩写
      相对于其他元素进行扩展的量

      属性: flex-grow定义项目的的放大比例
      属性值:
      0 空间是默认的
      1 表示占据主轴上剩下的空间
      相对于其他元素进行收缩的量

      属性: flex-shrink定义项目的缩小比例
      属性值
      0 改变主轴的宽高不会被挤压
      1 改变主轴的宽高会被挤压
      项目的宽度(width作用一样)

      属性: flex-basis定义在分配多余空间之前,项目占据的主轴空间(main size),浏览器根据此属性计算主轴是否有多余空间。相当于设置初始值
      属性值:0~100%/auto
      三个属性推算出flex:1的效果

      默认值:0 1 auto
      常用值:1 1 0% => 简写成flex:1

<div class="flex-container">
    <div class="flex-item item1">flex item 1</div>
    <div class="flex-item item2">flex item 2</div>
    <div class="flex-item item3">flex item 3</div>
  </div>
  不设置flex-shrink时:
  <div style="display:flex;border:1px solid #000;">
    <div style="height:100px;background-color:gray;">1</div>
    <div style="height:100px;background-color:red;">2</div>
    <div style="height:100px;background-color:gray;">3</div>
  </div>
  第二个item的 flex-shrink为0时:
  <div style="display:flex;border:1px solid #000;">
    <div style="height:100px;background-color:gray;width:200px;">1</div>
    <div style="height:100px;background-color:red;width:200px;flex-shrink:0;">2</div>
    <div style="height:100px;background-color:gray;width:200px;">3</div>
  </div>
  第一个item的 flex-shrink为1(默认值),第二个item的 flex-shrink为0,第三个item的 flex-shrink为2时:
  <div style="display:flex;border:1px solid #000;">
	<div style="height:100px;background-color:gray;width:200px;flex-shrink:1;">1</div>
	<div style="height:100px;background-color:red;width:200px;flex-shrink:0;">2</div>
	<div style="height:100px;background-color:gray;width:200px;flex-shrink:2;">3</div>
</div>

  第二个item的 flex-basis为80px,其他为flex-grow:1时:
  <div style="display:flex;border:1px solid #000;">
    <div style="height:100px;background-color:gray;flex-grow:1;">1</div>
    <div style="height:100px;background-color:red;flex-basis: 80px;">2</div>
    <div style="height:100px;background-color:gray;flex-grow:1;">3</div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      options1: [{
        value: 'flex-start',
        label: 'flex-start'
      }, {
        value: 'flex-end',
        label: 'flex-end'
      }, {
        value: 'center',
        label: 'center'
      }, {
        value: 'space-around',
        label: 'space-around'
      }, {
        value: 'space-between',
        label: 'space-between'
      }, {
        value: 'space-evenly',
        label: 'space-evenly'
      }],
      value1: '',
      options2: [{
        value: 'flex-start',
        label: 'flex-start'
      }, {
        value: 'flex-end',
        label: 'flex-end'
      }, {
        value: 'center',
        label: 'center'
      }, {
        value: 'stretch',
        label: 'stretch'
      }],
      value2: '',
      options3: [{
        value: 'flex-start',
        label: 'flex-start'
      }, {
        value: 'flex-end',
        label: 'flex-end'
      }, {
        value: 'center',
        label: 'center'
      }, {
        value: 'space-around',
        label: 'space-around'
      }, {
        value: 'space-between',
        label: 'space-between'
      }],
      value3: '',
      options4: [{
        value: 'row',
        label: 'row'
      }, {
        value: 'column',
        label: 'column'
      }, {
        value: 'row-reverse',
        label: 'row-reverse'
      }, {
        value: 'column-reverse',
        label: 'column-reverse'
      }],
      value4: '',
    }
  },

}
</script>
<style>
.f {
  width: 400px;
  height: 400px;
  background-color: rgb(212, 176, 129);
  margin: 100px auto;
  display: flex;
}

.f1 {
  flex-wrap: wrap;
}

.s {
  width: 100px;
  height: 100px;
}

.s1 {
  width: 100px;
  min-height: 100px;
}

.s2 {
  width: 100px;
  height: 100px;
  margin: auto;
}

.a,
.d {
  background-color: #807272;
}

.b,
.e {
  background-color: #ccc;
}

.c {
  background-color: #bfa;
}

.a1 {
  align-self: flex-start;
}

.b1 {
  align-self: flex-end;
}

.c1 {
  align-self: center;
}

.d1 {
  align-self: baseline;
}

.e1 {
  align-self: stretch;
}

.flex-container {
  display: flex;
  width: 400px;
  height: 250px;
  margin: 0 auto;
  background-color: lightgrey;
}

.flex-item {
  background-color: cornflowerblue;
  margin: 10px;
}

.item1 {
  flex: 2;
}

.item2 {

  flex: 1;
}

.item3 {
  flex: 1;
}
</style>

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: `display:inline-flex` 是 CSS 中的一个属性值,它用于设置一个元素以行内弹性盒的形式进行布局,即该元素会按照弹性盒模型的方式进行排列,但是它会像行内元素一样排列。 使用 `display:inline-flex` 可以让元素具有弹性盒子的一些特性,例如自适应宽度、自动换行等,同时也可以设置 flex 容器的属性,如 `justify-content` 和 `align-items` 等。这样可以方便地进行元素的排列和布局。 需要注意的是,`display:inline-flex` 是 CSS3 中的一个新特性,因此在一些旧的浏览器上可能不支持。如果需要兼容性更好的方案,可以考虑使用 `display:-webkit-inline-box` 或 `display:-moz-inline-box` 来实现类似的效果。 ### 回答2: CSS的display:inline-flex属性定义了一个内联弹性盒子。 首先,我们要了解弹性盒子flexbox)。弹性盒子是一种用于布局的高度灵活的容器。它可以容纳和控制一组元素的排列方式,以便它们能够适应不同的屏幕尺寸和设备。 默认情况下,弹性盒子的display属性值为"flex",这意味着该容器将作为块级元素显示。当我们将display属性值设为"inline-flex"时,弹性盒子将以内联元素的形式显示。 内联元素与行内元素类似,它们在同一行内进行排列,不会独占一行。与块级元素(如div)不同,内联元素不会独占一行空间。 使用display:inline-flex的主要优势是可以在页面中创建水平布局,而不会改变容器的块级特性。也就是说,它会将弹性盒子嵌入到文本流中,而不是使其单独占据一行。这使得我们可以将弹性盒子与其他文本元素结合使用,实现更灵活的布局效果。 需要注意的是,内联弹性盒子只对直接子元素起作用。因此,如果想要控制盒子内部的子元素,可以使用flex属性或其他相关的弹性盒子属性,如flex-direction、align-items、justify-content等。 总结来说,display:inline-flex属性可以将弹性盒子以内联元素的方式显示,这使得我们可以在水平布局中创建灵活的布局效果。这在某些情况下对于实现特定的页面布局非常有用。 ### 回答3: CSS的display:inline-flex是一种布局属性,用于在元素内部创建一个行内元素,并且使这个元素的子元素能够使用flexbox布局。 使用display:inline-flex可以使元素的子元素按照flexbox的规则进行布局,这样可以实现更灵活的布局效果。同时,由于它是行内元素,所以多个元素可以在同一行上进行布局。 与display:flex相比,display:inline-flex的主要区别在于前者会将元素的display属性设置为flex,而后者会将元素的display属性设置为inline-flex使用display:inline-flex时,可以通过设置相应的flex属性来控制子元素的布局方式,如设置flex-direction属性来控制子元素的排列方向(如水平方向或垂直方向)、设置flex-wrap属性来控制子元素是否换行,以及设置justify-content属性来控制子元素在主轴上的对齐方式等。 总结来说,display:inline-flex是一种常用的CSS属性,用于创建行内元素的flexbox布局。它可以在元素内部使用flexbox的相关属性,实现更灵活且具有响应式的布局效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值