如何使用 CSS 制作半个六边形形状,在矩形上加上边框,在半个六边形的中间有一个图像

How do I make half a hexagon shape using CSS with a border over a rectangle with a border with an image in the middle of the half hexagon

如何使用 CSS 和 HTML5

制作带边框的半个六边形以及带边框的矩形和半个六边形内的图像

我试过没有代码,但不知道该怎么做

我添加了我希望能够执行的操作的图像。

您可以使用 :before:after.

用一个矩形和 2 个 CSS 个带有一些透明边框的三角形很容易地创建一个梯形

工作示例:

body {
    background: black;
}

.rectangle {
    background: #ECECEC;
    height: 20px;
}

.trapezoid {
    width: 50px;
    height: 50px;
    position: relative;
    margin: 0 auto;
    background: #ECECEC;
}
.trapezoid:before,
.trapezoid:after {
    content: '';
    display: block;
    position: absolute;
    top: 0;
    border: 25px solid transparent;
    border-top-color: #ECECEC;
}
.trapezoid:before {
    right: 100%;
    border-right-color: #ECECEC;
}
.trapezoid:after {
    left: 100%;
    border-left-color: #ECECEC;
}
<div class="rectangle">
    <div class="trapezoid"></div>
</div>

您可以使用 :after 创建半个八边形。

.halfOctagon {
    width: 100px;
    height: 50px;
    background: #f35916;
    position: relative;
    top:25px;
    left:50px;
}

.halfOctagon:after {
    content: "";
    position: absolute;
    bottom: 0;
    left: 0;
    border-top: 29px solid #f35916;
    border-left: 29px solid #eee;
    border-right: 29px solid #eee;
    width: 42px;
    height: 0;
}

您可以在 https://jsfiddle.net/kb2tzxq4/

中尝试实例

要移动半八边形调整顶部和左侧 css for .halfOctagon

更新了形状和边框颜色

div {
  margin-top:1em;;
  text-align: center;
  padding: 0.5em;
  border-top:1px solid lightgray;
  background: linear-gradient(to bottom, #ECECEC 50%, lightgray 50%, lightgray 51%, transparent 52%);
}

img {
  position: relative;
  display: block;
  margin: 10px auto;
  z-index: 1;
}

span {
  text-align: center;
  display: inline-block;
  width:320px;
  position: relative;
  overflow: hidden;
  border-top:1px solid lightgray;
  background: linear-gradient(to left, lightgray, lightgray) bottom center, linear-gradient(40deg, transparent 50px, lightgray, 50px, lightgray 52px, #ECECEC 52px)bottom left, linear-gradient(-40deg,  transparent 50px, lightgray, 50px, lightgray 52px, #ECECEC 52px)bottom right;
  background-repeat: no-repeat;
  background-size: 50% 2px, 50% 100%, 50% 100%;
}
<div>
  <span>
    <img src="http://lorempixel.com/55/46/technics/1" alt="ico"/>
  </span>
</div>


旧代码


单伪和overflow:hidden,也可以做到:

div {
  text-align: center;
  padding: 0.5em;
  background: linear-gradient(to bottom, gray 50%, black 50%);
}
img {
  position: relative;
  display: block;
  padding: 0.5em 0;
  z-index: 1;
}
span {
  text-align: center;
  display: inline-block;
  padding: 0 3em;
  position: relative;
  overflow: hidden;
}
span:before {
  position: absolute;
  content: '';
  bottom: 0;
  left: 50%;
  margin-left: -75px;
  height: 150px;
  width: 150px;
  background: gray;
  transform: rotate(45deg);
}
<div>
  <span>
    <img src="http://lorempixel.com/40/50/nature/3" alt="ico"/>
  </span>
</div>

或渐变(可能更容易 to draw borders 或阴影,如果需要)

div {
  text-align: center;
  padding: 0.5em;
  background: linear-gradient(to bottom, gray 50%, black 50%);
}
img {
  position: relative;
  display: block;
  padding: 0.5em 0;
  z-index: 1;
}
span {
  text-align: center;
  display: inline-block;
  padding: 0 3em;
  position: relative;
  overflow: hidden;
  background: linear-gradient(40deg, transparent 1.5em, gray 1.5em)bottom left, linear-gradient(-40deg, transparent 1.5em, gray 1.5em)bottom right;
  background-repeat: no-repeat;
  background-size: 50% 100%;
}
<div>
  <span>
    <img src="http://lorempixel.com/40/50/nature/3" alt="ico"/>
  </span>
</div>

这是一个使用带有倾斜的伪元素的解决方案。图片可以叠加没有问题

.rect {
  width: 100%;
  height: 20px;
  background-color: lightgrey;
  border-bottom: 1px solid grey;
  position: relative;
}

.hex {
  width: 200px;
  height:  40px;
  position: absolute;
   left: 50%;
  transform: translateX(-50%);
}

.hex:before, .hex:after {
   content: "";
  position: absolute;
  width: 200px;
  height: 40px;
  border-style: solid;
  border-color: grey;
  border-width: 0px 0px 1px 0px;
  transform-origin: bottom center;
  background-color: lightgrey;
}

.hex:before {
   transform: skew(10deg); 
  border-left-width: 1px;
}
.hex:after {
   transform: skew(-10deg);  
  border-right-width: 1px;
}
<div class="rect">
  <div class="hex"></div>
  </div>