css3实现8个小圆在一个大圆上平均分布

一道面试题:只有一个ul,和8个li,实现布局,8个小圆平均分布在一个大圆边缘,只用css实现。

解题关键:css3 中 transform,rotate,demo如下

     <div class="demo">
			<ul>
				<li>1</li>
				<li>2</li>
				<li>3</li>
				<li>4</li>
				<li>5</li>
				<li>6</li>
				<li>7</li>
				<li>8</li>
			</ul>
		</div>

     <style>
			.demo{
				width: 600px;
				height: 600px;
				background-color: #000000;
				padding: 100px;
				box-sizing: border-box;
			}
			ul,li{
				margin: 0;
				list-style-type: none;
				padding: 0;
			}
			ul{
				width: 400px;
				height: 400px;
				background-color:#fff;
				border-radius: 50%;
				position: relative;
			}
			li{
				width: 40px;
				height: 40px;
				position: absolute;
				background-color:red;
				border-radius: 50%;
				line-height: 40px;
				text-align: center;
				left: 50%;
				margin-left: -20px;
				margin-top: -20px;
			}
			li:nth-of-type(2){
				transform: rotate(45deg);
				transform-origin:20px 220px;
			}
			li:nth-of-type(3){
				transform: rotate(90deg);
				transform-origin:20px 220px;
			}
			li:nth-of-type(4){
				transform: rotate(135deg);
				transform-origin:20px 220px;
			}
			li:nth-of-type(5){
				transform: rotate(180deg);
				transform-origin:20px 220px;
			}
			li:nth-of-type(6){
				transform: rotate(225deg);
				transform-origin:20px 220px;
			}
			li:nth-of-type(7){
				transform: rotate(270deg);
				transform-origin:20px 220px;
			}
			li:nth-of-type(8){
				transform: rotate(315deg);
				transform-origin:20px 220px;
			}
			
		</style>

最终效果:

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现CSS大的3D立体球面上分布很多小球,并且自动转动,可以使用CSS3的transform属性和animation属性。 首先,创建一个大的球体的容器,并将其设置为透视投影。然后,在球体容器中创建多个小球的容器,并将其设置为3D立体元素,并使用transform属性将其转换为球面上的位置,并设置animation属性实现旋转动画。 下面是示例代码: HTML: ```html <div class="sphere"> <div class="item" style="transform: rotateY(0deg) translateZ(250px);"> <div class="inner"></div> </div> <div class="item" style="transform: rotateY(45deg) translateZ(250px);"> <div class="inner"></div> </div> <div class="item" style="transform: rotateY(90deg) translateZ(250px);"> <div class="inner"></div> </div> <div class="item" style="transform: rotateY(135deg) translateZ(250px);"> <div class="inner"></div> </div> <div class="item" style="transform: rotateY(180deg) translateZ(250px);"> <div class="inner"></div> </div> <div class="item" style="transform: rotateY(225deg) translateZ(250px);"> <div class="inner"></div> </div> <div class="item" style="transform: rotateY(270deg) translateZ(250px);"> <div class="inner"></div> </div> <div class="item" style="transform: rotateY(315deg) translateZ(250px);"> <div class="inner"></div> </div> </div> ``` CSS: ```css .sphere { width: 500px; height: 500px; position: relative; perspective: 1000px; transform-style: preserve-3d; animation: rotate 10s linear infinite; } .item { width: 50px; height: 50px; position: absolute; top: 50%; left: 50%; transform-style: preserve-3d; } .inner { width: 20px; height: 20px; border-radius: 50%; background-color: #f00; position: absolute; top: 50%; left: 50%; transform-style: preserve-3d; } @keyframes rotate { from { transform: rotateY(0); } to { transform: rotateY(360deg); } } ``` 这里使用了内部的div元素作为小球的容器,并将其设置为3D立体元素。可以根据需要调整大小、颜色、旋转轴和速度等参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值