为这个"形状"添加边框

Jim*_*aro 7 html css styles border shape

我需要为这个"形状"添加边框.这有点困难,因为形状是由伪元素之后之前制作的.我找不到正确的方法.

我需要实现的目标:

在此输入图像描述

我到目前为止的代码:

https://jsfiddle.net/jimmyadaro/xfcjfz3d/

#octagon {
    width: 300px;
    height: 200px;
    background: red;
    position: relative;
    -webkit-box-sizing: content-box;
    -moz-box-sizing: content-box;
    box-sizing: content-box;
    display: block;
}

#octagon:before,
#octagon:after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
}

#octagon:before {
    top: 0;
    border-bottom: 30px solid red;
    border-left: 30px solid #fff;
    border-right: 30px solid #fff;
}

#octagon:after {
    bottom: 0;
    border-top: 30px solid red;
    border-left: 30px solid #fff;
    border-right: 30px solid #fff;
}

<div id="octagon"></div>
Run Code Online (Sandbox Code Playgroud)

我尝试了阴影和轮廓但没有成功.

谢谢阅读.

注意:如果重要的话,我会使用纯色背景色.

dar*_*yeo 6

这是我的解决方案.不需要纯色背景色.这可能适合您的实际使用情况,也可能不适合您.

的jsfiddle

#octagon {
    display: flex;
    justify-content: center;
    align-items: center;
    
    width: 300px;
    height: 200px;
    overflow: hidden;
    position: relative;
}

#octagon:before,
#octagon:after {
    content: "";
    display: block;
    width: 300px;
    padding-top: 100%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%) rotate(45deg);
    z-index: -1;
}
#octagon:before {
    background: red;
}
#octagon:after {
    background:
        linear-gradient(
    		45deg,
	    	#0e0 calc(50% - 150px + 10px), transparent 0,
    		transparent calc(50% + 150px - 10px), #0e0 0%),
    	linear-gradient(
    		-45deg,
    		#0e0 calc(50% - 100px + 10px), transparent 0,
    		transparent calc(50% + 100px - 10px), #0e0 0);
    box-shadow: 0 0 0 10px #0e0 inset;
}
Run Code Online (Sandbox Code Playgroud)
<div id="octagon">Hello World!</div>
Run Code Online (Sandbox Code Playgroud)


Var*_*rin 2

嗯,这是我能想到的用纯 CSS 处理它的唯一方法:

JSfiddle在这里: https: //jsfiddle.net/xfcjfz3d/7/

body {
    background:#fff;
}

#octagon {
  position:relative;
	width: 300px;
	height: 200px;
	background: green;
	position: relative;
	-webkit-box-sizing: content-box;
	-moz-box-sizing: content-box;
	box-sizing: content-box;
	display: block;
}

#octagon:before,
#octagon:after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
}

#octagon:before {
	top: 0;
	border-bottom: 30px solid green;
	border-left: 30px solid #fff;
	border-right: 30px solid #fff;
}

#octagon:after {
	bottom: 0;
	border-top: 30px solid green;
	border-left: 30px solid #fff;
	border-right: 30px solid #fff;
}

.tall {
  position:absolute;
  background:red;
  width:230px;
  height:190px;
  left:35px;
  top:5px;
  z-index:1;
}

.wide {
  position:absolute;
  background:red;
  width:290px;
  height:130px;
  left:5px;
  top:35px;
  z-index:1;
}

.corner {
  position:absolute;
  background:red;
  width:45px;
  height:43px;
  
  z-index:1;
  transform: rotate(45deg);
}

.topleft {
  left:14px;
  top:14px;
}

.topright {
  //background:black;
  left:241px;
  top:13px;
}

.bottomleft {
  background:red;
  left:13px;
  top:143px;
}

.bottomright {
  background:red;
  left:241px;
  top:143px;
}
Run Code Online (Sandbox Code Playgroud)
<div id="octagon">
  <div class="tall"></div>
  <div class="wide"></div>
  <div class="corner topleft"></div>
  <div class="corner topright"></div>
  <div class="corner bottomleft"></div>
  <div class="corner bottomright"></div>
</div>
Run Code Online (Sandbox Code Playgroud)