将元素定位在动态大小的元素中间

Posted

技术标签:

【中文标题】将元素定位在动态大小的元素中间【英文标题】:Positioning element in the middle of dynamically sized element 【发布时间】:2015-07-04 22:04:26 【问题描述】:

我必须将“播放”图标和文本“播放”放在包含的元素的中心,其高度和宽度取决于该图像 - 它们会根据用户的屏幕而变化。 我试图像这样使用它

a.thumbnail:hover:after

    content: "Play";
    width: 50px;
    height: 20px;
    display: inline-block;
    position: absolute;
    top:50%;
    left: 50%;
    background-color: #fff;
    border: 1px solid red;

但实际上 :before 元素的左上角在中间,看起来很移位......你能建议我更好的解决方案吗?

【问题讨论】:

你可以使用 display: table > display: table-cell 和 vertical-align: middle styles 【参考方案1】:

将其添加到代码中

  margin: -10px -25px; /** height/2 width/2 **/

或者用同样的方式翻译

 div
   position: relative;
   width: 200px;
   height: 200px;
   background: red;
   margin: 20px auto
 
div:after
   content: '';
   position: absolute;
   width: 50px;
   height: 20px;
   z-index: 2;
   top: 50%;
   left: 50%;
   background: green;
   transform: translate( -50%, -50%)
<div><div/>

【讨论】:

太棒了 :) 我喜欢简单的解决方案,但是如果 :after 容器的大小是动态的呢? 那么你将需要 JS,因为 var 尚未在 css 中完成 caniuse.com/#feat=css-variables 和 developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables 你可以尝试 SASS 或 LESS 是的,元素居中动态,但如果你改变 100px 的宽度和高度,你可以添加边距 -50px 和高度:-50px (-(width/2) 和 -(height/2)) 你不能也用calc()吗? @Tambo 认为transform: translate(-50%, -50%); 行是天才。

以上是关于将元素定位在动态大小的元素中间的主要内容,如果未能解决你的问题,请参考以下文章

在 WPF 中动态地将元素定位到网格中

scrollIntoView将指定元素定位到浏览器顶部,底部,中间

如何将字符串数组的元素动态插入到 textview 中并定位它?

selenium 动态元素的定位

如何将绝对定位的元素居中?

元素偏移量offset系列