Более простой способ создать круг Div, чем с помощью изображения?


183

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

В настоящее время я просто делаю изображения для каждого размера, но это раздражает.

Есть ли в любом случае использование CSS для создания div, которые являются круглыми, и я могу указать радиус?


1
В каких браузерах это должно поддерживаться?
тридцать первое

Взгляните на мой ответ на этот связанный вопрос, в частности на демонстрации: stackoverflow.com/questions/4451350/…
Orbling

1
Вы также можете использовать SVG (VML), чтобы сделать круг.
jasssonpet

2
Почему вы не можете изменить ширину и высоту вашего изображения вместо того, чтобы делать разные размеры? Насколько велики эти изображения?
Мотти

Ответы:


295

Вот демо: http://jsfiddle.net/thirtydot/JJytE/1170/

CSS:

.circleBase {
    border-radius: 50%;
    behavior: url(PIE.htc); /* remove if you don't care about IE8 */
}

.type1 {
    width: 100px;
    height: 100px;
    background: yellow;
    border: 3px solid red;
}
.type2 {
    width: 50px;
    height: 50px;
    background: #ccc;
    border: 3px solid #000;
}
.type3 {
    width: 500px;
    height: 500px;
    background: aqua;
    border: 30px solid blue;
}

HTML:

<div class="circleBase type1"></div>

<div class="circleBase type2"></div><div class="circleBase type2"></div>

<div class="circleBase type3"></div>

Чтобы это работало в IE8 и старше , вы должны загрузить и использовать CSS3 PIE . Моя демонстрация выше не будет работать в IE8, но это только потому, что jsFiddle не размещается PIE.htc.

Моя демка выглядит так:


Я не могу сделать div круговой в Chrome. Это работает в Mozilla, хотя .. Мой URL-адрес chokate.maninactionscript.com/chokates нажмите на изображение пустыни или предыдущий div, показанный при масштабировании изображения не является круглой .. который в Мозилле
techie_28

1
@ techie_28: divна вашей странице есть круглая, которые вы можете увидеть , если добавить, например , border: 5px solid redк нему. Проблема в том, что части изображения, «нависающие над кругом», не скрыты. Ни один из обычных обходных путей не особенно прост в применении здесь. Я предлагаю использовать это -webkit-mask-imageсвойство для исправления браузеров WebKit (и сохранить border-radius, для других браузеров). Более подробная информация здесь: webkit.org/blog/181/css-masks . Вы также можете задать вопрос здесь о переполнении стека, чтобы узнать, есть ли у кого-нибудь еще какие-либо идеи.
тридцать пятого

1
Вы также можете сделать 100% вместо 999px.
Тони Уикхем

1
.htc больше не поддерживается.
Оливер Диксон

Интересно, как выровнять объекты (например, кнопки) внутри круглого div! : D
Зибри

26

Если установить радиус границы каждой стороны элемента равным 50%, изображение круга будет иметь любой размер:

.circle {
  border-radius: 50%;
  width: 200px;
  height: 200px; 
  /* width and height can be anything, as long as they're equal */
}

1
Это, вероятно, метод, который следует использовать сейчас (в 2017 году).
Scribblemacher

13

Попробуй это

