Как использовать CSS для округления круга?

Я хотел бы окружить число по кругу, как на этом изображении:

Number in Circle Image

Возможно ли это и как оно достигается?

+232
источник поделиться
17 ответов

Вот демонстрация по JSFiddle и фрагмент:

.numberCircle {
    border-radius: 50%;
    width: 36px;
    height: 36px;
    padding: 8px;

    background: #fff;
    border: 2px solid #666;
    color: #666;
    text-align: center;

    font: 32px Arial, sans-serif;
}
<div class="numberCircle">30</div>

Мой ответ является хорошей отправной точкой, некоторые другие ответы обеспечивают гибкость в различных ситуациях. Если вам небезразличен IE8, посмотрите старую версию моего ответа.

+408
источник

Проблема с большинством других ответов здесь заключается в том, что вам нужно настроить размер внешнего контейнера, чтобы он был идеальным размером на основе размера шрифта и количества отображаемых символов. Если вы смешиваете 1-значный номер и 4-значный номер, это не сработает. Если соотношение между размером шрифта и размером круга не является идеальным, вы либо окажетесь овалом, либо маленьким числом, выровненным по вертикали в верхней части большого круга. Это должно работать нормально для любого количества текста и круга любого размера. Просто установите для width и line-height одно значение:

.numberCircle {
    width: 120px;
    line-height: 120px;
    border-radius: 50%;
    text-align: center;
    font-size: 32px;
    border: 2px solid #666;
}
<div class="numberCircle">1</div>
<div class="numberCircle">100</div>
<div class="numberCircle">10000</div>
<div class="numberCircle">1000000</div>

Если вам нужно сделать контент длиннее или короче, все, что вам нужно сделать, это настроить ширину контейнера для лучшей подгонки.

Посмотрите на JSFiddle.

+98
источник
другие ответы

Связанные вопросы


Похожие вопросы

Если значение 20 и ниже, вы можете просто использовать символы Unicode ① ②... ⑳

http://www.alanwood.net/unicode/enclosed_alphanumerics.html

+50
источник

Для размеров круга, изменяющихся в зависимости от содержимого, это должно работать:

http://jsfiddle.net/nzsnw55s/

<span class="numberCircle"><span>30</span></span>
<span class="numberCircle"><span>1</span></span>
<span class="numberCircle"><span>5435</span></span>
<span class="numberCircle"><span>2</span></span>
<span class="numberCircle"><span>100</span></span>

.numberCircle {
  display:inline-block;
  line-height:0px;

  border-radius:50%;
  border:2px solid;

  font-size:32px;
}

.numberCircle span {
  display:inline-block;

  padding-top:50%;
  padding-bottom:50%;

  margin-left:8px;
  margin-right:8px;
}

Он полагается на ширину содержимого плюс margin- для определения радиуса, а затем увеличивает высоту до соответствия с помощью padding-. margin- нужно будет скорректировать на основе размера шрифта.

Обновление для удаления внутреннего элемента:

<span class="numberCircle">30</span>
<span class="numberCircle">1</span>
<span class="numberCircle">5435</span>
<span class="numberCircle">2</span>
<span class="numberCircle">100</span>

<style type="text/css">
.numberCircle {
    display:inline-block;

    border-radius:50%;
    border:2px solid;

    font-size:32px;
}

.numberCircle:before,
.numberCircle:after {
    content:'\200B';
    display:inline-block;
    line-height:0px;

    padding-top:50%;
    padding-bottom:50%;
}

.numberCircle:before {
    padding-left:8px;
}
.numberCircle:after {
    padding-right:8px;
}
</style>

Использует псевдоэлементы, чтобы заставить высоту. Нужно пространство нулевой ширины для вертикального выравнивания. Перемещено line-height:0px из внешнего в псевдоопределение, чтобы оно было, по крайней мере, видимым при унижении для IE8.

+39
источник

Самый простой способ - использовать класс начальной загрузки и значка

 <span class="badge">1</span>
+21
источник

Эта версия не полагается на жестко заданные фиксированные значения, но размеры относительно font-size div.

http://jsfiddle.net/qod1vstv/

введите описание изображения здесь

CSS

