如何使用CSS将数字圈起来?
我想将一个数字围成一个圆圈,如下图所示:
这可能吗?它是如何实现的达到了?
I would like to surround a number in a circle like in this image:
Is this possible and how is it achieved?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(20)
这是 JSFiddle 上的演示 和一个片段:
我的答案是一个很好的起点,其他一些答案为不同情况提供了灵活性。如果您关心 IE8,请查看我的答案的旧版本。
Here's a demo on JSFiddle and a snippet:
My answer is a good starting point, some of the other answers provide flexibility for different situations. If you care about IE8, look at the old version of my answer.
这里大多数其他答案的问题是您需要调整外部容器的大小,以便根据要显示的字体大小和字符数达到完美的大小。如果混合 1 位数字和 4 位数字,则不起作用。如果字体大小和圆圈大小之间的比例不完美,您最终会得到一个椭圆形或一个小数字垂直对齐在大圆圈的顶部。
我们需要一个能够适用于任何数量的文本和任何大小的圆圈的解决方案。
解决方案 1:静态宽度
只需将
宽度
设置为略大于您预期的最大字符数即可。在这里,我使用了ch
单位,它是0
字符的宽度。由于最大字符数为 7,我选择了8ch
(但是em
、px
等单位也可以正常工作):解决方案 2:可变宽度
以下解决方案将使圆圈的大小略大于文本的宽度:
The problem with most of the other answers here is you need to tweak the size of the outer container so that it is the perfect size based on the font size and number of characters to be displayed. If you are mixing 1 digit numbers and 4 digit numbers, it won't work. If the ratio between the font size and the circle size isn't perfect, you'll either end up with an oval or a small number vertically aligned at the top of a large circle.
We need a solution that will work fine for any amount of text and any size circle.
Solution 1: Static widths
Just set the
width
to be something slightly larger than the maximum number of characters you anticipate. Here, I've usedch
units, which is the width of the0
character. Since the maximum number of characters is 7, I chose8ch
(howeverem
,px
, etc units will work just fine too):Solution 2: Variable widths
The following solution will make the size of the circle be slightly larger than the width of the text:
对于根据内容变化的圆圈大小,这应该有效:
它依靠内容的宽度加上
margin-
来确定半径,然后使用padding-
扩展高度以匹配。margin-
需要根据字体大小进行调整。更新以删除内部元素:
使用伪元素强制高度。需要零宽度空间进行垂直对齐。将
line-height:0px
从外部移至伪,以便在 IE8 降级时它至少可见。For circle sizes varying based on the content this should work:
It relies on the width of the content plus the
margin-
's to determine the radius, then extends the height to match using thepadding-
's. Themargin-
's would need to be adjusted based on the font-size.Update to remove inner element:
Uses pseudo-elements to force the height. Need the zero width space for vertical alignment. Moved the
line-height:0px
from the outer to the pseudo so that it is at least visible when degrading for IE8.如果是 20 及以下,则可以仅使用 unicode 字符 ① ② ... ⑳
http:// www.alanwood.net/unicode/enheld_alphanumerics.html
If it's 20 and lower, you can just use the unicode characters ① ② ... ⑳
http://www.alanwood.net/unicode/enclosed_alphanumerics.html
最简单的方法是使用引导程序和徽章类
the easiest way is using bootstrap and badge class
此版本不依赖于硬编码的固定值,而是依赖于相对于
div
的font-size
的大小。http://jsfiddle.net/qod1vstv/
CSS:
HTML:
This version does not rely on hard-coded, fixed values but sizes relative to the
font-size
of thediv
.http://jsfiddle.net/qod1vstv/
CSS:
HTML:
您可以使用边框半径来实现此目的:
使用边框半径和填充值,直到您对结果感到满意为止。
但这并不适用于所有浏览器。我猜IE还是不支持圆角。
You can use the border-radius for this:
Play with the border radius and the padding values until you are satisfied with the result.
But this won't work in all browsers. I guess IE still does not support rounded corners.
我很惊讶没有人使用更容易理解的
flex
,所以我把我的答案版本放在这里:width
等于height
font-size
,请使用em
而不是px
justify-content: center; align-items: center;
宽度
和高度
下面是一个示例:
I am surprised nobody used
flex
which is easier to understand, so I put my version of answer here:width
equalsheight
font-size
of number in the circle, useem
rather thanpx
justify-content: center; align-items: center;
width
andheight
at same timeHere is an example:
聚会迟到了,但这里有一个对我有用的仅引导解决方案。我正在使用 Bootstrap 4:
您基本上将
bg-dark text-white rounded-circle px-3 py-1 mx-2 h3
类添加到您的(或其他)元素中,然后您完成了。
请注意,如果您的内容超过一位数字,您可能需要调整边距和填充类。
Late to the party, but here is a bootstrap-only solution that has worked for me. I'm using Bootstrap 4:
You basically add
bg-dark text-white rounded-circle px-3 py-1 mx-2 h3
classes to your<span>
(or whatever) element and you're done.Note that you might need to adjust margin and padding classes if your content has more than one digits.
我的解决方案在这里 - 这很容易允许不同的尺寸和颜色,并连接到 CMS 中以进行编辑控制。对于 IE 降级为正方形。
HTML:
CSS:
了解如何执行此操作并不难。更大的问题是是否有可能使圆圈的尺寸适应内容。
目前我认为不可能。有人吗?
My solution here - this easily allows for different sizes and colors and ties into a CMS for editorial control. For IE degrading to squares.
HTML:
CSS:
It's not too difficult to see how to do this. The bigger question is whether it is possible to make the dimensions of the circle scale to content.
Currently I don't think it is possible. Anyone?
这是一个 JSFiddle 上的演示和一个片段:
Here's a demo on JSFiddle and a snippet:
在你的CSS中做类似的事情
使用段落标签来编写文本。希望有帮助
Do something like this in your css
Use the paragraph tag to write the text. Hope that helps
改进第一个答案只需去掉填充并添加
line-height
和vertical-align
:Improving the first answer just get rid of the padding and add
line-height
andvertical-align
:三十点的答案是正确的,但缺少一点。如果您希望在圆中具有居中值并还包含不同范围的数字,则需要添加 position:relative 。
例如123;
HTML:
CSS:
但最简单的解决方案是使用 Bootstrap
123
The answer of thirtydot is right but is missing a little point. You need to add position: relative , if you want to have centered value in the circle and include also different range of number.
For example 123;
HTML:
CSS:
but an easiest solution is to use Bootstrap
<span class="badge" style ="float:right">123</span>
这是我的方法,使用平方法。优点是它适用于不同的值,但您需要 2 个跨度。
Heres my way of doing it, using square method. upside is it works with different values, but you need 2 spans.
聚会迟到了,但这是我使用的解决方案 https://codepen.io/jnbruno/pen/vNpPpW
不需要额外的工作。
谢谢约翰·诺埃尔·布鲁诺
Late to the party but here's the solution I went with https://codepen.io/jnbruno/pen/vNpPpW
Required no extra work.
Thanks John Noel Bruno
像这样的东西可以工作(对于数字 0 到 99):
Something like this could work (for numbers 0 to 99):
您可以使用
感谢 https://wpsites.net/web -design/colored-numbered-circles-using-pure-css-html/
You can use
Thank to https://wpsites.net/web-design/colored-numbered-circles-using-pure-css-html/
你就像使用一个标准块一样工作,即一个正方形,
这是 CSS 3 的功能,但它没有得到很好的支持,你可以肯定地依靠 firefox 和 safari。
You work like with a standard block, that is a square
This is feature of CSS 3 and it is not very well suporrted, you can count on firefox and safari for sure.