.iphonebadge {
  border-radius:99px;
 -moz-border-radius:99px;
 -webkit-border-radius:99px;
  background:red;
  color:#fff;
  border:3px #fff solid;
  background-color: #e7676d;
  background-image: -webkit-gradient(linear, left top, left bottom, from(#e7676d), to(#b7070a)); /* Saf4+, Chrome */
  background-image: -webkit-linear-gradient(top, #e7676d, #b7070a); /* Chrome 10+, Saf5.1+, iOS 5+ */
  background-image: -moz-linear-gradient(top, #e7676d, #b7070a); /* FF3.6 */
  background-image: -ms-linear-gradient(top, #e7676d, #b7070a); /* IE10 */
  background-image: -o-linear-gradient(top, #e7676d, #b7070a); /* Opera 11.10+ */
  background-image: linear-gradient(top, #e7676d, #b7070a);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#e7676d', EndColorStr='#b7070a'); 
 -webkit-box-shadow: 0px 2px 4px #000000; /* Saf3-4 */
 -moz-box-shadow: 0px 2px 4px #000000; /* FF3.5 - 3.6 */
  box-shadow: 0px 2px 4px #000000; /* Opera 10.5, IE9, FF4+, Chrome 10+ */
  display:inline-block;
  padding:2px 2px 2px 2px ;
  margin:3px;
  font-family:arial;
  font-weight:bold;
   }

6

Это на самом деле возможно.

См. CSS Совет: Как сделать круги без изображений . Смотрите демо .

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

Посмотрите, как это работает здесь

Как вы увидите, вам просто нужно настроить heightи widthполовинуborder-radius

Удачи!


Привет, спасибо за вашу jsfiddleссылку! Эта ссылка пока единственная из ваших ответов. ;)
TooroSan

3

Также есть [плохая идея] использовать несколько (20+) горизонтальных или вертикальных 1px div для построения круга. Этот плагин jQuery использует этот метод для создания различных форм.


3

Приведите ширину и высоту в зависимости от размера, но сохраняйте оба равными

.circle {
  background-color: gray;
  height: 400px;
  width: 400px;
  border-radius: 100%;
}
<div class="circle">
</div>


3
border-radius: 50%;достаточно.
MattAllegro

3

.fa-circle{
  color: tomato;
}

div{
  font-size: 100px;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<div><i class="fa fa-circle" aria-hidden="true"></i></div>

Просто хотел бы упомянуть другое решение, которое отвечает на вопрос «Более простой способ создать круг Div, чем с помощью изображения?» который должен использовать FontAwesome.

Вы импортируете замечательный файл CSS или из CDN здесь

а потом ты просто

<div><i class="fa fa-circle" aria-hidden="true"></i></div>

и вы можете дать ему любой цвет, который вы хотите любой размер шрифта.


2

Вы можете попробовать radial-gradientфункцию CSS:

.circle {
    width: 500px;
    height: 500px;
    border-radius: 50%;
    background: #ffffff; /* Old browsers */
    background: -moz-radial-gradient(center, ellipse cover, #ffffff 17%, #ff0a0a 19%, #ff2828 40%, #000000 41%); /* FF3.6-15 */
    background: -webkit-radial-gradient(center, ellipse cover, #ffffff 17%,#ff0a0a 19%,#ff2828 40%,#000000 41%); /* Chrome10-25,Safari5.1-6 */
    background: radial-gradient(ellipse at center, #ffffff 17%,#ff0a0a 19%,#ff2828 40%,#000000 41%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
}

Примените это к divслою:

<div class="circle"></div>

2

Допустим, у вас есть это изображение:

чтобы сделать из этого круг, нужно только добавить

.circle {
  border-radius: 50%;
  width: 100px;
  height: 100px; 
}

Так что если у вас есть div, вы можете сделать то же самое.

Проверьте пример ниже:

.circle {
  border-radius: 50%;
  width: 100px;
  height: 100px; 
  animation: stackoverflow-example infinite 20s linear;
  pointer-events: none;
}

@keyframes stackoverflow-example {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}
<div>
  <img class="circle" src="https://www.sitepoint.com/wp-content/themes/sitepoint/assets/images/icon.javascript.png">
</div>




0

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

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

это работает на всех браузерах и мобильных устройствах (о которых я знаю). Я использую его на своем веб-сайте для рисования синусоидальных волн текста (www.cpixel.com). оригинальный источник этого кода находится здесь: www.mathopenref.com/coordcirclealgorithm.html

    <html>
    <head></head>
    <body>
    <script language="Javascript">

    var x_center = 50; //0 in both x_center and y_center will place the center
    var y_center = 50; // at the top left of the browser
    var resolution_step = 360; //how many times to stop along the circle to plot your character.
    var radius = 50; //how big ya want your circle?
    var plot_character = "·"; //could use any character here, try letters/words for cool effects
    var div_top_offset=10;
    var div_left_offset=10;
    var x,y;

    for ( var angle_theta = 0;  angle_theta < 2 * Math.PI;  angle_theta += 2 * Math.PI/resolution_step ){
        x = x_center + radius * Math.cos(angle_theta);
        y = y_center - radius * Math.sin(angle_theta);
        document.write("<div style='position:absolute;top:" + (y+div_top_offset) + ";left:"+ (x+div_left_offset) + "'>" + plot_character + "</div>");
    }

    </script>
    </body>
    </html>

это то, что я хочу, но это возможно, чтобы показать список кругов в панели, сохраняя правильное расстояние между кругами, как показано здесь plnkr.co/edit/KgWsnwDbgwiacGeJ7O7i?p=preview
Джинна Балу


-1

Для круга создайте элемент div, а затем введите width = 2 раза радиуса границы = 2 раза отступ. Также line-height = 0 Например, с радиусами круга 50px, приведенный ниже код работает хорошо:

width: 100px;
padding: 50px 0;
border: solid;
line-height: 0px;
border-radius: 50px;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.