百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

用 CSS 代码绘制 16 种基本图形

qiyuwang 2024-11-20 20:46 15 浏览 0 评论

你是否想要在你的网页设计中添加一些有趣的图形元素,但又不想使用复杂的图片素材?别担心,CSS 可以轻松地帮你实现!

这篇文章将带你一步步学习用 CSS 代码绘制 16 种常见图形,从简单的矩形、圆形到复杂的星形、月亮,甚至还有逼真的飞溅效果,让你掌握用 CSS 代码绘制图形的技巧,为你的网页增添更多创意和个性。

矩形

HTML 中的元素默认都是矩形,因此绘制矩形非常简单,只需要指定宽度和高度即可。如果遇到问题,可以尝试使用内联元素、块级元素或内联块级元素,一般都能解决。

.rectangle {
  width: 500px;
  height: 300px;
  background: black;
}

正方形

正方形是宽高相等的矩形。我们可以直接修改矩形的代码,将高度设置为与宽度相同的值:

.square {
  width: 300px;
  height: 300px;
  background: black;
}

这样也能实现正方形。但是,如果我们要改变正方形的大小,就需要同时修改宽度和高度两个值。虽然不算很麻烦,但 CSS 提供了 aspect-ratio 属性,可以更方便地控制宽高比例。将 aspect-ratio 设置为 1(或 1/1)就可以得到一个正方形。而且现在只需要修改一行代码就可以改变大小了:

.square {
  width: 300px;
  aspect-ratio: 1;
  background: black;
}

圆形

从正方形出发,我们可以通过设置圆角来绘制圆形。使用 border-radius 属性,并将值设置为一个较大的百分比(50% 或更高)即可。非常简单!

.circle {
  width: 300px;
  aspect-ratio: 1;
  background: black;
  border-radius: 50%;
}

椭圆形

椭圆形和圆形类似,都是圆角形状,但不同于圆形的是,椭圆形基于矩形而不是正方形。(当然,椭圆形还有更精确的数学定义,但这里为了简单起见,我们只用这种比较通俗的描述)。因此,我们只需要在矩形的基础上添加 border-radius 属性即可。

.ellipse {
  width: 300px;
  height: 400px;
  background: black;
  border-radius: 50%;
}

椭圆/卵形

椭圆和卵形并不完全一样。虽然有关于内部圆形是否交叉的技术定义,但为了简单起见,我们认为卵形类似于鸡蛋形状。我们可以通过 border-radius 属性的两个值来实现这种形状。是的,border-radius 属性有两个值集,每个值集最多可以包含四个值:水平半径和垂直半径,用斜杠 (/) 分隔。

我们将水平半径设置为 100%,然后为顶部角设置更大的垂直半径值,为底部角设置更小的垂直半径值。例如:

.oval {
  width: 300px;
  height: 400px;
  background: black;
  border-radius: 100% / 120% 120% 75% 75%;
}

具体的值会根据矩形的大小而有所不同。如果值过大,顶部可能会变平,如果值过小,底部可能会变平。你需要根据自己的需求调整这些数值。

钟形

钟形是一种夸张的卵形,其中一侧长而圆,另一侧扁平(但仍然有柔和的曲线)。要得到这种形状,只需要将卵形的较大值设置得更大,较小的值设置得更小即可。

在使用 CSS 绘制艺术作品时,这种形状可以用来绘制身体甚至面部(只需稍微调整一下半径值)。

.bell {
  width: 300px;
  height: 400px;
  background: black;
  border-radius: 100% / 160% 160% 25% 25%;
}

拱形

拱形与椭圆形和钟形略有不同,它底部扁平,顶部弯曲。绘制拱形不需要调整数值,只需要将 border-radius 属性设置为固定值即可:

.arch {
  width: 300px;
  height: 400px;
  background: black;
  border-radius: 50% / 100% 100% 0% 0%;
}

如果元素的宽度是高度的两倍,那么我们就会得到一个半圆而不是拱形。

眼睛

这是三个需要稍微旋转的形状中的第一个。我们从一个正方形开始,然后设置两个相对角的圆角,而另外两个角保持为零。我通常从左上角开始,并添加 45 度旋转,但你也可以选择其他任何角并相应地调整旋转角度。

.tear {
  width: 300px;
  aspect-ratio: 1;
  background: black;
  rotate: 45deg;
  border-radius: 80% 0;
}

你可以使用 rotate: 45deg 属性或 transform: rotate(45deg) 属性。两者都可以正常工作。至于 border-radius,数值越高,眼睛的弧度越柔和(重复数值可以让一侧比另一侧更高:80% 0 100% 0)。

泪滴

有趣的是,泪滴形状是眼睛形状的变体。代码相同,只是更改了 border-radius:将三个半径值设为最大值以得到圆形,并将最后一个角的半径设为零以得到一个尖端。

