如何创建一个可点击的 svg 图像圈

How to create a clickable circle of svg images

我有几个 svg 文件,它们像拼图一样拼在一起,形成一个圆圈。放置它们的最佳方法是什么?我试过创建一个 ul 并将片段放入其中,全部放在彼此之上。由于段 svgs 已经正确旋转,我想我可以把 display flex 放在包装纸上,并在它们之间留一个间隙,但间隙似乎不起作用。

我现在的代码:

<div class="expertises-wrap">
    <ul class="expertises">
        <li>
            <img class="slice" src="img/infographic/techniek.svg">
        </li>
        <li>
            <img class="slice" src="img/infographic/aard-warmte-projecten.svg">
        </li>
        <li>
            <img class="slice" src="img/infographic/duurzame-energiezaken.svg">
        </li>
        <li>
            <img class="slice" src="img/infographic/modellering.svg">
        </li>
        <li>
            <img class="slice" src="img/infographic/ruimtelijke-ontwikkeling.svg">
        </li>
        <li>
            <img class="slice" src="img/infographic/corporate-finance.svg">
        </li>
        <li>
            <img class="slice" src="img/infographic/makelaardij.svg">
        </li>
    </ul>
</div>

(S)CSS

.expertises {
    position: relative;
    width: 500px;
    height: 500px;
    list-style: none;
    display: flex;
    gap: 70px;
    justify-content: center;
    align-items: center;
    li {
        position:absolute;
        img{
            width: 250px;
            height: auto;
        }
    }
}

解决这个问题的最佳方法是什么?

JSfiddle:https://jsfiddle.net/fyL4r0vu/

期望的结果:

实现此目的最直接的方法是将所有图像居中,然后使用 transform 将它们放置在您需要的位置。

所以开始于:

transform: rotate(0deg) translate(10em) rotate(0deg);

并增加每张图片的 rotatetranslate


由于实际位置在您的示例中似乎没有对齐,所以我只是将它们均匀地隔开:

.image-holder {
  position: relative;
  width: 20em;
  height: 20em;
  border-radius: 50%;
  padding: 0;
  list-style: none;
  margin: 5em auto 0;
}
.image-holder > img {
  display: block;
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -3em;
  width: 6em;
  height: 6em;
}
.image-holder > img:nth-of-type(1) {
  transform: rotate(0deg) translate(10em) rotate(0deg);
}
.image-holder > img:nth-of-type(2) {
  transform: rotate(45deg) translate(10em) rotate(-45deg);
}
.image-holder > img:nth-of-type(3) {
  transform: rotate(90deg) translate(10em) rotate(-90deg);
}
.image-holder > img:nth-of-type(4) {
  transform: rotate(135deg) translate(10em) rotate(-135deg);
}
.image-holder > img:nth-of-type(5) {
  transform: rotate(180deg) translate(10em) rotate(-180deg);
}
.image-holder > img:nth-of-type(6) {
  transform: rotate(225deg) translate(10em) rotate(-225deg);
}
.image-holder > img:nth-of-type(7) {
  transform: rotate(270deg) translate(10em) rotate(-270deg);
}
.image-holder > img:nth-of-type(8) {
  transform: rotate(315deg) translate(10em) rotate(-315deg);
}
<div class="image-holder">
  <img class='slice' src="https://placehold.jp/50x50.png?text=1" alt="">
  <img class='slice' src="https://placehold.jp/50x50.png?text=2" alt="">
  <img class='slice' src="https://placehold.jp/50x50.png?text=3" alt="">
  <img class='slice' src="https://placehold.jp/50x50.png?text=4" alt="">
  <img class='slice' src="https://placehold.jp/50x50.png?text=5" alt="">
  <img class='slice' src="https://placehold.jp/50x50.png?text=6" alt="">
  <img class='slice' src="https://placehold.jp/50x50.png?text=7" alt="">
  <img class='slice' src="https://placehold.jp/50x50.png?text=8" alt="">
</div>

为什么不使用 SVG 作为包装器?您可以使用 <image> 来嵌入图像,并使用 <a> 到 link 到某个地方。

