我在SO的一個答案中發現了下面的CSS,我想知道為什么它會創建想要的心形:
#heart {
position: relative;
width: 100px;
height: 90px;
}
#heart:before, #heart:after {
position: absolute;
content: "";
left: 50px;
top: 0;
width: 50px;
height: 80px;
background: red;
border-radius: 50px 50px 0 0;
transform: rotate(-45deg);
transform-origin: 0 100%;
}
#heart:after {
left: 0;
transform: rotate(45deg);
transform-origin :100% 100%;
}
<div id="heart"></div>
使用CSS3創建心形有幾個步驟:
創建塊級元素,如& ltdiv & gt用id="heart "賦值并應用CSS:
#heart {
position:relative;
width:100px;
height:90px;
margin-top:10px; /* leave some space above */
}
現在使用偽元素#heart:在我們創建一個像這樣有一個圓邊的紅盒子之前:
#heart:before {
position: absolute;
content: "";
left: 50px;
top: 0;
width: 52px;
height: 80px;
background: red; /* assign a nice red color */
border-radius: 50px 50px 0 0; /* make the top edge round */
}
您的心臟現在應該看起來像這樣:
讓我們通過添加以下內容對其進行一點旋轉:
#heart:before {
-webkit-transform: rotate(-45deg); /* 45 degrees rotation counter clockwise */
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
transform: rotate(-45deg);
-webkit-transform-origin: 0 100%; /* Rotate it around the bottom-left corner */
-moz-transform-origin: 0 100%;
-ms-transform-origin: 0 100%;
-o-transform-origin: 0 100%;
transform-origin: 0 100%;
}
我們現在得到了:
已經開始走到一起了:)。
現在對于右邊的部分,我們基本上只需要旋轉相同的形狀 順時針45度而不是逆時針。為了避免代碼重復,我們附加了css 將#heart:before也改為#heart:after,然后應用更改 位置和角度:
#heart:after {
left: 0; /* placing the right part properly */
-webkit-transform: rotate(45deg); /* rotating 45 degrees clockwise */
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
-webkit-transform-origin: 100% 100%; /* rotation is around bottom-right corner this time */
-moz-transform-origin: 100% 100%;
-ms-transform-origin: 100% 100%;
-o-transform-origin: 100% 100%;
transform-origin :100% 100%;
}
瞧!一個完整的心形& ltdiv & gt:
沒有任何前綴的代碼片段:
#heart {
position: relative;
width: 100px;
height: 90px;
margin-top: 10px;
}
#heart::before, #heart::after {
content: "";
position: absolute;
top: 0;
width: 52px;
height: 80px;
border-radius: 50px 50px 0 0;
background: red;
}
#heart::before {
left: 50px;
transform: rotate(-45deg);
transform-origin: 0 100%;
}
#heart::after {
left: 0;
transform: rotate(45deg);
transform-origin: 100% 100%;
}
<div id="heart"></div>
代碼更少的新想法(來自我的文章:https://verpex.com/blog/website-tips/css-shapes-the-heart)
.heart {
display: inline-block;
width: 200px;
aspect-ratio: 1;
border-image: radial-gradient(red 69%, #0000 70%) 84.5%/50%;
clip-path: polygon(-41% 0, 50% 91%, 141% 0);
}
<div class="heart"></div>
<div class="heart" style="width:100px"></div>
<div class="heart" style="width:50px"></div>