.tear {
  width: 300px;
  aspect-ratio: 1;
  background: black;
  rotate: 45deg;
  border-radius: 0 50% 50% 50%;
}

心形

绘制心形与之前的形状略有不同,它将使用元素和 ::before 和 ::after 伪元素。我们从一个正方形开始,将其旋转 45 度,然后添加伪元素作为圆形(如上所述)。我们将一个伪元素水平平移,另一个伪元素垂直平移(由于元素旋转,两者看起来都会斜向平移),这样就完成了。代码看起来可能比较复杂,但原理很简单。

.heart {
  width: 300px;
  aspect-ratio: 1;
  background: black;
  rotate: 45deg;
  position: relative;
}

.heart::before,
.heart::after {
  content: "";
  position: absolute;
  width: 100%;
  aspect-ratio: 1;
  border-radius: 50%;
  background: inherit;
  translate: -50% 0;
}

.heart::after {
  translate: 0 -50%;
}

三角形

许多在线文章讨论了如何使用边框、零高度/宽度和一些透明颜色来绘制三角形。我强烈反对这种方法。虽然这种方法可以工作,但它已经过时,而且如果我们想要灵活性和响应性,它可能会很麻烦。(如果你想知道原因,我写了一篇文章,介绍了用 CSS 绘制三角形的不同方法及其优缺点)。

我建议使用 clip-path 来绘制三角形以及以下一些多边形形状。使用 clip-path,我们可以指定一个路径(可以使用多边形、图像、实际路径等),来定义一个形状。路径之外的所有内容都会被裁剪掉。对于三角形,我们只需要三个点。

.triangle {
  width: 300px;
  height: 300px;
  background: black;
  clip-path: polygon(50% 0, 100% 100%, 0 100%);
}

梯形

另一个多边形。可以使用 clip-path 中的 polygon() 函数轻松创建。在本例中,我们将从一个矩形或正方形开始,需要四个点:底部的两个点位于角点,顶部的两个点位于内部。这样就完成了!

.trapezoid {
  width: 400px;
  height: 300px;
  background: black;
  clip-path: polygon(20% 0, 80% 0, 100% 100%, 0 100%);
}

八边形

我绘制了八边形,因为它很容易绘制(不需要计算任何东西或使用三角函数)。好消息是,clip-path/polygon() 方法可以扩展到任何多边形形状。

在本文中,我简化了点的位置,以避免它们占据整个屏幕;实际上,我们需要使用一些小数来得到一个八边形:

.octagon {
  width: 300px;
  height: 300px;
  background: black;
  clip-path: polygon(16.66% 16.66%, 50% 0, 83.33% 16.66%, 100% 50%,
                     83.33% 83.33%, 50% 100%, 16.66% 83.33%, 0 50%);
}

星形

星形是八边形的变体。唯一的区别是四个点的定位。在八边形中,它们位于外部;在星形中,它们位于内部(想象一个旋转的正方形)。

.spark {
  width: 300px;
  aspect-ratio: 1;
  background: black;
  clip-path: polygon(40% 40%, 50% 0, 60% 40%, 100% 50%,
                     60% 60%, 50% 100%, 40% 60%, 0 50%);
}

为了获得更酷的效果,可以将形状应用于 ::before 和 ::after 伪元素,而不是元素本身。然后将其中一个旋转 45 度(如果将旋转应用于 ::before,效果会更好看)。

月亮

月亮可以有很多形状。我们所说的月亮形状,指的是月牙形(或残月形)。我们可以通过从圆形开始并应用 box-shadow 来快速实现这种形状。box-shadow 允许五个值:水平偏移、垂直偏移、模糊度(可选)、缩放(可选)和颜色(可选,默认值为文本颜色)。根据我们想要的是月牙形还是残月形,我们会向右或向左添加一个大阴影。

.moon {
  width: 300px;
  aspect-ratio: 1;
  border-radius: 50%;
  box-shadow: -90px 0 0 80px black;
}

作为另一种实现方法,我建议使用遮罩而不是阴影。这是因为使用遮罩实现,月亮的绘制会清晰地定义在页面流中,因为它与用于绘制它的元素大小相匹配(我们可以使用内阴影来避免这个问题)。此外,遮罩比阴影更灵活。

