css特效组件---玻璃时钟表盘

效果展示

玻璃时钟表盘

实现代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<link rel="stylesheet" href="../css/玻璃时钟表盘.css">
		<title></title>
	</head>
	<body>
		<div class="container">
			<div class="box">
				<div class="clock">
					<div class="hour">
						<div class="hr" id='hr'></div>
					</div>
					<div class="min">
						<div class="mn" id='mn'></div>
					</div>
					<div class="sec">
						<div class="sc" id='sc'></div>
					</div>
					
				</div>
				<div class="num">
					<div>|</div>
					<div>|</div>
					<div>3</div>
					<div>|</div>
					<div>|</div>
					<div>12</div>
					<div>|</div>
					<div>|</div>
					<div>9</div>
					<div>|</div>	
					<div>|</div>
					<div>6</div>
				</div>
			</div>
		</div>
	</body>
	<script>
		const deg = 6;
		const hr = document.querySelector('#hr')
		const mn = document.querySelector('#mn')
		const sc = document.querySelector('#sc')
		setInterval(()=>{
			let day = new Date();
			let hh = day.getHours() * 30
			let mm = day.getMinutes() * deg
			let ss = day.getSeconds() * deg
			
			hr.style.transform = `rotateZ(${hh+(mm/12)}deg)`
			mn.style.transform = `rotateZ(${mm}deg)`
			sc.style.transform = `rotateZ(${ss}deg)`
		})
		
	</script>
</html>

css样式

*{
	margin: 0;
	padding: 0;
	box-sizing: border-box;
}
body{
	display: flex;
	justify-content: center;
	align-items: center;
	min-height: 100vh;
}
body::before{
	content:"";
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	background: linear-gradient(45deg,#e91e63,#e91e63 50%,
	#ffc107 50%,#ffc107);
}
body::after{
	content:"";
	position: absolute;
	top: -20px;
	left: 0;
	width: 100%;
	height: 100%;
	background: linear-gradient(160deg,#1e34e9 ,#1e34e9  50%,
	transparent 50%,transparent);
	animation: animate 5s ease-in-out infinite;
}
@keyframes animate{
	0%,100%{
		transform: translateY(10px);
	}
	50%{
		transform: translateY(-10px);
	}
	
}
.container{
	position: relative;
}
.container::before{
	content:"";
	position: absolute;
	bottom: -150px;
	width: 100%;
	height: 60px;
	background: radial-gradient(rgba(0,0,0,0.2),transparent,transparent);
	border-radius: 50%;
}
.box{
	position: relative;
	z-index: 1;
	width: 400px;
	height: 400px;
	backdrop-filter: blur(25px);
	border-radius: 50%;
	border: 1px solid rgba(255,255,255,0.5);
	animation: animate 5s ease-in-out infinite;
	animation-delay: -2.5s;
}
.clock{
	position: absolute;
	top: 10px;
	left: 10px;
	right: 10px;
	bottom: 10px;
	display: flex;
	justify-content: center;
	align-items: center;
	background: radial-gradient(transparent,rgba(255,255,255,0.2));
	border-radius: 50%;
	backdrop-filter: blur(25px);/*高斯模糊*/
	border: 1px solid rgba(255,255,255,0.5);
	border-bottom: none;
	border-right: none;
}
.num{
	display: flex;
	align-items: center;
	justify-content: center;
	position: absolute;
	z-index: 100;
	
	width: 100%;
	height: 100%;
	border-radius: 50%;
	
}
.num div{
	color: #fff;
	position: absolute;	
}
.num div:nth-child(1){
	transform: rotate(30deg) translateY(180px);
}
.num div:nth-child(2){
	transform: rotate(60deg) translateY(180px);
}
.num div:nth-child(3){
	
	transform:  translateX(180px);
}
.num div:nth-child(4){
	transform: rotate(120deg) translateY(180px);
}
.num div:nth-child(5){
	
	transform: rotate(150deg) translateY(180px);
}
.num div:nth-child(6){
	transform: translateY(-180px);
}
.num div:nth-child(7){
	
	transform: rotate(210deg) translateY(180px);
}
.num div:nth-child(8){
	transform: rotate(240deg) translateY(180px);
}
.num div:nth-child(9){
	
	transform: translateX(-180px);
}
.num div:nth-child(10){
	transform: rotate(300deg) translateY(180px);
}
.num div:nth-child(11){
	
	transform: rotate(330deg) translateY(180px);
}
.num div:nth-child(12){
	transform: rotate(360deg) translateY(180px);
}
.clock::before{
	position: absolute;
	content: "";
	width: 15px;
	height: 15px;
	background: #fff;
	border-radius: 50%;
	z-index: 10000;
}
.hour, .mim, .sec{
	position: absolute;
}
.hour, .hr{
	width: 160px;
	height: 160px;
}
.min, .mn{
	width: 190px;
	height: 190px;
}
.sec, .sc{
	width: 230px;
	height: 230px;
}
.hr, .mn , .sc{
	display: flex;
	justify-content: center;
	position: absolute;
	border-radius: 50%;
}
.hr::before{
	content:'';
	position: absolute;
	width: 8px;
	height: 90px;
	background: #ff105e;
	z-index: 11;
	border-radius: 6px;
}
.mn::before{
	content:'';
	position: absolute;
	width: 4px;
	height: 90px;
	background: #fff;
	z-index: 12;
	border-radius: 6px;
}
.sc::before{
	content:'';
	position: absolute;
	width: 2px;
	height: 150px;
	background: #fff;
	z-index: 13;
	border-radius: 6px;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值