CSS中的负边界半径?

Jas*_*rod 4 css

我正在尝试使用CSS来创建一个看起来像这样的div: 负左边距

我几乎从这开始:

.player {
    width: 480px;
    height: 80px;
    border-radius: 40px;
}
Run Code Online (Sandbox Code Playgroud)

什么是最简单的方法,没有太多的代码?

Aur*_*ide 9

这是另一种方法,这次使用径向背景图像。这让它变得透明并且在 Firefox 和 Chrome 中都可以使用。

.player {
  width: 480px;
  height: 80px;
  border-radius: 40px;
  background-image: radial-gradient(circle at 38px 40px, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 40px, blue 40px);
  color: #FFF;
}
Run Code Online (Sandbox Code Playgroud)
<div class="player"></div>
Run Code Online (Sandbox Code Playgroud)


Jon*_*n P 6

你可以使用before伪元素来提供"剪切"

.player {
    width: 480px;
    height: 80px;
    border-radius:0 40px 40px 0;
    background-color:#0000FF;
    position:relative;    
    color:#FFF;
}

.player:before
{
    width: 80px;
    height: 80px;
    border-radius:0 40px 40px 0;
    background-color:#FFF;    
    display:inline-block;
    vertical-align: middle;
    margin-right: 10px;
    content: '';
}
Run Code Online (Sandbox Code Playgroud)
<div class="player">Some Content</div>
Run Code Online (Sandbox Code Playgroud)

  • 问题是,我需要缩进是透明的,而不是白色的; (2认同)

bub*_*ier 5

.wrapper {
    width: 500px;
    height: 103px;
    background-color: red;
    padding-top: 15px;
}

.player {
    width: 480px;
    height: 83px;
    margin-left: 10px;
    border-top-right-radius: 40px;
    border-bottom-right-radius: 40px;
    border: 1px solid black;
    border-left: none;
    background-color: blue;
    -webkit-mask-image: radial-gradient(circle at left, transparent 0, transparent 40px, black 41px);
}
Run Code Online (Sandbox Code Playgroud)
<div class="wrapper"><div class="player"></div></div>
Run Code Online (Sandbox Code Playgroud)


Max*_*phy 5

Jon P 的答案已经差不多了——但是 before 元素可以用来在主 div 的左侧制作一个透明的圆圈,并且阴影可以产生所需的剪切效果。

body {
  /* You can change the background colour to verify that this is truly transparent */
  background-color: pink;
}

.player {
    /* Just a normal box */
    width: 480px;
    height: 80px;
    border-radius:0 40px 40px 0;
    background-color:#0000FF;
    position:relative;    
    color:#FFF;
   /* Move the box right so that we can see the cutout to the left */
    margin-left: 40px;
}

.player:before
{
    width: 80px;
    height: 80px;
    border-radius:0 40px 40px 0;
    background-color:transparent;    
    display:inline-block;
    vertical-align: middle;
    margin-right: 10px;
    content: '';
    /* This is the cutout: */
    box-shadow: 40px 0px #00f;
    position: relative;
    left: -80px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="player">Some Content</div>
Run Code Online (Sandbox Code Playgroud)