当前位置: 首页 > 知识库问答 >
问题:

如何在自定义布局中连接CSS六边形元素?

尚鸿才
2023-03-14

这是我希望实现的布局:

我用这个css创建了六边形:

.hexagon {
  width: 100px;
  height: 55px;
  background: red;
  position: relative;
  display:inline-block;
  margin:0.2em;
}
.hexagon:before {
    content: "";
    position: absolute;
    top: -25px;
    left: 0;
    width: 0;
    height: 0;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 25px solid red;
}
.hexagon:after {
    content: "";
    position: absolute;
    bottom: -25px;
    left: 0;
    width: 0;
    height: 0;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-top: 25px solid red;
}

然而,我想知道如何用图像填充它们。这是一支钢笔:https://codepen.io/1istbesser/pen/ddypXK

如何将图像放入六边形中以使其覆盖所有六边形?如果我在#h六边形1上使用背景图像,图像仅覆盖中间部分。

共有3个答案

秦哲瀚
2023-03-14

您可以做的是绘制一个SVG并将图像作为掩码放入css中

https://codepen.io/noahblon/post/coloring-svgs-in-css-background-images

*{
  background-color:black;
}
section{
  margin-top:3em;
  display:flex;
  flex-flow: column;
  align-items: center;
}
.hexagon {
	width: 100px;
	height: 110px;
	background: red;
	position: relative;
  display:inline-block;
  margin:0.2em;
  -webkit-mask:url(https://svgshare.com/i/5Fk.svg) no-repeat 50% 50%;
  mask:url(https://svgshare.com/i/5Fk.svg) no-repeat 50% 50%;
  background-image: url('https://img1.ibxk.com.br/2017/07/13/13160112901226.jpg?w=700');
  background-size: cover;
  background-position: center;
}
.row{
  text-align: center;
  margin-top: -25px
}
<section>
      <div class="row">
      <div class="hexagon" id="hexagon1"></div>
      <div class="hexagon" id="hexagon2"></div>
      <div class="hexagon" id="hexagon3"></div>
      <div class="hexagon" id="hexagon4"></div>
      <div class="row">
      <div class="hexagon" id="hexagon5"></div>
      <div class="hexagon" id="hexagon6"></div>
      <div class="hexagon" id="hexagon7"></div>
      </div>
      <div class="row">
      <div class="hexagon" id="hexagon8"></div>
      <div class="hexagon" id="hexagon9"></div>
      </div>
 </section>
权承
2023-03-14

如果您想使用图像作为背景,您需要考虑另一种方式。您依赖伪元素,因此您的六边形不是一个元素,因此您无法使用背景图像覆盖整个区域。

这是一个使用clip-path的想法:

* {
  background-color: black;
}

section {
  margin-top: 3em;
  display: flex;
  flex-flow: column;
  align-items: center;
}

.hexagon {
  width: 100px;
  height: 100px;
  background: url(https://lorempixel.com/100/100/) 0 0/cover no-repeat;
  position: relative;
  display: inline-block;
  margin: -10px 0.2em;
  -webkit-clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
}
<section>
  <div class="row">
    <div class="hexagon" id="hexagon1"></div>
    <div class="hexagon" id="hexagon2"></div>
    <div class="hexagon" id="hexagon3"></div>
    <div class="hexagon" id="hexagon4"></div>
  </div>
  <div class="row">
    <div class="hexagon" id="hexagon5"></div>
    <div class="hexagon" id="hexagon6"></div>
    <div class="hexagon" id="hexagon7"></div>
    <div class="hexagon" id="hexagon8"></div>
    <div class="hexagon" id="hexagon9"></div>
  </div>

</section>
云焱
2023-03-14

您将遇到的问题是,使用CSS三角形创建六边形实际上会产生填充了一两个边框(其余为透明)的方形框。这有两个影响:

  1. 您无法轻松地将图像放入填充的边框中,以便对其进行剪裁

您将需要可以生成实际六边形的东西。带有剪辑路径的内联SVG非常适合——与CSS中的剪辑路径不同,它几乎在SVG所在的任何地方都受支持。这是一个例子:

<svg class="svg-graphic" width="300" height="300" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" version="1.1">
    <defs>
       <clipPath id="hexagonal-mask">
          <polygon points="300,150 225,280 75,280 0,150 75,20 225,20" />
       </clipPath>
    </defs> 
    <image clip-path="url(#hexagonal-mask)" height="100%" width="100%" xlink:href="https://i.imgur.com/grp9BU1.png" preserveAspectRatio="xMidYMin slice"/>
</svg>
 类似资料:
  • 问题内容: 我在本教程中使用了六边形代码,并创建了一个createHex类(我应该发布代码吗?)。链接的网页已使用以下代码通过createHex中的数学运算实际绘制六边形: 我遇到的问题是Android没有包含所有必需方法的Graphics类。我在android文档上做了大约一个半小时的钓鱼,而我发现最接近的东西是Path类,但是它没有我需要的方法。我想在顶部的链接文章中使用六边形代码,但找不到等

  • 本文向大家介绍自定义Android六边形进度条(附源码),包括了自定义Android六边形进度条(附源码)的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android自定义圆形进度条,分享给大家供大家参考。具体如下: 大家也可以参考这两篇文章进行学习: 《自定义Android圆形进度条(附源码)》   《Android带进度的圆形进度条》 运行效果截图如下: 主要代码: 在values中

  • 问题内容: 这是我的CSS。 CSS 输出是六边形的4个边缘是弯曲的,但顶部和底部不是。我想使六边形的所有边缘弯曲。如何使上下边缘弯曲?或如何使三角形的上边缘弯曲? 问题答案: 我想您正在寻找这个。 CSS

  • 本文向大家介绍用css画一个五边形和一个六边形相关面试题,主要包含被问及用css画一个五边形和一个六边形时的应答技巧和注意事项,需要的朋友参考一下 还有 svg 转 base64 作背景图。 当然,点击范围可能会不符合需求。 另外提一句,clip-path 边框要另做,元素选择的背景图要另做,两种都不好做圆角。

  • 但是,在Log4JV2中,PatternLayout类被设置为“final”,整个体系结构也被更改。似乎不再有一种简单的方法来拦截/覆盖对PatternLayout对象的调用。我查看了Apache文档,但没有太多信息。 我检查了这个问题和这个问题,但都没有太多的帮助。 我意识到这是一个非常“一般”的问题,但是有没有人知道在Log4j V2中实现这一点的简单方法,或者对此有什么建议?