CSS 变换期间边界半径不起作用

Border-radius not working during CSS transform

尝试制作圆形菜单背景。但是边界半径在关闭时不起作用

var menuButton = document.querySelector('.btn-menu');
    menuButton.addEventListener('click', function(e){
        e.preventDefault();
        document.body.classList.toggle('menu-open');
    });
.btn-menu{
  width: 30px;
  height: 30px;
  border: 2px solid red;
  position: relative;
  z-index: 5;
  float: right;
}
.menu-bg {
position: fixed;
left: 0;
top: 0;
bottom: 0;
width: 100%;
z-index: 40;
pointer-events: none;
z-index: 1;
}
.menu-bg:before {
content: '';
height: 1px;
width: 1px;
background: #000;
position: fixed;
right: 30px;
top: 30px;
transition: all ease .8s;
border-radius: 50%;
transform: scale(1);
overflow:hidden;
}
.menu-open .menu-bg:before {
transform: scale(500);
}
<div class="btn-menu"><a href=""><span>Menu</span></a></div>
<div class="menu-bg"></div>

JSFiddle - https://jsfiddle.net/afelixj/ew7b065h/

这是一个浏览器错误。有时它工作正常,然后,如果你改变 window 宽度,它就会开始混乱(我看到有时打开菜单时出现问题)。

在固定元素上使用变换存在一个已知问题:link您应该尽量避免它。

在您的情况下,您可以只更改宽度、高度和位置以使其按您的需要工作。

举个例子:

var menuButton = document.querySelector('.btn-menu');
        menuButton.addEventListener('click', function(e){
            e.preventDefault();
            document.body.classList.toggle('menu-open');
        });
.btn-menu{
  width: 30px;
  height: 30px;
  border: 2px solid red;
  position: relative;
  z-index: 5;
  float: right;
}
.menu-bg {
    position: fixed;
    left: 0;
    top: 0;
    bottom: 0;
    width: 100%;
    z-index: 40;
    pointer-events: none;
    z-index: 1;
}
.menu-bg:before {
    content: '';
    height: 1px;
    width: 1px;
    background: #000;
    position: fixed;
    right: 30px;
    top: 30px;
    transition: all ease .3s;
    transform: scale(1);
    border-radius: 50%;
}
.menu-open .menu-bg:before {
    transition: all ease .6s;
    height: 400px;
    width: 400px;
    right: -90px;
    top: -90px;
    border-radius: 50%;
}
<div class="btn-menu"><a href=""><span></span></a></div>
<div class="menu-bg"></div>

1px 因为 width/height 不是一个好主意,我会换一种方式,从 scale(0):

开始

var menuButton = document.querySelector('.btn-menu');
menuButton.addEventListener('click', function(e) {
  e.preventDefault();
  document.body.classList.toggle('menu-open');
});
.btn-menu {
  width: 30px;
  height: 30px;
  border: 2px solid red;
  position: relative;
  z-index: 5;
  float: right;
}

.menu-bg {
  position: fixed;
  left: 0;
  top: 0;
  bottom: 0;
  width: 100%;
  z-index: 40;
  pointer-events: none;
  z-index: 1;
}

.menu-bg:before {
  content: '';
  height: 100px;
  width: 100px;
  background: #000;
  position: fixed;
  right: -20px;
  top: -20px;
  transition: all ease .8s;
  border-radius: 50%;
  transform: scale(0);
  overflow: hidden;
}

.menu-open .menu-bg:before {
  transform: scale(5);
}
<div class="btn-menu"><a href=""><span>Menu</span></a></div>
<div class="menu-bg"></div>