清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
$width: 40px; $border: 2px; body { -webkit-user-select: none; user-select: none; cursor: crosshair; } body > div { width: $width * 3 + $width / 2 * 6 + $border * 6; margin: 0 auto; } body > div.error-text { color: red; font-family: 黑体; font-size: 18px; opacity: 0; text-align: center; } body.error > div.error-text { opacity: 1; transition: opacity .5s .2s; } div.row > div { margin: $width / 2; float: left; width: $width; height: $width; text-align: center; line-height: $width; border-radius: 50%; border: $border solid lightgray; position: relative; } div.row > div > div.line { height: 0; width: $width; border: ($border / 2) solid transparent; position: absolute; transform-origin: -($width/2 + $border) ($border/2); top: $width / 2 - $border / 2; left: $width + $border; pointer-events: none; } div.row > div > div.line.active { border-color: black; } div.row > div > div.line.r_ { transform: rotate(0); } div.row > div > div.line.Rd { width: sqrt(power($width * 2 + $border * 2, 2) + power($width * 4 + $border * 4, 2)) - ($width + $border * 2); transform: rotate(#{rad-to-deg(atan2(1, 2)) * 1deg} ); } div.row > div > div.line.rd { width: sqrt(power($width * 2 + $border * 2, 2) * 2) - ($width + $border * 2); transform: rotate(45deg); } div.row > div > div.line.rD { width: sqrt(power($width * 2 + $border * 2, 2) + power($width * 4 + $border * 4, 2)) - ($width + $border * 2); transform: rotate(#{rad-to-deg(atan2(2, 1)) * 1deg} ); } div.row > div > div.line._d { transform: rotate(90deg); } div.row > div > div.line.Ru { width: sqrt(power($width * 2 + $border * 2, 2) + power($width * 4 + $border * 4, 2)) - ($width + $border * 2); transform: rotate(#{rad-to-deg(atan2(1, 2)) * -1deg} ); } div.row > div > div.line.ru { width: sqrt(power($width * 2 + $border * 2, 2) * 2) - ($width + $border * 2); transform: rotate(-45deg); } div.row > div > div.line.rU { width: sqrt(power($width * 2 + $border * 2, 2) + power($width * 4 + $border * 4, 2)) - ($width + $border * 2); transform: rotate(#{rad-to-deg(atan2(2, 1)) * -1deg} ); } div.row > div.selected { border-color: black; } div.row > div:hover:not(.selected) { border-color: gray; } div.row > div.selected::before { display: block; width: $width / 2.5; height: $width / 2.5; background: black; border-radius: 50%; content: ""; position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin: auto; } div.row::after { visibility: hidden; content: ""; display: table; clear: both; } div.row div.arrow { transform-origin: $width/10 ($width/2 - $width/10); position: absolute; top: $width / 10; left: $width / 2 - $width / 10; width: 0; height: 0; border-style: solid; border-width: 0 $width/10 $width/10 $width/10; border-color: transparent transparent black transparent; pointer-events: none; } body.error div.row div.arrow { border-color: transparent transparent red transparent; } body.error div.row > div.selected, body.error div.row > div > div.line.active { border-color: red; } body.error div.row > div.selected::before { background: red; } @keyframes anime_error { from { transform: translateX(-8px); } 50% { transform: translateX(8px); } to { transform: translateX(-8px); } } body.error div.row { animation: anime_error 0.1s ease-in-out 2 alternate; } body.ok div.row div.arrow { border-color: transparent transparent green transparent; } body.ok div.row > div.selected, body.ok div.row > div > div.line.active { border-color: green; } body.ok div.row > div.selected::before { background: green; }