CSS - 用于复合布局的圆角凹角

时间:2016-08-19 09:18:05

标签: html css rounded-corners

首先,我知道有类似的问题(例如。Create concave corners in css),但它们并没有涵盖这种情况。

这不是关于单个cell / div元素。

我有三个块,里面会有一些文本内容:

  1. top-middle centered block(narrow)
  2. 中 - 中间区块(全屏幕)
  3. 中底中央区块(狭窄)
  4. 基本上像十字架(删除文字):

    enter image description here

    外角(8)是直的,但我怎样才能实现那些内角(4)?

2 个答案:

答案 0 :(得分:2)

请参阅下面的代码,也许需要进行一些调整,但想法是你使用pseudo-elements制作那些内部边框

让我知道这是否是你想要的



.colored {
  background:yellow;
  border:5px solid green;
  width:100px;
  height:100px;
  box-sizing:border-box;
  position:relative;
}
#content {
  width:300px;
position:relative;
background:#000;
}
.top,.bottom { position:relative;margin:0 auto;clear:both}
.top { border-bottom:none}
.bottom { border-top:none}
.left { border-right:none}
.right { border-left:none;}
.colored.center { border:none;}
.left,.center,.right { float:left;}

.top { border-top-left-radius:10px;border-top-right-radius:10px;}
.bottom { border-bottom-left-radius:10px;border-bottom-right-radius:10px;}
.right { border-bottom-right-radius:10px;border-top-right-radius:10px;}
.left { border-bottom-left-radius:10px;border-top-left-radius:10px;}

.top:before {
  position:absolute;
  height:100%;
  width:100%;

  left:-100%;
  top:5px;
  content:"";
  border-bottom-right-radius:10px;
  border-right:5px solid green;
  border-bottom:5px solid green;
  z-index:9999;
  box-sizing:border-box;
  
}
.top:after {
  position:absolute;
  height:100%;
  width:100%;

  right:-100%;
  top:5px;
  content:"";
  border-bottom-left-radius:10px;
  border-left:5px solid green;
  border-bottom:5px solid green;
  z-index:9999;
  box-sizing:border-box;
  
}


.bottom:before {
  position:absolute;
  height:100%;
  width:100%;

  left:-100%;
  bottom:5px;
  content:"";
  border-top-right-radius:10px;
  border-right:5px solid green;
  border-top:5px solid green;
  z-index:9999;
  box-sizing:border-box;
  
}
.bottom:after {
  position:absolute;
  height:100%;
  width:100%;

  right:-100%;
  bottom:5px;
  content:"";
  border-top-left-radius:10px;
  border-left:5px solid green;
  border-top:5px solid green;
  z-index:9999;
  box-sizing:border-box;
  
}

<div id="content">


<div class="top colored">

</div>
<div class="left colored">

</div>
<div class="center colored">

</div>

<div class="right colored">

</div>

<div class="bottom colored">

</div>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

只有三个div的变化,有点hacky但功能性。使用伪元素,变换和内部阴影。

&#13;
&#13;
jq
&#13;
div {
  background-color: #000;
  min-height: 100px;
}
.center {
  width: 100px;
  margin: 0 auto;
}
.rounded {
  border-radius: 20px;
  border: 5px solid red;
}
.conc {
  position: relative;
}
.conc::before,
.conc::after {
  content: '';
  position: absolute;
  border: 5px solid red;
  border-radius: 20px;
  width: 25px;
  height: 25px;
  background-color: trnaspanret;
  border-color: red transparent transparent;
  z-index: 3;
  box-shadow: white 0px 0px 0px 20px inset
}
.conc.bottom {
  margin-bottom: -5px;
  border-bottom: 0;
  border-radius: 20px 20px 0 0
}
.conc.top {
  margin-top: -5px;
  border-top: 0;
  border-radius: 0 0 20px 20px
}
.conc::before {
  left: -35px;
}
.conc::after {
  right: -35px;
}
.conc.top::before,
.conc.top::after {
  top: 0px;
}
.conc.bottom::before,
.conc.bottom::after {
  bottom: 0px;
}
.conc.bottom::before {
  transform: rotate(135deg)
}
.conc.bottom::after {
  transform: rotate(-135deg)
}
.conc.top::before {
  transform: rotate(45deg)
}
.conc.top::after {
  transform: rotate(-45deg)
}
.centerblinders {
  position: relative;
}
.centerblinders::before,
.centerblinders::after {
  content: '';
  position: absolute;
  width: 130px;
  height: 20px;
  background-color: #000;
  left: 50%;
  transform: translatex(-50%);
  z-index: 2;
}
.centerblinders::before {
  top: -15px;
}
.centerblinders::after {
  bottom: -15px;
}
&#13;
&#13;
&#13;