我尝试仅使用纯 CSS 创建 3D 球体,但无法生成所需的形状。我见过 цилиндр ,但我找不到创建真实球体的链接。
.red {
background-color: red;
}
.green {
background-color: green;
}
.blue {
background-color: blue;
}
.yellow {
background-color: yellow;
}
.sphere {
height: 200px;
width: 200px;
border-radius: 50%;
text-align: center;
vertical-align: middle;
font-size: 500%;
position: relative;
box-shadow: inset -10px -10px 100px #000, 10px 10px 20px black, inset 0px 0px 10px black;
display: inline-block;
margin: 5%;
}
.sphere::after {
background-color: rgba(255, 255, 255, 0.3);
content: '';
height: 45%;
width: 12%;
position: absolute;
top: 4%;
left: 15%;
border-radius: 50%;
transform: rotate(40deg);
}
<div class="sphere red"></div>
<div class="sphere green"></div>
<div class="sphere blue"></div>
<div class="sphere yellow"></div>
<div class="sphere"></div>
然而:
- 答:这些只是 2D 圆,不是 3D 形状
- B:我不能像球图像一样在 3d 中旋转它们(我想要一个旋转图像)。
我试过了。
我不太明白讨论了哪些未上漆的部分。在该示例中叠加的贴图本身在侧面有一个 Alpha 通道。编写一个覆盖椭圆地图的算法将非常困难(以至于有人可能会说不可能),但我注意到这一切为时已晚,此时我已经编写了大部分球体代码。
Не сказать, что получилось чем-то лучше, но хоть геометрию вспомнил :) Код полностью мой, к @ZulNs не подглядывал, если необходимо - дам комментарий по любой интересующей строке. Для веселья добавил выбор карт :) Собственно вот:
На вход радиус, кол-во полигонов на один меридиан и картинка, желательно прямоугольная, без альфа-каналов. Если на вход будет квадратная картинка то она растянется до нужных размеров.
Минусы:
scaleXполигона ближе к полюсам (scaleXK), но и это не помогает в полной мере. Это самый основной минус, но думаю я продолжу работать над скриптом и поправлю это дело.Плюсы:
В идеале можно превратить весь код в класс, чтобы можно было создавать кучу сфер с разными параметрами. Буду рад, если более опытные программисты тоже помогут в устранение минусов.
UPD 10.02.2019: Реализовал классы. Теперь удобно создавать новые сферы, можете оценить на примере 3-х планет с разными временем вращения, размером и детализацией.
UPD 11.02.2019: Добавил новы метод
setTexture(textureSrc). С его помощью можно плавно менять текстуру "на лету". Оформил небольшой репозиторий на GitHub.纯粹在 CSS 中,什么都没有,但是来自您使用这样的圆柱体发送的同一系列(来源):
下面的答案不是真正的 3D 形状。这只会产生轻微的 3D 错觉,但是,根据您的用例,您可以对其进行调整:
background-position通过为div设置动画并使用 shadowsbox shadows,您可以“模拟” 3D 形状的阴影。JS解决方案
我
JavaScript用来构建一个由许多元素组成的球体div。为了保持浏览器性能,div 元素尽可能小。答案来源: @ZulNs