在这一点上(所有小的 SVG 图像都已经制作完成)唯一的问题是将它们以正确的大小和位置重新组合在一起。也许你可以在这个过程中退后一步,看看源文件,看看 sizing/positioning 是否可以在那里解决。

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
  <a href="#1">
    <image href="https://svgur.com/i/gUR.svg" width="40" x="30"/>
  </a>
  <a href="#2">
    <image href="https://svgur.com/i/gUQ.svg" width="38" x="58" y="5" />
  </a>
  <a href="#3">
    <image href="https://svgur.com/i/gTa.svg" width="33" x="64" y="38" />
  </a>
<svg>

您也可以将所有内容构建成一张SVG图像。这需要一些时间,但这是一个开始:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1700 1700" font-size="40" font-family="sans-serif" font-weight="bold" text-anchor="middle" dominant-baseline="middle">
  <path id="p1" d="M -348.917 -763.913 q 14.3 -6.534 28.831 -12.534 q 22.177 -9.132 44.8 -16.984 A 842.35 842.35 0 0 1 50.923 -838.5 c 1.469 0.086 2.91 0.181 4.37 0.284 c 4.405 0.3 8.8 0.62 13.2 0.984 A 841.9 841.9 0 0 1 299.932 -784.6 c 2.061 0.793 4.12 1.585 6.19 2.4 c 4.175 1.61 8.315 3.293 12.446 4.993 q 15.309 6.24 30.333 13.118 l -91.961 190.994 a 22.714 22.714 0 0 0 5.246 26.632 a 22.349 22.349 0 0 0 5.349 3.6 c 5.911 2.846 13.752 2.6 20.985 -0.662 a 38.549 38.549 0 1 1 -21.492 44.635 c -1.957 -7.69 -6.657 -13.971 -12.568 -16.817 a 22.372 22.372 0 0 0 -6.148 -1.939 a 22.708 22.708 0 0 0 -24.081 12.49 L 119.907 -288.482 a 308.9 308.9 0 0 0 -113.857 -24.055 c -1.361 -0.034 -2.729 -0.048 -4.08 -0.055 l -2.658 -0.015 c -3.38 0.015 -6.77 0.093 -10.131 0.205 A 308.721 308.721 0 0 0 -119.907 -288.455 L -209.1 -473.642 a 7.645 7.645 0 0 1 6.411 -10.964 a 71.13 71.13 0 1 0 -23.886 -139.181 a 73.715 73.715 0 0 0 -10.414 4.065 a 70.73 70.73 0 0 0 -22.556 17.064 a 7.627 7.627 0 0 1 -12.577 -1.816 Z" />
  <a href="#1">
    <use href="#p1" transform="translate(850 850) rotate(0)" fill="#eeaa23"/>
    <text fill="white" x="850" y="850" transform="translate(0 -500)">Techniek</text>
  </a>
  <a href="#2">
    <g transform="translate(850 850) rotate(51.43)">
      <use href="#p1" fill="#c09a2d"/>
      <g fill="white" transform="translate(0 -500) rotate(-51.43)">
        <text>(Aard)Warmte-</text>
        <text transform="translate(20 50)">projecten</text>
      </g>
    </g>
  </a>
  <a href="#3">
    <g transform="translate(850 850) rotate(102.86)">
      <use href="#p1" fill="#75813d"/>
      <g fill="white" transform="translate(0 -500) rotate(-102.86)">
        <text>(Duurzame)</text>
        <text transform="translate(20 50)">Energiezaken</text>
      </g>
    </g>
  </a>
  <a href="#4">
    <g transform="translate(850 850) rotate(154.29)">
      <use href="#p1" fill="#eeaa23"/>
    </g>
  </a>
  <a href="#5">
    <g transform="translate(850 850) rotate(205.71)">
      <use href="#p1" fill="#eeaa23"/>
    </g>
  </a>
  <a href="#6">
   <g transform="translate(850 850) rotate(257.14)">
      <use href="#p1" fill="#eeaa23"/>
    </g>
  </a>
  <a href="#7">
    <g transform="translate(850 850) rotate(308.57)">
      <use href="#p1" fill="#eeaa23"/>
    </g>
  </a>
<svg>