Sí, es muy posible y muy simple usar solo CSS. Solo debe tener en cuenta los ángulos en los que desea los enlaces con las imágenes (he agregado un fragmento de código al final solo para mostrar los ángulos cada vez que sobrevuela uno de ellos).
primero tiene una envoltura. Establecí su diámetro para que sea 24em
(width: 24em; height: 24em;
hace eso), puede configurarlo para lo que desee. Usted le da position: relative;
.
A continuación, ubique los enlaces con las imágenes en el centro de esa envoltura, tanto horizontal como verticalmente. Para ello, configure position: absolute;
y luego top: 50%; left: 50%;
y margin: -2em;
(donde 2em
es la mitad del ancho del enlace con la imagen, que configuré como 4em
- nuevamente, puede cambiarlo a lo que desee, pero no lo olvide para cambiar el margen en ese caso).
A continuación, decide los ángulos en los que desea tener sus enlaces con las imágenes y agrega una clase deg{desired_angle}
(por ejemplo, deg0
o deg45
o lo que sea). Luego, para cada clase de tales solicite beneficios encadenado transformaciones CSS, así:
.deg{desired_angle} {
transform: rotate({desired_angle}) translate(12em) rotate(-{desired_angle});
}
donde se reemplaza con {desired_angle}
0
, 45
, y así sucesivamente ...
La primera rotación gira a transformar el objeto y sus ejes , la transformación de traducción traduce el objeto a lo largo del eje X girado y la segunda transformación de rotación devuelve el objeto a su posición - demo to illustrate how this works.
La ventaja de este método es que es flexible. Puede agregar nuevas imágenes en diferentes ángulos sin alterar la estructura actual.
HTML:
<div class='circle-container'>
<a href='#' class='center'><img src='image.jpg'></a>
<a href='#' class='deg0'><img src='image.jpg'></a>
<a href='#' class='deg45'><img src='image.jpg'></a>
<a href='#' class='deg135'><img src='image.jpg'></a>
<a href='#' class='deg180'><img src='image.jpg'></a>
<a href='#' class='deg225'><img src='image.jpg'></a>
<a href='#' class='deg315'><img src='image.jpg'></a>
</div>
Relevante CSS:
.circle-container {
position: relative;
width: 24em;
height: 24em;
padding: 2.8em;
/*2.8em = 2em*1.4 (2em = half the width of a link with img, 1.4 = sqrt(2))*/
border: dashed 1px;
border-radius: 50%;
margin: 1.75em auto 0;
}
.circle-container a {
display: block;
position: absolute;
top: 50%; left: 50%;
width: 4em; height: 4em;
margin: -2em;
}
.circle-container img { display: block; width: 100%; }
.deg0 { transform: translate(12em); } /* 12em = half the width of the wrapper */
.deg45 { transform: rotate(45deg) translate(12em) rotate(-45deg); }
.deg135 { transform: rotate(135deg) translate(12em) rotate(-135deg); }
.deg180 { transform: translate(-12em); }
.deg225 { transform: rotate(225deg) translate(12em) rotate(-225deg); }
.deg315 { transform: rotate(315deg) translate(12em) rotate(-315deg); }
Además, se podría simplificar aún más el HTML utilizando imágenes de fondo para los enlaces en lugar de utilizar img
etiquetas .
EDITAR: example with fallback for IE8 and older (probado en IE8 e IE7)
Niza, pero lo que la gente ve cuando se accede desde dispositivos/navegadores sin CSS Transformar apoyo? – gkond
Los únicos navegadores de escritorio que no son compatibles con las transformaciones CSS son IE8 y anteriores. Para aquellos, esto puede ser emulado usando transformaciones de filtro de matriz IE. En cuanto a los navegadores móviles, Opera Mini es el único que no admite las transformaciones CSS y, de todos modos, no usaría algo que desperdicie tanto espacio en una pantalla pequeña. – Ana
He agregado un ejemplo con respaldo para IE8 y versiones anteriores. – Ana