Einfachere Möglichkeit, Kreisdiv zu erstellen, als ein Bild zu verwenden?

183

Ich frage mich, ob es einen einfacheren Weg gibt, kreisförmige Divs zu erstellen, als das, was ich jetzt mache.

Momentan mache ich nur ein Bild für jede Größe, aber es ist ärgerlich, dies zu tun.

Gibt es überhaupt CSS, um kreisförmige Divs zu erstellen, und ich kann den Radius angeben?

bmaster
quelle
1
In welchen Browsern muss dies unterstützt werden?
dreißig Punkte
Schauen Sie sich meine Antwort auf diese verwandte Frage an, insbesondere die Demos: stackoverflow.com/questions/4451350/…
Orbling
1
Sie können auch SVG (VML) verwenden, um einen Kreis zu erstellen.
Jasssonpet
2
Warum können Sie die Breite und Höhe Ihres Bildes nicht ändern, anstatt unterschiedliche Größen zu erstellen? Wie groß sind diese Bilder?
Mottie

Antworten:

295

Hier ist eine 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>

Damit dies in IE8 und älter funktioniert , müssen Sie CSS3 PIE herunterladen und verwenden . Meine obige Demo funktioniert nicht in IE8, aber das liegt nur daran, dass jsFiddle nicht hostet PIE.htc.

Meine Demo sieht so aus:

dreißig Punkte
quelle
Ich kann div in Chrome nicht kreisförmig machen. Es funktioniert jedoch in Mozilla. Meine URL lautet chokate.maninactionscript.com/chokates. Klicken Sie auf das Wüstenbild oder das vorhergehende, das beim Zoomen des Bildes angezeigte Div ist nicht kreisförmig ist in Mozilla.
Techie_28
1
@ techie_28: Das divauf Ihrer Seite ist rund, was Sie sehen können, wenn Sie es beispielsweise hinzufügen border: 5px solid red. Das Problem ist, dass die Teile des Bildes, die "den Kreis überhängen", nicht ausgeblendet werden. Keine der üblichen Problemumgehungen ist hier besonders einfach anzuwenden. Ich empfehle, die -webkit-mask-imageEigenschaft zum Korrigieren von WebKit-Browsern zu verwenden (und border-radiusfür andere Browser beizubehalten). Weitere Infos hier: webkit.org/blog/181/css-masks . Sie können auch eine Frage zu Stack Overflow stellen, um zu sehen, ob andere Personen andere Ideen haben.
dreißig Punkte
1
Sie können auch 100% anstelle von 999px ausführen.
Tony Wickham
1
.htc wird nicht mehr unterstützt.
Oliver Dixon
Ich frage mich, wie man Objekte (wie Knöpfe) in einem runden Div ausrichtet! : D
Zibri
25

Wenn Sie den Rahmenradius jeder Seite eines Elements auf 50% einstellen, wird die Kreisanzeige in einer beliebigen Größe erstellt:

.circle {
  border-radius: 50%;
  width: 200px;
  height: 200px; 
  /* width and height can be anything, as long as they're equal */
}
Tamik Soziev
quelle
1
Dies ist wahrscheinlich die Methode, die jetzt (2017) angewendet werden sollte.
Scribblemacher
13

Versuche dies

.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;
   }
iSafa
quelle
6

Es ist tatsächlich möglich.

Siehe: CSS-Tipp: So erstellen Sie Kreise ohne Bilder . Siehe Demo .

Aber seien Sie gewarnt, es hat schwerwiegende Nachteile in Bezug auf die Kompatibilität im Grunde, Sie machen eine Katze bellen.

Sehen Sie, wie es hier funktioniert

Wie Sie sehen werden, müssen Sie nur die heightund widthdie Hälfte der einrichtenborder-radius

Viel Glück!

Trufa
quelle
Hallo, danke für deinen jsfiddleLink! Dieser Link ist der einzige, der derzeit von Ihrer Antwort ausgeht. ;)
TooroSan
3

Es gibt auch die schlechte Idee, mehrere (20+) horizontale oder vertikale 1px-Divs zu verwenden, um einen Kreis zu konstruieren. Dieses jQuery-Plugin verwendet diese Methode, um verschiedene Formen zu erstellen.

kelloti
quelle
3

Geben Sie je nach Größe Breite und Höhe an, aber halten Sie beide gleich

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

vinayak hegde
quelle
3
border-radius: 50%;reicht.
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>

Ich wollte nur eine andere Lösung erwähnen, die die Frage beantwortet: "Einfachere Möglichkeit, Kreis-Div zu erstellen, als ein Bild zu verwenden?" welches FontAwesome verwenden soll.

Sie importieren die fontawesome CSS-Datei oder aus dem CDN hier

und dann bist du einfach:

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

und Sie können ihm jede gewünschte Farbe und Schriftgröße geben.

user3494047
quelle
2

Sie können die radial-gradientCSS-Funktion ausprobieren :

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

Wende es auf eine divEbene an:

<div class="circle"></div>
Er MK Gupta
quelle
2

Angenommen, Sie haben dieses Bild:

Um daraus einen Kreis zu machen, müssen Sie nur hinzufügen

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

Wenn Sie also einen Div haben, können Sie das Gleiche tun.

Überprüfen Sie das folgende Beispiel:

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

Abraham Hernandez
quelle
1

Sie können Radius verwenden, aber es funktioniert nicht im IE : border-radius: 5px 5px;.

HAJJAJ
quelle
1

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

Druhin
quelle
0

Grundsätzlich wird die absolute Position von div verwendet, um ein Zeichen an den angegebenen Koordinaten zu platzieren. Mit der parametrischen Gleichung für einen Kreis können Sie also einen Kreis zeichnen. Wenn Sie die Position von div in relativ ändern, führt dies zu einer Sinuswelle ...

Im Wesentlichen zeichnen wir Gleichungen, indem wir die Positionseigenschaft missbrauchen. Ich bin nicht gut mit CSS vertraut, also kann jemand dies sicherlich eleganter machen. genießen.

Dies funktioniert auf allen Browsern und Mobilgeräten (die mir bekannt sind). Ich benutze es auf meiner eigenen Website, um Sinuswellen von Text zu zeichnen (www.cpixel.com). Die ursprüngliche Quelle dieses Codes finden Sie hier: 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>
sickz
quelle
Dies ist, was ich will, aber ist es möglich, eine Liste von Kreisen innerhalb des Panels anzuzeigen,
Jinna Balu
0

Hinzufügen der cssEigenschaft von:

border-radius: 50%;

zu jedem div macht es kreisförmig.

Eshiett Oto-obong
quelle
-1

Erstellen Sie für einen Kreis ein div-Element und geben Sie dann width = 2 mal des Randradius = 2 mal padding ein. Auch Zeilenhöhe = 0 Mit beispielsweise 50 Pixel als Radien des Kreises funktioniert der folgende Code gut:

width: 100px;
padding: 50px 0;
border: solid;
line-height: 0px;
border-radius: 50px;
Mrinal Roy
quelle