.numberCircle {
    font: 32px Arial, sans-serif;

    width: 2em;
    height: 2em;
    box-sizing: initial;

    background: #fff;
    border: 0.1em solid #666;
    color: #666;
    text-align: center;
    border-radius: 50%;    

    line-height: 2em;
    box-sizing: content-box;   
}

HTML:

<div class="numberCircle">30</div>
<div class="numberCircle" style="font-size: 60px">1</div>
<div class="numberCircle" style="font-size: 12px">2</div>
+16
источник

Вы можете использовать радиус границы для этого:

<html>
  <head>
    <style type="text/css">

    .round
    {
        -moz-border-radius: 15px;
        border-radius: 15px;
        padding: 5px;
        border: 1px solid #000;
    }

  </style>
  </head>  
  <body>   
    <span class="round">30</span>
  </body>
</html>  

Играйте с радиусом границы и значениями заполнения, пока вы не удовлетворены результатом.

Но это не будет работать во всех браузерах. Я думаю, что IE все еще не поддерживает закругленные углы.

+8
источник

Мое решение здесь - это легко позволяет использовать различные размеры и цвета и связи в CMS для редактирования. Для IE ухудшается до квадратов.

HTML

<div class="circular-label label-outer label-size-large label-color-pink">
    <div class="label-inner"> 
        <span>Fashion & Beauty</span>
    </div>
</div>

CSS

.circular-label {
    overflow: hidden;
    z-index: 100;
    vertical-align: middle;
    font-size: 11px;
    -webkit-box-shadow:0 3px 3px rgba(0, 0, 0, 0.2);
    -moz-box-shadow:0 3px 3px rgba(0, 0, 0, 0.2);
    box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.2);
}
.label-inner {
    width: 85%;
    height: 85%;
    -moz-border-radius: 50%;
    -webkit-border-radius: 50%;
    border-radius: 50%;
    border: 2px dotted white;
    vertical-align: middle;
    margin: auto;
    top: 5%;
    position: relative;
    overflow: hidden;
}
.label-inner > span {
    display: table;
    text-align: center;
    vertical-align: middle;
    font-weight: bold;
    text-transform: uppercase;
    width: 100%;
    position: absolute;
    margin: auto;
    margin-top: 38%;
    font-family:'ProximaNovaLtSemibold';
    font-size: 13px;
    line-height: 1.0em;
}
.circular-label.label-size-large {
    width: 110px;
    height: 110px;
    -moz-border-radius: 55px;
    -webkit-border-radius: 55px;
    border-radius: 55px;
    margin-top:-55px;
}
.circular-label.label-size-med {
    width: 76px;
    height: 76px;
    -moz-border-radius: 38px;
    -webkit-border-radius: 38px;
    border-radius: 38px;
    margin-top:-38px;
}
.circular-label.label-size-med .label-inner > span {
    margin-top: 33%;
}
.circular-label.label-size-small {
    width: 66px;
    height: 66px;
    -moz-border-radius: 33px;
    -webkit-border-radius: 33px;
    border-radius: 33px;
    margin-top:-33px;
}

Не слишком сложно понять, как это сделать. Большой вопрос заключается в том, можно ли сделать размеры шкалы круга до содержания.

В настоящее время я не думаю, что это возможно. Кто-нибудь?

+4
источник

Вы работаете как со стандартным блоком, то есть квадратом

.circle {
    width: 10em; height: 10em; 
    -webkit-border-radius: 5em; -moz-border-radius: 5em;
  }

Это функция CSS 3, и она не очень хорошо оптимизирована, вы можете наверняка рассчитывать на Firefox и Safari.

<div class="circle"><span>1234</span></div>
+2
источник

Сделайте что-нибудь подобное в своем CSS

 div {
    width: 10em; height: 10em; 
    -webkit-border-radius: 5em; -moz-border-radius: 5em;
  }
  p {
    text-align: center; margin-top: 4.5em;
  }

Используйте тег абзаца для записи текста. Надеюсь, что поможет

+1
источник

Что-то вроде того, что я сделал здесь мог работать (для чисел от 0 до 99):

CSS:

.circle {
    border: 0.1em solid grey;
    border-radius: 100%;
    height: 2em;
    width: 2em;
    text-align: center;
}

