Circle div oluşturmanın bir resim kullanmaktan daha kolay bir yolu var mı?


183

Dairesel div oluşturmanın şimdi yaptığımdan daha kolay bir yolu olup olmadığını merak ediyorum.

Şu anda, her farklı boyut için bir resim yapıyorum, ancak bunu yapmak can sıkıcı.

Dairesel olan div yapmak için CSS kullanarak yine de var mı ve yarıçapı belirtebilir miyim?


1
Bu hangi tarayıcılarda desteklenmelidir?
otuzdot

Bu ilgili soruya cevabımı bir göz atın, özellikle demolar: stackoverflow.com/questions/4451350/…
Orbling

1
Ayrıca bir daire oluşturmak için SVG'yi (VML) de kullanabilirsiniz.
jasssonpet

2
Neden farklı boyutlar yapmak yerine resminizin genişliğini ve yüksekliğini yeniden boyutlandıramıyorsunuz? Bu görüntüler ne kadar büyük?
Mottie

Yanıtlar:


295

İşte bir demo: 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>

Bu IE8 ve daha eski sürümlerde çalışması için , CSS3 PIE'yi indirmeli ve kullanmalısınız . Yukarıdaki demomuz IE8'de çalışmaz, ancak bunun nedeni yalnızca jsFiddle'ın barındırmamasıdır PIE.htc.

Demom şöyle görünüyor:


Ben krom dairesel div yapamaz. Mozilla çalışır ama benim url chokate.maninactionscript.com/chokates tıklayın çöl görüntüsü veya önceki bir görüntü yakınlaştırma üzerinde gösterilen div dairesel değil .. hangi Mozilla'da.
techie_28

1
@ techie_28: divsayfanızda olduğunu sen mesela eklerseniz, görebileceğiniz, yuvarlak border: 5px solid redbuna. Sorun şu ki, görüntünün "dairenin üzerine taşan" kısımları gizlenmiyor. Her zamanki geçici çözümlerin hiçbirini burada uygulamak kolay değildir .. -webkit-mask-imageWebKit tarayıcılarını düzeltmek için özelliği kullanmanızı öneririz (ve border-radiusdiğer tarayıcılar için saklayın ). Daha fazla bilgi için: webkit.org/blog/181/css-masks . Burada başka birinin başka fikirleri olup olmadığını görmek için burada Stack Overflow ile ilgili bir soru sormayı da düşünebilirsiniz.
thirtydot

1
999 piksel yerine% 100 de yapabilirsiniz.
Tony Wickham

1
.htc artık desteklenmemektedir.
Oliver Dixon

Yuvarlak bir div içindeki nesnelerin (düğmeler gibi) nasıl hizalanacağını merak ediyorum! : D
Zibri

26

Bir öğenin her bir kenarının kenar yarıçapını% 50 olarak ayarlamak, herhangi bir boyutta daire görüntüsünü oluşturur:

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

1
Muhtemelen şu anda kullanılması gereken yöntemdir (2017'de).
Scribblemacher

13

Bunu dene

.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

Aslında mümkün.

Bakınız: CSS İpucu: Resimler Olmadan Çevreler Oluşturma . Demoya bakınız .

Ancak uyarılmalıdır, Temel olarak uyumluluk açısından ciddi dezavantajları vardır, bir kedi kabuğu yapıyorsunuz.

Burada çalıştığını görün

Size sadece yukarı setine sahip göreceğimiz gibi heightve widthyarımborder-radius

İyi şanslar!


Merhaba, jsfiddlebağlantınız için teşekkürler ! Bu bağlantı şimdilik cevabınızdan çalışan tek bağlantıdır. ;)
TooroSan

3

Ayrıca, bir daire oluşturmak için birkaç (20+) yatay veya dikey 1 piksel div kullanmanın [kötü fikri] vardır. Bu jQuery eklentisi , farklı şekiller oluşturmak için bu yöntemi kullanır.


3

Boyuta bağlı olarak genişlik ve yükseklik verin, ancak her ikisini de eşit tutun

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


3
border-radius: 50%;yeterlidir.
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>

Sadece "Bir görüntü kullanmaktan daha kolay div div oluşturmak için daha kolay bir yol?" hangi FontAwesome kullanmaktır.

Fontawesome css dosyasını veya CDN'den buraya aktarıyorsunuz

ve sonra sadece:

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

ve herhangi bir yazı tipi boyutu istediğiniz herhangi bir renk verebilirsiniz.


2

radial-gradientCSS işlevini deneyebilirsiniz :

.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+ */
}

Bir divkatmana uygulayın :

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

2

Diyelim ki bu resme sahipsin:

bundan bir daire oluşturmak için sadece eklemeniz gerekir

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

Eğer bir div'iniz varsa aynı şeyi yapabilirsiniz.

Aşağıdaki örneği kontrol edin:

.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>


1

Yarıçap kullanabilirsiniz, ancak IE: üzerinde çalışmaz border-radius: 5px 5px;.


1

.circle {
	height: 20rem;
	width: 20rem;
	border-radius: 50%;
	background-color: #EF6A6A;
}
<div class="circle"></div>


0

temelde bu, verilen koordinatlara bir karakter yerleştirmek için div'ın mutlak konumunu kullanır. bir daire için parametrik denklemi kullanarak bir daire çizebilirsiniz. div'ın konumunu göreceli olarak değiştirirseniz, sinüs dalgasına neden olur ...

özünde, position özelliğini kötüye kullanarak denklemleri grafiklendiriyoruz. Ben css iyi usta değilim, böylece birisi kesinlikle bu daha zarif yapabilirsiniz. zevk almak.

Bu, tüm tarayıcılarda ve mobil cihazlarda (farkında olduğum) çalışır. i kendi web sitesinde metin sinüs dalgaları (www.cpixel.com) çizmek için kullanın. bu kodun orijinal kaynağı burada bulunur: 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>

Bu ne istediğimi, ama burada gösterildiği gibi çevreler arasındaki uygun mesafeyi koruyarak panelin içindeki çevrelerin gösterisi listesine bu mümkün plnkr.co/edit/KgWsnwDbgwiacGeJ7O7i?p=preview
Jinna Balu


-1

Daire için bir div öğesi oluşturun ve sonra width = kenarlık yarıçapının 2 katı = 2 defa dolgu girin. Ayrıca satır yüksekliği = 0 Örneğin, dairenin yarıçapı olarak 50 piksel olduğunda, aşağıdaki kod iyi çalışır:

width: 100px;
padding: 50px 0;
border: solid;
line-height: 0px;
border-radius: 50px;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.