.moon {
  width: 300px;
  aspect-ratio: 1;
  border-radius: 50%;
  -webkit-mask: radial-gradient(circle at 75% 50%, #0000 33%, #000 0);
}

污点/飞溅

这种形状比列表中的其他形状都更复杂。想法是使用重复的圆锥渐变,并应用滤镜使它们看起来更平滑。

你可以通过改变背景数量或大小来实现许多不同形状的这种效果。尝试一下,找到你最喜欢的形状。

.stain {
  width: 300px;
  height: 300px;
  background:
    repeating-conic-gradient(#000 0 3%, #0000 0 11%),
    repeating-conic-gradient(#0000 0 5%, #000 0 7%) 50% / 60% 60%,
    repeating-conic-gradient(#0000 0 7%, #000 0 9%) 50% / 70% 70%,
    repeating-conic-gradient(#0000 0 11%, #000 0 13%) 50% / 80% 80%,
    radial-gradient(#000 22%, #0000 0),
    #fff;
  mix-blend-mode: darken;
  filter: blur(10px) contrast(100) brightness(1)  grayscale(1);
  box-shadow: 0 0 0 50px #fff;
}

希望这篇文章能够帮助你学习用 CSS 代码绘制各种图形,并为你的网页设计增添更多乐趣和创意。如果你还有其他问题或想尝试更复杂的图形,欢迎在评论区留言,一起交流探索 CSS 的无限可能!

相关推荐

在Word中分栏设置页码一页两个页码的技巧!

施老师:在正常情况下,Word文档中一页只会出现一个页码。但在某种情况下,比如说:用了分栏后,我们希望一页中出现两个页码,那应该如何实现呢?今天,就由宁双学好网施老师来为大家讲一下,利用域来实现一页两...

如何在关键时刻向上自荐(如何在关键时刻做出正确选择)

抓住机会,挺身而出有种时刻叫“关键时刻”,关键时刻,作为一个认为自己有能力的、训练有素的人,应该考虑挺身而出,甚至应该不考虑就挺身而出。...

WPS Word:跨页的文档表格,快速调整为一页。#Excel

如何快速将跨页的文档表格调整为一页?需要根据两种情况分别处理。如果表格所有行的行高相同,调整为一页的方法有两种。第一种方法是将光标移动到表格内,然后将鼠标移动到表格右下角的方框处,按住鼠标左键向上拖动...

word文档插入下一页分节符(word下一页分页符)

在word文档中,对文档页面进行分页是特别常见的操作,其中的下一页分节符也是用得比较多的,但是一些人不太清楚在哪里设置,也不知道它具体能实现的功能是什么。接下来看看如何在word文档中插入下一页分节符...

word文档如何设置某一页纸张的方向

word文档页面方向有横向和纵向,纵向是默认的纸张方向,有时我们需要将页面设置为横向,或只设置其中某一页方向,应该怎么操作呢?一起来看看下面的详细介绍第一步:...

word怎么单独设置一页为横向(word2019怎样设置单独一页为横向)

word里面其中一页可以改为横向的吗?经过实际操作发现是完全可以的。...

Word如何设置分栏,如何一页内容同时显示一栏和两栏

我们使用Word文档,有时需要用到两栏的排版,甚至一页内容同时包含一栏和两栏的排版,这种格式怎么设置呢?具体步骤如下:首先是两栏排版的设置,直接点击Word文件上方工具栏【布局】,选择【分栏】下面的【...

Word怎么分页?这三个方法可以帮到你

我们不仅可以利用Word编辑文档,还可以编辑文集呢。但是有时候会出现两个部分的文章长短不一,我们需要对文档进行分页处理。这样可以方便我们对文档进行其他操作。那么Word怎么分页呢?大家可以采用下面这...

Word内容稍超一页,如何优化至单页打印?

如何将两页纸的内容,缩到一页打印呢?有时候一页纸多一点内容,我们完全可以缩一下,放到一页来打印。...

[word] word 表格如何跨行显示表头、标题

word表格如何跨行显示表头、标题在Word中的表格如果过长的话,会跨行显示在另一页,如果想要在其它页面上也显示表头,更直观的查看数据。难道要一个个复制表头吗?当然不是,教你简单的方法操作设置Wo...

Word表格跨页如何续上表?(word如何让表格跨页不断掉)

长文档的表格跨页时,你会发现页末空白太多了,这时要怎么调整?选中整张表格,右击【表格属性】,点击【行】选项,之后勾选【允许跨页断行】,点击确定即可解决空白问题。...

Word怎么连续自动生成页码,操作步骤来了!

Word怎么连续自动生成页码,操作步骤来了!...

word文档怎么把两页合并成一页内容?教你4种方法

word怎么把两页合并成一页?word怎么把两页合并成一页?用四种方法演示一下。·方法一:把这一个文档合并成一页,按ctrl加a全选文档,然后右键点击段落,弹出的界面行距改成固定值,磅值可以改小一点,...

如何将Word中的一页的纸张方向设置为横向?这里提供详细步骤

默认情况下,MicrosoftWord将页面定向为纵向视图。虽然这在大多数情况下都很好,但你可能拥有在横向视图中看起来更好的页面或页面组。以下是实现这一目标的两种方法。无论使用哪种方法,请注意,如果...

Word横竖混排你会玩吗?(word横排竖排混合)

我们在用Word排版的时候,一般都是竖版格式,但偶尔会需要到一些特殊的版式要求,比如文档中插入的一个表格,横向的内容比较多,这时就需要用到横版,否则表格显示不全。这种横竖版混排的要求,在Word20...

取消回复欢迎 发表评论: