Si hombre
Estoy buscando crear esta forma de círculos superpuestos en CSS:
Básicamente, solo círculos apilados. Miré a mi alrededor y todas las soluciones que veo incluyen el uso de múltiples elementos div para este efecto. Sin embargo, ¿no se puede hacer esto con un solo div, usando CSS3? Observé cómo se podía hacer fácilmente y pensé que, si todos los colores son iguales, tendrías una forma de pastilla como esta:
#circles {
background-color: red;
width: 130px;
height: 100px;
border-radius: 50px;
}
<div id="circles"></div>
Y luego simplemente dibuje un par de cuartos de luna en él, y listo. Sin embargo, no puedo entender cómo dibujar estas formas de luna en mi div en forma de cápsula.
web-tiki
Con sombras de cuadro CSS
Puedes usar múltiples caja-sombras con varios colores en un div redondeado. Deben estar separados por una coma:
#circles {
background-color: red;
width: 100px;
height: 100px;
border-radius: 50%;
box-shadow: 10px 0 0 -2px #f8ff00,
20px 0 0 -4px #009901,
30px 0 0 -6px #3531ff;
}
<div id="circles"></div>
producción :
El soporte del navegador para box-shadows es IE9+ (para obtener más información, consulte Puedo usar)
También puedes hacer que los círculos superpuestos formen sensible de acuerdo con el ancho de la ventana gráfica con unidades vw : MANIFESTACIÓN
#circles {
background-color: red;
width: 20vw;
height: 20vw;
margin: 0 auto;
border-radius: 50%;
box-shadow: 2vw 0 0 -0.4vw #f8ff00,
4vw 0 0 -0.8vw #009901,
6vw 0 0 -1.2vw #3531ff;
}
<div id="circles"></div>
El navegador compatible con las unidades vw es IE9+ (para más información, consulte Puedo usar)
con SVG
Otro enfoque sería utilizar un svg en línea con el <circle>
elemento.
Esto responde de acuerdo con el tamaño del padre y el soporte del navegador vuelve a IE9 como box-shadows:
svg{width:80%;}
<svg viewbox="0 0 100 30">
<circle cx="59" cy="15" r="8.5" fill="darkorange" />
<circle cx="56" cy="15" r="9" fill="gold" />
<circle cx="53" cy="15" r="9.5" fill="tomato" />
<circle cx="50" cy="15" r="10" fill="teal" />
</svg>
También amplié la versión SVG para hacer un “gusano” animado con más círculos superpuestos. Puedes verlo en este bolígrafo: gusano animado
Y se ve así:
-
@imdabestmanideedeet ¿no estabas tratando de hacer esto? jsfiddle.net/webtiki/5wytm0r4/4 ?
– web-tiki
5 de diciembre de 2014 a las 11:18
-
Mi error, quise publicar la URL que acabas de publicar. ¡Gracias! Eliminaré el comentario ofensivo. Para otras personas que lean esto: el JSfiddle anterior hace que todos los círculos sean del mismo tamaño en lugar de ligeramente más pequeños como en la respuesta.
– Si hombre
5 de diciembre de 2014 a las 11:20
-
@imdabestmanideedeet en el violín que publiqué en mi comentario anterior, los círculos son 2px más anchos. Para círculos del mismo tamaño, debe hacer esto: jsfiddle.net/webtiki/5wytm0r4/8
– web-tiki
5 de diciembre de 2014 a las 15:14
-
Oh,
vw
unidades, ahora tengo mi investigación de fin de semana :).– TMH
5 de diciembre de 2014 a las 16:33
-
@TomHart son muy interesantes aunque con algunas limitaciones. También busque en
vh/vmin/vmax
¡unidades!– web-tiki
5 de diciembre de 2014 a las 17:04
salman a
Es posible usar CSS3 múltiples imágenes de fondo y gradientes radiales juntos:
#circles {
width: 115px;
height: 100px;
background-image:
radial-gradient(circle at 50px 50px, #F00 0, #F00 50px, transparent 50px),
radial-gradient(circle at 55px 50px, #FF0 0, #FF0 50px, transparent 50px),
radial-gradient(circle at 60px 50px, #080 0, #080 50px, transparent 50px),
radial-gradient(circle at 65px 50px, #00F 0, #00F 50px, transparent 50px);
}
<div id="circles"></div>
-
Los círculos no se ven suaves.
– Derek 朕會功夫
7 julio 2015 a las 0:00
O, si te sientes loco, puedes hacer un svg y usarlo en línea como imagen de fondo:
#circles {
width: 120px;
height: 100px;
background-image: url("data:image/svg+xml;utf8,<svg version='1.1' xmlns="http://www.w3.org/2000/svg" width="100%" height="100%"><circle fill="blue" cy='50' cx='70' r="50" /><circle fill="green" cy='50' cx='65' r="50" /><circle fill="yellow" cy='50' cx='60' r="50" /><circle fill="red" cy='50' cx='55' r="50" /></svg>");
}
<div id="circles"></div>
-
Necesita codificar los datos como URL; de lo contrario, es posible que no funcione (por ejemplo, en IE).
– Salmán A.
8 de diciembre de 2014 a las 10:44
-
No tienes que crear múltiples
circle
etiquetas Uso sencillo eluse
etiquetar ytransform
su eje X.– Weafs.py
10 de diciembre de 2014 a las 10:21
-
Excelentes puntos: para facilitar la lectura, no he codificado en URL el SVG en el fragmento, pero los futuros lectores deben saber que sin la codificación de URL, el svg no funcionará en IE.
– Grano vertical
12/03/2015 a las 21:40
-
Gran punto sobre el
use
tag, gracias por enseñarme algo nuevo. Sorprendentemente, cuando se crea con la etiquetause
, el código SVG es más largo, pero aquí está de todos modos para futuras referencias:<svg version='1.1' xmlns='http://www.w3.org/2000/svg' width='100%' height='100%'><defs><circle cx='50' cy='50' id='circle' r='50'/></defs><use xlink:href='#circle' fill='blue' x='15' /><use xlink:href='#circle' fill='green' x='10' /><use xlink:href='#circle' fill='yellow' x='5' /><use xlink:href='#circle' fill='red' /></svg>
– Grano vertical
12/03/2015 a las 21:44
Por interés, ¿por qué usar 5000 px como radio del borde en lugar de solo 50 px (o 50 %)?
– Miguel
5 de diciembre de 2014 a las 14:21