在行内块列中居中段落

Posted

技术标签:

【中文标题】在行内块列中居中段落【英文标题】:Centering a paragraph in an inline-block column 【发布时间】:2020-02-11 03:31:42 【问题描述】:

我有一个像这样的砖石风格网格:

  <div class="masonry">
      <div class="brick">
         <p>Img Title</p>
         <img src="img.jpg">
      </div>
      <div class="brick"> 
       ....
      </div>
  </div>

有了这个css:

.masonry 
  transition: all .5s ease-in-out;
  column-gap: 00px;
  column-fill: initial;
  box-sizing: content-box;


.masonry .brick 
  text-align: center;
  margin-bottom: 0px;
  display: inline-block;
  vertical-align: top;


.masonry .brick p
    color: black;
    position: absolute;
    transition: all .5s ease-in-out;


.masonry .brick img 
  max-width: 100%;
  vertical-align: middle;
  transition: all .5s ease-in-out;
  backface-visibility: hidden;

如何使用 css 在 Masonry 布局中将 p 标签(垂直和水平)居中?

一旦我将位置更改为 left=50% 之类的东西,它就会进入整个砌体网格的一半,而不是由于某种原因而不是一块砌体砖。 text-align: center 似乎根本不起作用。

这个想法当然是:如果你将鼠标悬停在一张图片上,它会在中间显示图片的标题。

【问题讨论】:

【参考方案1】:

使用下面更新的 CSS

.masonry 
  transition: all .5s ease-in-out;
  column-gap: 00px;
  column-fill: initial;
  box-sizing: content-box;


.masonry .brick 
  text-align: center;
  margin-bottom: 0px;
  display: inline-block;
  vertical-align: top;
  position:relative;


.masonry .brick p
    color: black;
    position: absolute;
    transition: all .5s ease-in-out;
    left:50%;
    margin:0;
    top:50%;
    transform:translate(-50%,-50%)


.masonry .brick img 
  max-width: 100%;
  vertical-align: middle;
  transition: all .5s ease-in-out;
  backface-visibility: hidden;

您可以使用 position:absolute 和 left:50% 和 top:50% 来使元素居中,并且可以使用 transform:translate(-50%, -50%) 将其转换回其宽度和高度的一半。要将 .brick 元素视为绝对 p 元素的父元素,您必须添加 position:relative 。

【讨论】:

我不知道你必须在父元素上有 position:relative 。非常感谢!【参考方案2】:

您可以尝试从p 标记中删除位置absolute

.masonry .brick p
  color: black;
  transition: all .5s ease-in-out;

【讨论】:

【参考方案3】:

您可以使用position:absolutetransform: translate(-50%, -50%); 作为水平和垂直中心

.masonry 
  transition: all .5s ease-in-out;
  column-gap: 00px;
  column-fill: initial;
  box-sizing: content-box;
  position: relative;
  width:200px;


.masonry .brick 
  text-align: center;
  margin-bottom: 0px;
  display: inline-block;
  vertical-align: top;


.masonry .brick p
    color: black;
    position: absolute;
    transition: all .5s ease-in-out;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    color:red;


.masonry .brick img 
  max-width: 100%;
  vertical-align: middle;
  transition: all .5s ease-in-out;
  backface-visibility: hidden;
<div class="masonry">
    <div class="brick">
       <p>Img Title</p>
       <img src="http://homepages.cae.wisc.edu/~ece533/images/cat.png">
    </div>
    <div class="brick"> 
     ....
    </div>
</div>

【讨论】:

【参考方案4】:
.masonry .brick 
   text-align: center;
   margin-bottom: 0px;
   display: inline-block;
   vertical-align: top;
   position:relative;
 
 .masonry .brick p
    color: black;
    position: absolute;
    top:50%;
    left:50%;
    transform:translate(-50%;-50%;
    transition: all .5s ease-in-out;
    z-index:10;
 

绝对元素定位到第一个相对父级,因此您需要将砖块设置为相对...然后 left:50% 将起作用,但它将是距离左侧 50% 并且不是居中的...所以然后你需要通过改造把它放回去..试试看:)

【讨论】:

以上是关于在行内块列中居中段落的主要内容,如果未能解决你的问题,请参考以下文章

子块元素在父块元素中居中

水平居中

在文本字段中居中对齐占位符

元素居中的几种方法

Android如何在一个界面里布局4个按钮 分为2行2列 与屏幕上下、水平居中对齐

如何让DIV层在网页中居中显示