【问题标题】:triangles bordered by an inner and outer circle由内圈和外圈包围的三角形
【发布时间】:2014-11-14 20:23:06
【问题描述】:

我正在尝试使用 CSS3 在一个圆内创建大约十二个三角形(每个三角形的弧度为 360/12 = 30 度),以使它们的底部边框适合外圆的弧度,并且它们的峰值适合/弯曲内圈。我最初的想法是创建每个三角形,然后将其放置在两个圆圈内。但是使用 CSS 中简单的三角形创建方法,我无法弄清楚如何创建一个具有完全适合两个圆的边框的三角形。这些三角形需要稍后在其中包含文本(以及样式等)并使用 jQuery 或 JavaScript 移动(我还没有完全弄清楚那部分)。谁能给我任何想法?我该怎么做。另外,这是否是最好的方法,特别是如果我以后想使用 jQuery 将它们作为一个组拖动到两个圆圈内。我是 CSS/JavaScript/jQuery 的新手,任何帮助将不胜感激。

下面是两个圆的简单sn-p代码

.outerCircle {
  width:400px;
  height:400px;
  border:1px solid black;
  border-radius:50%;
    
}

.innerCircle {
  position:relative;
  left:170px;
  top:170px;
  width:50px;
  height:50px;
  border-radius:50%;
  border:1px solid black;
  
}

.triangleOne {
	
  
}
  
<div class="outerCircle">
  <div class="triangleOne" ></div>
  <div class="triangleTwo" ></div>
  <div class="triangleThree"> </div>
  <div class="triangleFour" ></div >
  <div class="triangleFive"> </div>
  <div class="triangleSix"> </div>
  <div class="triangleSeven"> </div>
  <div class="triangleEight"> </div>
  <div class="triangleNine" ></div>
  <div class="triangleTen"> </div>
  <div class="triangleEleven"> </div>
  <div class="triangleTwelve" ></div>
  
  <div class="innerCircle"></div>
  
</div>

【问题讨论】:

  • 你打算怎么做一个三角形?使用图像?帆布? SVG?或者只是 CSS,正如 here 解释的那样?
  • 注意,纯 CSS 三角形的样式非常有限。您所能做的就是更改三角形的颜色,并添加一个假边框,在其上放置另一个三角形(可能使用伪元素)。无论如何,this 是您要创建的吗?
  • @MaxArt:那很好。但是,通过使用旋转元素(比如 45 度)并使两个边框透明,可以创建带边框且不使用额外伪元素的三角形。但问题是它只会在两侧提供边界,而另一侧的边界可能需要使用 45 度的线性渐变来完成。但总的来说,我认为这对于 CSS 来说有点太复杂了。 SVG 可能是一个更好的主意。
  • @QPTR 为了获得 52px 和 165px,我使用了一些基本的几何图形(实际上是 163,但由于舍入和边框进行了调整),甚至没有三角函数。 SVG 允许你绘制任何你想要的形状,用任何你想要的填充它,用 CSS 设置它们的样式,作为一个加号if the browser supports transform,你可以肯定it supports SVG too,所以它肯定是一个更好的选择。关于最终结果,您能否附上您想要实现的目标的图片?只用文字不容易理解。

标签: javascript jquery html css css-shapes


【解决方案1】:

你可以用它用多个三角形组成一个圆:

.triangle { 
    position: absolute;
    width: 0; 
    height: 0; 
    border-left: 150px solid transparent; 
    border-right: 150px solid transparent; 
    border-top: 200px solid red; 
    -moz-border-radius: 50%; 
    -webkit-border-radius: 50%; 
    border-radius: 50%; }
.One {
    top: 0px;
    left: 50px;
    transform: rotate(0deg);
}

仅通过旋转和位置调整每个三角形。经过一些调整,你应该得到你想要的。 请参阅我的示例

JSfiddle:
http://jsfiddle.net/marcusrommel/20df94wo/1/

【讨论】:

  • 啊哈!所以你创建了三角形,然后给内圈一个更高的 z-index,这是一个很酷的主意。我也对此进行了一些试验,但现在我需要考虑 SVG,因为我想为每个面板提供非常详细的样式,这对于边框属性来说似乎是不可能的。谢谢!
【解决方案2】:

我将这个old question of mine 用于一个不相关的主题,但我开发的解决方案之一实际上非常适合您的需求。 This,尤其是对基础的摆弄。

标记有点不同,但基本相同:

<svg viewBox="0 0 400 400" version="1.1">
    <path d="M 200,0 A 200 200,0,0,1,300,26.794919243112258 L 215,174.01923788646684 A 30 30,0,0,0,200,170"/>
    <path d="M 300,26.794919243112258 A 200 200,0,0,1,373.2050807568877,100 L 225.98076211353316,185 A 30 30,0,0,0,215,174.01923788646684"/>
    ...
</svg>

您可以使用 CSS 轻松设置扇区样式:

path {
    fill: red;
    stroke: black;
    stroke-width: 1px;
}

但是您可以使用 SVG 做更多事情,比如渐变等等。你甚至可以使用文本。

Live demo

【讨论】:

  • 哇,非常感谢!路径标签是你定义所有三角形的地方,对吧?我将阅读一些关于 SVG 的信息,以了解您为路径标签提供的所有参数,任何帮助将不胜感激 :) 另外,动画和 jQuery 也可以应用于 SVG 吗?无论如何,你已经完全给了我一个从哪里开始的方向。再次非常感谢!
  • PS:我刚刚阅读了路径标签,这是一些非常棒的东西。所以,现在我理解第一个 A 是创建较大的外弧,另一个 A 是较小的内弧,而 L 作为相交的线。还有一个问题,您是如何得出创建弧线和直线的确切值的?
  • @QPTR 这一次我确实不得不使用一些三角函数。其实没什么复杂的。我在答案中链接了一个小提琴,它显示了一个使用 Javascript 动态生成的 SVG。创建路径后,我只需复制 &lt;svg&gt; 元素的内容 :) 是的,您可以使用 jQuery 为 SVG 设置动画,甚至使用 CSS animations 完成任务。
  • 啊,好吧,那我最好学习如何计算这些值:) 非常感谢您的出色帮助!
猜你喜欢
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
相关资源
最近更新 更多