サンプル(例)で提示しているHTMLとCSSは、記載欄右上の Copyアイコンでコピーできます。
Thank you for reading this post, don't forget to subscribe!XY軸の値(可変)を求める為に、三角関数:sin , cos を使っています。円の面積を求め定数で割って、動く3Dの表示の範囲を可変にしています。(面積内でねじれながら可変3D表示)グリッドデザイン:グリッドコンテナを利用しています。見出しと概説はコンテナ内の最初に記述しています。 見出しの前から後ろに表示されることで3D表示がおわかり戴けると思います。(部分透過も)
HTMLとCSSのコピペで大まかなデザインを利用できます。
後は、HTMLの省略部分を例に合わせて追加したり、追加のCSSでお好みのデザインに変更できます。
HTMLとCSSだけで作る
HTML概略
<div class="content_j2">
<!--省略-->
<!--省略-->
<!--省略-->
<div class="a_color" style="--kakudo:000deg; --teisuu:30">000 </div>
<div class="a_color" style="--kakudo:003deg; --teisuu:30">003 </div>
<div class="a_color" style="--kakudo:006deg; --teisuu:30">006 </div>
<div class="a_color" style="--kakudo:009deg; --teisuu:30">009 </div>
<div class="a_color" style="--kakudo:012deg; --teisuu:30">012 </div>
<div class="a_color" style="--kakudo:015deg; --teisuu:30">015 </div>
<div class="a_color" style="--kakudo:018deg; --teisuu:30">018 </div>
<div class="a_color" style="--kakudo:021deg; --teisuu:30">021 </div>
<div class="a_color" style="--kakudo:024deg; --teisuu:30">024 </div>
<div class="a_color" style="--kakudo:027deg; --teisuu:30">027 </div>
<div class="a_color" style="--kakudo:030deg; --teisuu:30">030 </div>
<div class="a_color" style="--kakudo:033deg; --teisuu:30">033 </div>
<div class="a_color" style="--kakudo:036deg; --teisuu:30">036 </div>
<div class="a_color" style="--kakudo:039deg; --teisuu:30">039 </div>
<div class="a_color" style="--kakudo:042deg; --teisuu:30">042 </div>
<div class="a_color" style="--kakudo:045deg; --teisuu:30">045 </div>
<div class="a_color" style="--kakudo:048deg; --teisuu:30">048 </div>
<div class="a_color" style="--kakudo:051deg; --teisuu:30">051 </div>
<div class="a_color" style="--kakudo:054deg; --teisuu:30">054 </div>
<div class="a_color" style="--kakudo:057deg; --teisuu:30">057 </div>
<div class="a_color" style="--kakudo:060deg; --teisuu:30">060 </div>
<div class="a_color" style="--kakudo:063deg; --teisuu:30">063 </div>
<div class="a_color" style="--kakudo:066deg; --teisuu:30">066 </div>
<div class="a_color" style="--kakudo:069deg; --teisuu:30">069 </div>
<div class="a_color" style="--kakudo:072deg; --teisuu:30">072 </div>
<div class="a_color" style="--kakudo:075deg; --teisuu:30">075 </div>
<div class="a_color" style="--kakudo:078deg; --teisuu:30">078 </div>
<div class="a_color" style="--kakudo:081deg; --teisuu:30">081 </div>
<div class="a_color" style="--kakudo:084deg; --teisuu:30">084 </div>
<div class="a_color" style="--kakudo:087deg; --teisuu:30">087 </div>
<div class="a_color" style="--kakudo:090deg; --teisuu:30">090 </div>
<!--中略-->
<div class="a_color" style="--kakudo:339deg; --teisuu:30">339 </div>
<div class="a_color" style="--kakudo:342deg; --teisuu:30">342 </div>
<div class="a_color" style="--kakudo:345deg; --teisuu:30">345 </div>
<div class="a_color" style="--kakudo:348deg; --teisuu:30">348 </div>
<div class="a_color" style="--kakudo:351deg; --teisuu:30">351 </div>
<div class="a_color" style="--kakudo:354deg; --teisuu:30">354 </div>
<div class="a_color" style="--kakudo:357deg; --teisuu:30">357 </div>
<div class="a_color" style="--kakudo:360deg; --teisuu:30">360 </div>
</div>
実表示
ここの記述はHTMLのみです。
HTMLとCSSだけ
動く3Dデザイン
虹色グラデーション3D
XY軸の値を求める為に、三角関数:sin , cos を使っています。
x軸=cos(角度*距離)、y軸=sin(角度*距離) 角度は0~360で変化します。
円の面積(πr2)を求め定数(30)で割って動く3Dの表示範囲を可変にしています(面積内でねじれ表示)
グリッドデザイン:コンテナ(display:grid)を利用しています。見出しと概説はコンテナ内の最初に記述しています。
見出しの前後に表示(部分透過)されることで3D表示がおわかり戴けると思います。
主要css公開
.a_color {
position: absolute;
display: grid;
--hankei: 50%;
transform-style: preserve-3d;
box-sizing: border-box;
--kyori: 30vmin;
--s: calc((var(--hankei) * 2 * 3.14 / var(--teisuu, 1)));
width: var(--s);
height: 50%;
top: calc(50% - var(--s) / 2);
left: calc(50% - var(--s) / 2);
--x: calc(cos(var(--kakudo)) * var(--kyori));
--y: calc(sin(var(--kakudo)) * var(--kyori));
translate: var(--x) var(--y);
--hanbun: calc(var(--s) * 0.5);
transform-origin: calc(var(--hanbun) - var(--x)) calc(var(--hanbun) - var(--y));
transform: rotatex(var(--kakudo));
background: linear-gradient(25deg,red,orange,yellow,limegreen,green,aqua,blue,purple);
animation: mawari 136s linear infinite -2s; }
@keyframes mawari {
from {transform: rotatey(0deg) rotatex(var(--kakudo)) rotatez(calc(1440deg - var(--kakudo)));}
to {transform: rotatey(-360deg) rotatex(var(--kakudo)) rotatez(calc(-1 * var(--kakudo)));}
}
.content_j2 {
transform-style: preserve-3d;
width: 50vmin;
aspect-ratio: 1;
position: relative;
border-radius: 100vmax;
display: grid;
align-content: center;
justify-content: center;
filter: drop-shadow(0px 0px 2px #fff) drop-shadow(10px 10px 4px #000 5);
animation: hajiku 100s ease infinite alternate;
}
css概説
.a_color {
position: absolute;/*絶対位置*/
border: 1px solid;
display: grid;
/*グリッドコンテナを作成する為、要素に対してdisplay:grid を指定*/
--hankei: 50%; /* 半径=50% */
transform-style: preserve-3d;
box-sizing: border-box;
/* 要素の全体の幅と高さ=width および height プロパティは、コンテンツ、パディング、境界の各領域を含み、マージンは含まない */
--kyori: 30vmin; /* 距離:「viewport minimum」表示領域の最小値 */
--s: calc((var(--hankei) * 2 * 3.14 / var(--teisuu, 1)));
/* 円の面積を--teisuu(30)で割り表示範囲を計算 */
width: var(--s); /* 幅=上記の計算で求めた値 */
height: 50%; /* 高さ=50% */
top: calc(50% - var(--s) / 2); /*top位置計算*/
left: calc(50% - var(--s) / 2); /*左位置計算*/
--x: calc(cos(var(--kakudo)) * var(--kyori)); /* x軸=cos(角度(可変)*距離(可変))*/
--y: calc(sin(var(--kakudo)) * var(--kyori)); /* y軸=sin(角度(可変)*距離(可変))*/
translate: var(--x) var(--y);
/* 平行移動の座標変換を独自に、transform プロパティから独立して指定 */
--hanbun: calc(var(--s) * 0.5); /*表示範囲の中心(原点)を求める為に(半分)*/
transform-origin: calc(var(--hanbun) - var(--x)) calc(var(--hanbun) - var(--y));
/* 要素の座標変換 (transform) における原点 */
transform: rotatex(var(--kakudo));
/* 与えられた要素を回転、拡大縮小、傾斜、移動する。視覚整形モデルの座標空間を変更 */
background: linear-gradient(25deg,red,orange,yellow,limegreen,green,aqua,blue,purple);
animation: mawari 136s linear infinite -2s; }
@keyframes mawari {
from {transform: rotatey(0deg) rotatex(var(--kakudo)) rotatez(calc(1440deg - var(--kakudo)));}
to {transform: rotatey(-360deg) rotatex(var(--kakudo)) rotatez(calc(-1 * var(--kakudo)));}
}
.content_j2 {
transform-style: preserve-3d;
width: 50vmin;/*「viewport minimum」*/
/*ブラウザ表示領域の幅と高さのうち、値が小さい方に対する割合*/
aspect-ratio: 1;/*ボックスの推奨アスペクト比を設定*/
position: relative;/*現在位置を基準に、相対位置を指定*/
border-radius: 100vmax;/*「viewport max」*/
/*ブラウザ表示領域の幅と高さのうち、値が大きい方に対する割合*/
display: grid;
/*グリッドコンテナーを作成する為、要素に対して display: gridを指定。*/
align-content: center;
/*フレックスボックスの交差軸またはグリッドのブロック軸方向の内部のアイテムの間または周囲の空間の配分方法を設定*/
justify-content: center;
/*フレックスコンテナーの主軸およびグリッドコンテナーのインライン軸に沿って、中身のアイテムの間や周囲に間隔を配置する方法を定義*/
filter: drop-shadow(0px 0px 2px #fff) drop-shadow(10px 10px 4px #000 5);
/*入力画像にドロップシャドウ効果を適用*/
animation: hajiku 100s ease infinite alternate;
}


