Ja, es ist sehr viel möglich und sehr einfach mit nur CSS. Sie müssen nur die Winkel im Auge behalten, in denen Sie die Links zu den Bildern haben wollen (ich habe am Ende ein Stück Code hinzugefügt, nur um die Winkel zu zeigen, wenn Sie einen von ihnen schweben).
Sie müssen zuerst einen Wrapper. Ich setze seinen Durchmesser auf 24em
(width: 24em; height: 24em;
tut das), Sie können es auf was auch immer Sie wollen einstellen. Sie geben es position: relative;
.
Sie positionieren dann Ihre Links mit den Bildern in der Mitte des Wrappers, sowohl horizontal als auch vertikal. Sie tun dies, indem Sie position: absolute;
und dann top: 50%; left: 50%;
und margin: -2em;
(wo 2em
ist die halbe Breite der Verbindung mit dem Bild, das ich eingestellt habe, 4em
- wieder, Sie können es zu was auch immer Sie wünschen, ändern, aber nicht vergessen die Marge in diesem Fall zu ändern).
Sie entscheiden dann über die Winkel, in denen Sie Ihre Links zu den Bildern haben möchten und fügen eine Klasse deg{desired_angle}
hinzu (zum Beispiel deg0
oder deg45
oder was auch immer). Dann für jede solche Klasse, die Sie CSS-Transformationen verkettet gelten, wie folgt aus:
.deg{desired_angle} {
transform: rotate({desired_angle}) translate(12em) rotate(-{desired_angle});
}
wo Sie {desired_angle}
mit 0
ersetzen, 45
, und so weiter ...
Die erste drehen Transformation dreht das Objekt und seine Achsen Die Translationstransformation übersetzt das Objekt entlang der gedrehten X-Achse und die zweite Rotationstransformation bringt das Objekt in die Position zurück - demo to illustrate how this works.
Der Vorteil dieser Methode ist, dass sie flexibel ist. Sie können neue Bilder in verschiedenen Winkeln hinzufügen, ohne die aktuelle Struktur zu ändern.
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); }
Auch könnten Sie weiter die HTML vereinfachen, indem sie für die Links Hintergrundbilder verwenden anstelle von img
Tags .
EDIT: example with fallback for IE8 and older (getestet in IE8 und IE7)
Schön, aber was werden die Leute sehen, wenn sie von Geräten/Browsern ohne CSS Zugriff auf Support-Transformation? – gkond
Die einzigen Desktop-Browser, die CSS-Transformationen nicht unterstützen, sind IE8 und älter. Für diese kann dies mithilfe von IE-Matrixfiltertransformationen emuliert werden. Wie für mobile Browser ist Opera Mini die einzige, die CSS-Transformationen nicht unterstützt, und ich würde wirklich nicht etwas verwenden, das ohnehin auf einem kleinen Bildschirm Platz verschwendet. – Ana
Ich habe ein Beispiel mit Fallback für IE8 und älter hinzugefügt. – Ana