div垂直居中和水平居中的多种方式

一、水平居中

法1:子元素设置margin:0 auto;

 <div class="parent">
    <div class="child"></div>
  </div>
.parent{
    border:solid 2px red;
    width: 200px;
    height: 200px;
  }
  .child{
    background: green;
    width: 50px;
    height: 50px;
    margin:0 auto; 
  }

法2:text-align

a{
    width: 25%;
    height: 60px;
    text-align: center;
    line-height: 60px;/*垂直居中*/
}

二、垂直居中

固定height情况下用line-height

a{
	width:25%;
	height:60px;
	line-height:60px;
}

三、水平垂直居中–已知子父宽高

子元素在父元素里垂直居中

居中法1:

父元素和子元素都有确定宽高,子元素设绝对定位,子元素的lelt,top50%, 外边距为自身宽高的一半。

 <div class="parent">
    <div class="child"></div>
 </div>
 .parent{
    border:solid 2px red;
    width: 200px;
    height: 200px;
    position: relative;
  }
  .child{
    background: green;
    width: 50px;
    height: 50px;
    position: absolute;
    left: 50%;
    top: 50%;
    margin-left: -25px;/* 外边距为自身宽高的一半*/
    margin-top: -25px;
  }

居中法2:

父元素和子元素都有确定宽高,子元素设绝对定位,子元素的 top,bottom,left,right都为0, margin: auto;

 /* 下面这种居中方式,只适用于父元素的大小有确定时    如果大小是被内容撑开的,不能用 */
.parent{
    border:solid 2px red;
    width: 200px;
    height: 200px;
    position: relative;
  }
  .child{
    background: green;
    width: 50px;
    height: 50px;
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
  }

居中法3:transform属性

 /*未知容器的宽高,利用`transform`属性*/
  .parent{
    border:solid 2px red;
    width: 200px;
    height: 200px;
    position: relative;
  }
  .child{
    background: green;
    width: 50px; /*可无*/
    height: 50px;/*可无*/
    position: absolute; /*相对定位或绝对定位均可*/
    margin: 0 auto;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%); /*移动元素自身高宽的一半,因为定位时元素有自身高宽*/
  }

居中法4:flex

缺点:兼容不好吧,详情见

/*利用flex布局实际使用时应考虑兼容性*/
  .parent{
    border:solid 2px red;
    width: 200px;
    height: 200px;
    display: flex;
    align-items: center;/*垂直居中*/
    justify-content: center;/*水平居中*/ 
  }
  .child{
    background: green;
    width: 50px;
    height: 50px;
  }
居中法5:
 /*利用text-align:center和vertical-align:middle属性*/
  .parent{
    border:solid 2px red;
    width: 200px;
    height: 200px;
      
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    /* 水平垂直居中 */
    text-align: center;
    /* 仅垂直居中 */
    /* text-align: 0; */
    font-size: 0;
    white-space: nowrap;
    overflow: auto;
  }
  .parent::after{
    content: "";
    display: inline-block;
    height: 100%;
    vertical-align: middle;
  }
  .child{
    background-color: green;
    width: 50px;
    height: 50px;
    display: inline-block;
    white-space: normal;
    vertical-align: middle;
  }

四、水平垂直居中–未知子元素宽高,已知父元素宽高

未知子元素的宽高,让它水平垂直居中于父元素

居中法1:transform属性

思路:子元素绝对定位,距离顶部 50%,左边50%,然后使用css3 transform:translate(-50%; -50%)
优点:高大上,可以在webkit内核的浏览器中使用
缺点:不支持IE9以下不支持transform属性

<div class="parent">
	<div class="child">hello</div>
</div>
 .parent{
    position: relative;
    height: 200px;
    width: 200px;
    background: #b3aaae;
  }
 
  .child{
    position: absolute;
    top: 50%;
    left: 50%;
    color: #fff;
    transform: translate(-50%, -50%);
    background: green;
  }

居中法2:table

思路:显示设置父元素为:table,子元素为:cell-table,这样就可以使用vertical-align: center,实现水平居中
优点:父元素(parent)可以动态的改变高度(table元素的特性)
缺点:IE8以下不支持

未知宽高子元素

<div class="parent">
	<div class="child">hello</div>
</div>
.parent{
    display: table;
    height:300px;
    width: 300px;
    background: #b3aaae;
  }
 
  .child{
    display: table-cell;
    vertical-align: middle;
    text-align: center;
    color: #fff;
    font-size: 16px;
   /* background-color: green; */
  }
居中法3:flex
<div class="parent">
	<div class="child">hello</div>
</div>
.parent {
    display: flex;
    justify-content: center; /* 设置弹性容器的item在主轴上居中 */
    align-items: center; /* 设置弹性容器的item在交叉轴上居中 */
    width: 100px;
    height: 100px;
    border: 1px solid #ccc;
  }
  .child {
    background: #ddd;
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使 `<p>` 元素的文本在 `<div>` 元素水平和垂直居中,可以使用 CSS 的 flex 布局、position 和 transform 属性来实现。 1. 使用 flex 布局: ```css div { display: flex; justify-content: center; /* 水平居中 */ align-items: center; /* 垂直居中 */ height: 100px; /* 设置 div 的高度 */ } p { margin: 0; /* 去除默认的上下边距 */ } ``` 在这个例子,我们使用了 flex 布局,将 `<div>` 元素的 `display` 属性设置为 `flex`,并设置 `justify-content` 属性为 `center`,以使其内部的文本水平居中,同时设置 `align-items` 属性为 `center`,以使其内部的文本垂直居中。另外,我们还移除了 `<p>` 元素的默认上下边距,以使其更加紧凑。 2. 使用 position 和 transform 属性: ```css div { position: relative; height: 100px; /* 设置 div 的高度 */ } p { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); margin: 0; /* 去除默认的上下边距 */ } ``` 在这个例子,我们将 `<div>` 元素的 `position` 属性设置为 `relative`,以便内部的 `<p>` 元素可以使用 `absolute` 定位。然后,我们将 `<p>` 元素的 `position` 属性设置为 `absolute`,并将其 `top` 和 `left` 属性设置为 `50%`,以使其相对于 `<div>` 元素垂直和水平居中。最后,我们使用 `transform` 属性将其向上和向左移动半个 `<p>` 元素的高度和宽度,以使其准确地居。另外,我们还移除了 `<p>` 元素的默认上下边距,以使其更加紧凑。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值