.circle p {
    margin-top: 0.10em;
    font-size: 1.5em;
    font-weight: bold;
    font-family: sans-serif;
    color: grey;
}

HTML:

<body>
    <div class="circle"><p>30</p></div>
</body>
+1
источник

Улучшение первого ответа просто избавит от заполнения и добавит line-height и vertical-align:

.numberCircle {
   border-radius: 50%;       

   width: 36px;
   height: 36px;
   line-height: 36px;
   vertical-align:middle;

   background: #fff;
   border: 2px solid #666;
   color: #666;

   text-align: center;
   font: 32px Arial, sans-serif;
}
+1
источник

Пример HTML

<h3><span class="numberCircle">1</span> Regiones del Interior</h3>

КОД

    .numberCircle { 

    border-radius:50%;
    width:40px;
    height:40px;
    display:block;
    float:left;
    border:2px solid #000000;
    color:#000000;
    text-align:center;
    margin-right:5px;

}
+1
источник

Поздно на вечеринку, но вот решение для начальной загрузки, которое сработало для меня. Я использую Bootstrap 4:

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>

<body>
<div class="row mt-4">
<div class="col-md-12">
<span class="bg-dark text-white rounded-circle px-3 py-1 mx-2 h3">1</span>
<span class="bg-dark text-white rounded-circle px-3 py-1 mx-2 h3">2</span>
<span class="bg-dark text-white rounded-circle px-3 py-1 mx-2 h3">3</span>
</div>
</div>
</body>

Вы в основном добавляете bg-dark text-white rounded-circle px-3 py-1 mx-2 h3 к своему элементу <span> (или какому-либо другому), и все готово.

Обратите внимание, что вам может понадобиться настроить поля margin и padding, если ваш контент содержит более одной цифры.

+1
источник

Вот мой способ сделать это, используя квадратный метод. плюс это работает с разными значениями, но вам нужно 2 пролета.

.circle {
  display: inline-block;
  border: 1px solid black;
  border-radius: 50%;
  position: relative;
  padding: 5px;
}
.circle::after {
  content: '';
  display: block;
  padding-bottom: 100%;
  height: 0;
  opacity: 0;
}
.num {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}
.width_holder {
  display: block;
  height: 0;
  overflow: hidden;
}
<div class="circle">
  <span class="width_holder">1</span>
  <span class="num">1</span>
</div>
<div class="circle">
  <span class="width_holder">11</span>
  <span class="num">11</span>
</div>
<div class="circle">
  <span class="width_holder">11111</span>
  <span class="num">11111</span>
</div>
<div class="circle">
  <span class="width_holder">11111111</span>
  <span class="num">11111111</span>
</div>
+1
источник

Поздно на вечеринку, но здесь решение я пошел с https://codepen.io/jnbruno/pen/vNpPpW

Css:

.btn-circle.btn-xl {
    width: 70px;
    height: 70px;
    padding: 10px 16px;
    border-radius: 35px;
    font-size: 24px;
    line-height: 1.33;
}

.btn-circle {
    width: 30px;
    height: 30px;
    padding: 6px 0px;
    border-radius: 15px;
    text-align: center;
    font-size: 12px;
    line-height: 1.42857;
}

HTML:

<div class="panel-body">
                            <h4>Normal Circle Buttons</h4>
                            <button type="button" class="btn btn-default btn-circle"><i class="fa fa-check"></i>
                            </button>
                            <button type="button" class="btn btn-primary btn-circle"><i class="fa fa-list"></i>
                            </button>
</div>

Требуется без дополнительной работы. Спасибо Джон Ноэль Бруно

+1
источник

Ответ на тридцать прав, но отсутствует небольшая точка. Вам нужно добавить позицию: относительный, если вы хотите иметь центрированное значение в круге и включить также различный диапазон числа. Например, 123;

HTML:

<div class="numberCircle">30</div>

CSS

.numberCircle {    

border-radius: 50%;
behavior: url(PIE.htc); /* remove if you don't care about IE8 */
width: 36px;
height: 36px;
padding: 8px;
position: relative;
background: #fff;
border: 2px solid #666;
color: #666;
text-align: center;

font: 32px Arial, sans-serif;
}

но самым простым решением является использование Bootstrap

<span class="badge" style ="float:right">123</span>

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос