20190301 css知识之元素水平垂直居中、margin、vertical-align、position

左边自适应,右边固定宽度

<div class="box">
  <div class="left">左边自适应</div>
  <div class="right">右边固定宽度</div>
</div>
  • flex 布局
.box {
  display: flex;
}
.left {
  flex: 1 1 auto;
  background: green;
}
.right {
  width: 200px;
  background: red;
}
  • 左边左浮动,设置 margin-right 负值,右边右浮动
.left {
  float: left;
  width: 100%;
  background: green;
  margin-right: -200px;
}

.right {
  width: 200px;
  float: right;
  background: red;
}

水平垂直居中

水平居中

  • 行内元素 text-align: center;

  • 块级元素 margin: 0 auto;

  • 多个块级元素水平居中

.box {
  /* 1.设置行内元素水平居中的方式 */
  text-align: center;
}
.box div {
  width: 100px;
  height: 100px;
  margin: 10px;
  background-color: #ccc;
  /* 2.重点是将块级元素转为行内元素 */
  display: inline-block; 
}

垂直居中

<div class="container">
  <span class="center">我是需要垂直居中的元素</span>
</div>

块级元素的垂直居中 —— 已知center元素的宽高

  • 利用绝对定位,将元素的top和left属性都设为50%,再利用margin边距,将元素回拉它本身高宽的一半,实现垂直居中。

      .container {
        position: relative;
      }
      .center {
        width: 100px;
        height: 100px;
    
        position:absolute;
        top: 50%;
        left: 50%;
        margin: -50px 0 0 -50px;
      }
    
块级元素的垂直居中 ———— 未知center元素宽高
  • 利用绝对定位与margin

      .container {
        position: relative;
      }
      .center{
        position:absolute;
        top:0;
        bottom:0;
        left:0;
        right:0;
        margin:auto;
      }
    
行内元素的垂直居中 ———— 未知center元素宽高
  • 使用flex布局轻松解决
  • 父容器display: table-cell;配合text-align:center和vertical-align:middle
```css
  .container {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
  }
```
  • 利用Css3的transform,可以轻松的在未知元素的高宽的情况下实现元素的垂直居中。

      .container{
        position:relative;
      }
      .center {
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
      }
    
  • 利用选择器增加一个 100%高,vertical-align: middle 的行内块元素

      .center:before {
        content: ".";
        height: 100%;
        display: inline-block;
        /* 把此元素放置在父元素的中部 */
        vertical-align: middle;
        visibility: hidden;
      }
    

margin: auto

  • 属性的目的

    用来分配剩余空间/可用空间的。所以只对有剩余空间的元素有效,比如:有宽度的块级元素。给图片设置margin: 0 auto是无效的,因为图片是内联元素,不独占一行,没有剩余空间。

  • 属性拆解

    margin:auto; 相当于 top right bottom left都平均分配剩余空间,所以才会导致水平居中。

  • 为什么margin:auto;不能垂直居中

    简单点:因为垂直方向没有剩余空间了。

    • 在普通内容流中,margin:auto;的效果等同于margin: 0 auto;的效果。
    • position:absolute使元素脱离标准文档流
    • 同时设置top和bottom确定高度,同时设置left和right确定宽度。(将给浏览器重新分配一个边界框)都设置为0则该元素将填充父元素的所有可用空间,这样margin在垂直方向就有了可分配的空间。
    • 再设置margin 垂直方向上下为auto,即可实现垂直居中。

vertical-align

  • 属性的目的

    将相邻的文本与元素对齐。不必知道元素的大小,元素仍然在文档流中,所以其他元素可以根据它们大小的变化进行相应的调整。

有用的例子就是:居中图标与旁边的文本

  • 应用元素

    行内元素:inline, inline-block, inline-table

  • 属性值

    a: 元素基线 b: 行盒子基线

    含义
    baseline基线重合
    sub基线上方
    super基线下方
    middle元素上、下边的中点与行盒子基线加上 x-height 的一半对齐
    top顶边对齐
    bottom底边对齐
    text-top元素的顶边与行盒子的文本盒子的顶边对齐
    text-bottom元素的顶边与行盒子的文本盒子的底边对齐

position 属性

对所有元素都适用

line-height

设置行间的距离,行高。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值