使用弹性框的居中按钮在 IE 中不起作用 [重复]

Posted

技术标签:

【中文标题】使用弹性框的居中按钮在 IE 中不起作用 [重复]【英文标题】:Centering button using flex box not working in IE [duplicate] 【发布时间】:2017-11-18 07:50:51 【问题描述】:

您好我已经参考了这个问题并尝试了它的答案Flexbox Not Centering Vertically in IE

但是我的按钮仍然不会在 IE 中居中,它适用于所有其他浏览器。

这里是 html

<div class="captioned-video">
    <div class="video-container" data-module-dynamic="embed-video">
        <img src="img here"/>
        <button class="play" data-video="video url here"></button>
    </div>
    <div class="caption">
        <h3 class="caption__subhead">Caption Headline</h3>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
    tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
    quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
   </div>
</div>

还有我的少

.captioned-video 
    border: 1px solid @light-slate;
    padding: 20px;
    display: flex;
    flex-direction: column;

.video-container 
    overflow: hidden;
    display: flex;
    justify-content: center;
    align-items: center;
    flex-direction: column;
    position: relative;

    img 
        flex: none;
    

    iframe /*iframe is here because on btn click the img is swapped to this*/
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
    

    .play 
        width: 100px;
        height: 100px;
        border-radius: 100%;
        border: none;
        background-color: rgba(200, 81, 8, 0.8);
        position: absolute;
        padding: 0;
        &:hover 
            transition: all ease 0.5s;
            background-color: rgba(200, 81, 8, 1);
        
        &:after 
            content: "";
            position: relative;
            display: inline-block;
            border-style: solid;
            border-width: 20px 0 20px 30px;
            border-color: transparent transparent transparent white;
            top: 2px;
            left: 5px
        
    


.caption 
    .caption__subhead 
        color: @royal-blue;
        font-family: @headings-font-family;
        font-size: 14px;
    

    p 
        font-size: 12px;
        font-style: @font-family-sans-serif;
    


如果我在 ie ii 中检查按钮上的元素不可见但元素突出显示它似乎在图像下方,我错过了什么,可能是定位问题?

【问题讨论】:

为了更好的帮助,发布编译后的代码,这样更容易重现问题。不是每个人都使用 CSS 预处理器。 你说的是哪个版本的IE? IE9 及以下不支持 flexbox。 IE 10 及更高版本支持有限版本的 flexbox。 @Terry IE11,我需要一个快速修复,所以我只做了 top / bottom / left / right : 0 和 margin auto 但我想知道为什么 flexbox 不能在那里工作。 欺骗链接建议 Safari,尽管它与我下面的 wiki 答案中的解决方案相同。 【参考方案1】:

由于您在 button 上设置了 position: absolute,IE(很可能是 Safari)不会像其他浏览器那样将其居中。

要修复它,请像这样更新您的 .play 规则

.play 
    width: 100px;
    height: 100px;
    border-radius: 100%;
    border: none;
    background-color: rgba(200, 81, 8, 0.8);
    position: absolute;
    top: 50%;                                /* added */
    left: 50%;                               /* added */
    transform: translate(-50%,-50%);         /* added */
    ...

Updated codepen

堆栈sn-p

.captioned-video 
  border: 1px solid red;
  padding: 20px;
  display: flex;
  flex-direction: column;

.captioned-video .video-container 
  overflow: hidden;
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
  position: relative;

.captioned-video .video-container img 
  flex: none;

.captioned-video .video-container iframe 
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;

.captioned-video .video-container .play 
  width: 100px;
  height: 100px;
  border-radius: 100%;
  border: none;
  background-color: rgba(200, 81, 8, 0.8);
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  padding: 0;

.captioned-video .video-container .play:hover 
  transition: all ease 0.5s;
  background-color: #c85108;

.captioned-video .video-container .play:after 
  content: "";
  position: relative;
  display: inline-block;
  border-style: solid;
  border-width: 20px 0 20px 30px;
  border-color: transparent transparent transparent white;
  top: 2px;
  left: 5px;

.captioned-video .caption .caption__subhead 
  color: blue;
  font-family: Arial;
  font-size: 14px;

.captioned-video .caption p 
  font-size: 12px;
  font-style: Arial;
<div class="captioned-video">
    <div class="video-container" data-module-dynamic="embed-video">
        <img src="http://placehold.it/300/f99"/>
        <button class="play" data-video="video url here"></button>
    </div>
    <div class="caption">
        <h3 class="caption__subhead">Caption Headline</h3>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
    tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
    quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
   </div>
</div>

原因在这里解释得很好:

How to center absolutely positioned children of a flex container in Safari?

【讨论】:

感谢您的解释,我刚刚使您的解决方案有效,并且对翻译进行了更多调整,这就是解决方案,感谢您提供解释该问题的其他材料。

以上是关于使用弹性框的居中按钮在 IE 中不起作用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

光滑的滑块在弹性容器中不起作用

Flexbox - 垂直居中文本[重复]

滚动到顶部按钮在 IE 中不起作用

位置粘性在IE中不起作用[重复]

背景大小在 IE 中不起作用 [重复]

输入占位符css在IE9中不起作用[重复]