クリックで回転するドーナツ型メニューの実装
- 2017.09.14
- Coding JavaScript
- メニュー, 回転
1、要素数分のliを用意
2、css内「$menu-items: 11;」の数値にliの個数を入力
上記でメニューの設定は出来る。ただし、li要素同士が重なり合うのでスタイルを調整する
■html
<ul class="wrapper rotated-1"> <li> <span>Menu Item 1</span> </li> <li> <span>Menu Item 2</span> </li> <li> <span>Menu Item 3</span> </li> <li> <span>Menu Item 4</span> </li> <li> <span>Menu Item 5</span> </li> <li> <span>Menu Item 6</span> </li> <li> <span>Menu Item 7</span> </li> <li> <span>Menu Item 8</span> </li> </ul>
■css
$menu-items: 8; $rotation: 360deg / $menu-items; @import url(https://fonts.googleapis.com/css?family=Lato); body { overflow: hidden; background: #333; font-family: "Lato"; } * { box-sizing: border-box; } .wrapper { position: relative; width: 19.8em; height: 14em; margin: 10em auto; // Uncomment these two to make a circular menu // overflow: hidden; // border: 0.1em solid #999; border-radius: 50%; background: transparent; list-style: none; transition: transform 450ms; } .wrapper > li { position: absolute; top: 0; left: 0; width: 50%; height: 50%; padding: 0.5em; border: 0.1em solid #111; background: darken(tomato, 2%); text-align: center; transform: rotate(0), skew(45deg, 0deg); transform-origin: 100% 100%; cursor: pointer; transition: padding 250ms, background 200ms; &:hover { padding: 1.5em; background: #13B26F; } > span { display: inline-block; position: relative; left: 0; top: 85%; color: white; font-weight: 900; transform: skew(-45deg, 0deg); } } @for $i from 1 through $menu-items { .wrapper > li:nth-child(#{$i}) { transform: rotate(($i - 1)*$rotation) skew(45deg, 0deg); } .rotated-#{$i} { transform: rotate(($i - 1)*$rotation*-1); } }
■js
$(".wrapper li").on("click", function() { var index = $(this).index() + 1; $(".wrapper")[0].className = $(".wrapper")[0].className.replace(/\brotated-\d+\b/g, ''); $(".wrapper").addClass("rotated-" + index); });
参考サイト
-
前の記事
タイトルの左右に線を引くスタイルシート 2017.09.07
-
次の記事
Advanced Custom FieldsのアドオンRepeater Fieldの出力メモ 2017.10.22