4个圆点星形

时间:2017-07-24 16:00:25

标签: html css css3 svg css-shapes

Star with four points

我试图让这颗星在CSS中尽可能完美,这是我到目前为止所尝试的,但它是一个5角星,我想只有4点也可以让角落更加圆润?

#star-five {
   margin: 50px 0;
   position: relative;
   display: block;
   color: red;
   width: 0px;
   height: 0px;
   border-right:  100px solid transparent;
   border-bottom: 70px  solid red;
   border-left:   100px solid transparent;
   -moz-transform:    rotate(35deg);
   -webkit-transform: rotate(35deg);
   -ms-transform:     rotate(35deg);
   -o-transform:      rotate(35deg);
}
#star-five:before {
   border-bottom: 80px solid red;
   border-left: 30px solid transparent;
   border-right: 30px solid transparent;
   position: absolute;
   height: 0;
   width: 0;
   top: -45px;
   left: -65px;
   display: block;
   content: '';
   -webkit-transform: rotate(-35deg);
   -moz-transform:    rotate(-35deg);
   -ms-transform:     rotate(-35deg);
   -o-transform:      rotate(-35deg);

}
#star-five:after {
   position: absolute;
   display: block;
   color: red;
   top: 3px;
   left: -105px;
   width: 0px;
   height: 0px;
   border-right: 100px solid transparent;
   border-bottom: 70px solid red;
   border-left: 100px solid transparent;
   -webkit-transform: rotate(-70deg);
   -moz-transform:    rotate(-70deg);
   -ms-transform:     rotate(-70deg);
   -o-transform:      rotate(-70deg);
   content: '';
}
<div id="star-five"></div>

4 个答案:

答案 0 :(得分:9)

也许你可以在Black Four Pointed Star Unicode字符上使用渐变:

  

它存在一些兼容性问题(主要由text-fill-color引起),但根据您的要求,它可以完成工作。

.four-point-star::after,
.four-point-star::before {
    position: absolute;
    top: 0;
    left: 0;
    content: "\2726";
    font-size: 12rem;
}

.four-point-star::after { /* The foreground star */
    background: linear-gradient(135deg, rgba(255,191,183,1) 20%, rgba(243,44,117,1) 70%);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

.four-point-star::before { /* The star shadow */
    color: transparent;
    text-shadow: 2px 3px 10px rgba(242, 96, 85, 1);
}

/* Demo styling */
body {
    background: #fbd629;
    padding: 0 2rem;
}

.four-point-star {
    position: relative;
}
<span class="four-point-star"></span>

答案 1 :(得分:2)

显然,对于这种形状,内联SVG将是最简单和最交叉的浏览器解决方案(并具有响应式像素完美输出)。
这是一个简单的内联svg代码,用于制作一个用渐变填充的四点星:

svg{
  display:block; margin:0 auto;
  width:30%; height:auto;
}
/* For the demo */ body{background: url('https://farm8.staticflickr.com/7187/6895047173_d4b1a0d798.jpg');background-size:cover;}
<svg viewbox="0 0 10 10">
  <defs>
    <linearGradient id="starGrad">
      <stop offset="0%" stop-color="rgb(153,218,255)" />
      <stop offset="100%" stop-color="rgb(0,128,128)"/>      
    </linearGradient>
  </defs>
  <path fill="url(#starGrad)" d="M5 1 Q5.8 4.2 9 5 Q5.8 5.8 5 9 Q4.2 5.8 1 5 Q4.2 4.2 5 1z" />  
</svg>

使用路径元素并使用quadratic bezier curves创建了四个点。这颗星星充满了SVG linear gradient

答案 2 :(得分:1)

我建议使用SVG。如果您不想要svg文件的其他http请求,则可以将svg代码包含在&#39;内容&#39;属性:

content: url("data:image/svg+xml; utf8, <svg.. code here</svg>");

&#13;
&#13;
.star-4-point {
  background: url("data:image/svg+xml; utf8,<svg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='50px' height='50px' viewBox='0 0 50 50' style='enable-background:new 0 0 50 50;' xml:space='preserve'><path d='M25,50c0,0,1.325-8.413,8.957-16.043C41.587,26.325,50,25,50,25l0,0c0,0-8.413-1.325-16.043-8.957C26.325,8.413,25,0,25,0 l0,0c0,0-1.325,8.413-8.957,16.043C8.413,23.675,0,25,0,25l0,0c0,0,8.413,1.325,16.043,8.957C23.675,41.588,25,50,25,50'/></svg>");
  height: 50px;
  width: 50px;
}
&#13;
<div class="star-4-point"></div>
&#13;
&#13;
&#13;

答案 3 :(得分:1)

你可以使用两个旋转和倾斜的矩形来获得四点星。

&#13;
&#13;
body {
  /* just styles for demo */
  background-color: #fdd700;
}

.four-point-star {
  width: 100px;
  height: 100px;
  position: relative;
  margin-top: 100px;
  margin-left: 100px;
}

.four-point-star:before,
.four-point-star:after {
  content: "";
  position: absolute;
  background-color: #fa5b88;
  display: block;
  left: 0;
  width: 141.4213%; /* 100% * √2 */
  top: 0;
  bottom: 0;
  border-radius: 5%;
  transform: rotate(66.66deg) skewX(45deg);
}

/* the same but +90deg to rotate */
.four-point-star:after {
  transform: rotate(156.66deg) skew(45deg);
}
&#13;
<div class="four-point-star"></div>
&#13;
&#13;
&#13;