我喜欢将 CSS 视为一种爱情语言。 如果写得很好,它可以像诗歌一样美丽。 它有规则、语义,并且像爱情本身一样,可以用多种方式表达。 考虑一下我们在 CSS 中编写 black
的各种选项:
#000000
#000
rgb(0, 0, 0)
hsla(360, 100%, 0%, 1)
black
本着情人节的精神,我认为用 HTML 和 CSS 的多种方法制作爱心会很有趣。
普通背景图像
我们可以调用爱心图像并将其设置为元素的背景。
.heart {
background-image: url("heart.png");
background-size: 100%;
background-repeat: no-repeat;
}
查看 CodePen 中的示例 我爱你 - 背景图像,由 CSS-Tricks(@css-tricks)创建,在 CodePen 上。
HTML 和 ASCII 符号
没错。 我们可以让网页帮我们绘制。
.heart {
content: '♥';
}
查看 CodePen 中的示例 我爱你 - ASCII,由 CSS-Tricks(@css-tricks)创建,在 CodePen 上。
CSS 形状
现实生活中爱心很复杂,但在 CSS 中它们仅仅是两个圆圈和一个旋转的正方形。

借助 ::before
和 ::after
伪元素,我们可以用单个元素绘制出来。
.heart {
background-color: red;
display: inline-block;
height: 30px;
margin: 0 10px;
position: relative;
top: 0;
transform: rotate(-45deg);
width: 30px;
}
.heart:before,
.heart:after {
content: "";
background-color: red;
border-radius: 50%;
height: 30px;
position: absolute;
width: 30px;
}
.heart:before {
top: -15px;
left: 0;
}
.heart:after {
left: 15px;
top: 0;
}
查看 CodePen 中的示例 我爱你 - CSS 形状,由 CSS-Tricks(@css-tricks)创建,在 CodePen 上。
图标字体
图标字体 在与内联 SVG 的笼斗中惨败,但它们在这里仍然有效。 我们需要我们的爱心图标以各种字体文件格式,并使用 @font-face
应用它,但我们将使用 我们热爱图标字体网站 为我们生成它。
@import url(http://weloveiconfonts.com/api/?family=entypo);
[class*="entypo-"]:before {
font-family: 'entypo', sans-serif;
color: red;
}
查看 CodePen 中的示例 我爱你 - 图标字体,由 CSS-Tricks(@css-tricks)创建,在 CodePen 上。
内联 SVG
好吧,这并不完全是 CSS,但我们喜欢 CSS-Tricks 中的 SVG。
I
<svg class="heart" viewBox="0 0 32 29.6">
<path d="M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2
c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z"/>
</svg>
You
让我们添加一个脉冲动画,仅仅是为了借此机会撒一些 CSS。
.heart {
fill: red;
position: relative;
top: 5px;
width: 50px;
animation: pulse 1s ease infinite;
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.3); }
100% { transform: scale(1); }
}
查看 CodePen 中的示例 我爱你 - SVG,由 CSS-Tricks(@css-tricks)创建,在 CodePen 上。
分享爱
毫无疑问,我们可以用更多方法来实现它。 在评论中分享您的 CodePen,我们将将其添加到 收藏集 中。
当然,祝您情人节快乐(有点迟了)!
参见 https://archive.google.com/heart/ :)
什么,没有径向和线性渐变技巧? 来吧,这很难,但可行
表情符号在评论中被剥夺了吗? :( 太伤心了
只是对这里使用 :after 和 :before 感到惊讶。 点赞 :)
哈哈,很棒的情人节文章!
如果我想为 http://carssimplified.com/ 制作一个旋转轮,有没有什么齿轮元素可以旋转在圆圈上,以产生旋转轮的效果,或者我必须使用堆叠在圆圈上的旋转矩形构建一些非常复杂的东西?
嘿,Kelli,问得好。 我可能会从 SVG 开始,然后动画化需要旋转的路径。 Icomoon 是开始使用基本 SVG 形状的好地方。
虚线边框和变换旋转怎么样?
取决于对同一个元素或 before/after 的需求吗?
所以我说的是渐变,这是我尝试使用它们的示例 :)
http://codepen.io/MaxArt2501/pen/yerNRw
这太令人印象深刻了。
太棒了!
为了更清楚起见,这只是一个概念验证。 背景渐变在圆角和抗锯齿方面非常糟糕,尤其是在 Webkit/Blink 中,它们非常糟糕。
您甚至可以在爱心的中间发现一个或两个缺失的点,或者在中间发现一条完整的线,即使组成背后的数学是正确的。
Firefox 是最擅长渐变的客户端,但仍然不完美。
收藏集中的几个塞尔达爱心:http://codepen.io/edmundojr/pen/raZgdw
情人节快乐!
我爱内联 SVG..非常感谢 <3
你好,
很棒的文章!
我根据 Twitter 的设计在 12 月份制作了自己的 CSS 爱心,并在文章中解释了它是如何实现的:https://medium.com/@OxyDesign/twitter-s-heart-animation-in-full-css-b1c00ca5b774
代码示例在 http://codepen.io/OxyDesign/pen/avXVbo 上。
如果你感兴趣,请随意添加它。
谢谢
Nicolas
棒极了!
我在 feedly 中看到了 CSS 形状的插图,甚至在阅读文章之前就急着制作自己的爱心! 很多有趣的东西。 我必须尝试一些其他技巧 :)
http://codepen.io/Rykus0/pen/xZejNm
我喜欢你使用伪圆圈元素的正方形元素来制作爱心,但我认为使用带有两个圆角的矩形和一个具有相同形状但旋转的 ::after 元素可能会看起来更好。
这是一个代码演示
http://codepen.io/mikeellisnz/pen/QyRNwg
让它看起来更像一颗心。
这个例子可以被解读为“我爱你”吗?
这个写错了 -> animation: pulse 1s ease infinite,
应该以分号结尾,而不是逗号
John Gietze 使用了一些关键帧来实现 CSS 中的窦性心律!