当前位置: 首页 > Web前端 > HTML

css初学者必看,用css3制作精美在线时钟

时间:2023-03-28 18:04:00 HTML

点击链接查看效果https://ihope_top.gitee.io/my...本文已发表于公众号:百里青山前言前两天翻了翻资料,发现了一个刚开始学前端的时候学的一个小案例。我用css画了一个旋转的表盘。不知道大家有没有写过。大家好,这个效果的原案是完全用css实现的,因为手的转动是有规律可循的,设置一个定时动画就可以了。为了简化代码量和获取当前时间,我用js优化了一下,因为case很小,所以不需要框架,直接启动。由于这篇简单的文章主要是针对初学者的,所以会详细介绍。开发初始化第一步是找一个文件夹,创建index.html,然后导入创建一个style.css,初始化一些样式表盘。接下来,让我们制作表盘。首先是面板部分。对于面板的html部分,我们只需要一个节点。剩下的用css完成

首先我们给表盘一个基础style确定基本结构,添加一些渐变和阴影来创建一点立体感#watch.frame-face{position:relative;宽度:30em;高度:30em;保证金:2em自动;边界半径:15em;背景:-webkit-linear-gradient(顶部,#f9f9f9,#666);-线性渐变(顶部,#f9f9f9,#666);背景:线性渐变(顶部,#f9f9f9,#666);box-shadow:0.5em0.5em4emrgba(0,0,0,0.8);}之后我们使用伪类元素绘制径向渐变来营造层次感,做出立体效果拨号更激烈#watch.frame-face:before{内容:'';宽度:29.4em;高度:29.4em;边界半径:14.7em;位置:绝对;顶部:.3em;左:.3em;背景:-webkit-径向渐变(中心椭圆,rgba(246、248、249、1)0%,rgba(229、235、238、1)65%,rgba(205、212、217、1)66%,rgba(245,247,249,1)100%);背景:-moz-径向渐变(中心椭圆,rgba(246、248、249、1)0%,rgba(229、235、238、1)65%,rgba(205、212、217、1)66%,RGBA(245,247,249,1)100%);背景:径向渐变(中心椭圆,rgba(246,248,249,1)0%,rgba(229,235,238,1)65%,rgba(205,212,217,1)66%,rgba(245,247,249,1)100%);}这个还是不太顺眼,我们加个伪类来做一个可变磁盘主面板,通过阴影和渐变造成的对比效果,使这个表盘看起来更真实#watch.frame-face:after{content:'';宽度:28em;高度:28em;边界半径:14.2em;位置:绝对;顶部:.9em;左:.9em;box-shadow:insetrgba(0,0,0,.2).2em.2em1em;边框:.1em实心rgba(0,0,0,.2);背景:-webkit-linear-gradient(top,#fff,#ccc);背景:-moz-linear-gradient(top,#fff,#ccc);background:linear-gradient(top,#fff,#ccc);}刻度盘周围有小的刻度点,这样我们就可以知道当前的具体时间,这里我们给刻度盘设置60个刻度点,我们先写一个dom节点的刻度点容器,因为刻度点太多,我们会用js生成来个基本样式#分钟标记li{显示:块;宽度:0.2em;高度:0.6em;背景:#929394;位置:绝对;顶部:50%;左:50%;margin:-0.4em00-0.1em;}这里我们通过transform调整每个尺度点的位置,达到相应的效果。整个点的比例比其他的更突出,所以我们需要找出整个点的位置给比例添加一个突出的效果window.onload=function(){//生成一个比例letmarkWrap=document.getElementById('minute-marks')for(letindex=0;index<60;index++){letmarkItem=document.createElement('li')markItem.style.cssText="transform:rotate("+index*6+"deg)translateY(-12.7em)";if(index%5==0){markItem.style.宽度=“0.3em”;markItem.style.height="1em";}markWrap.appendChild(markItem)}}这里也可以考虑酌情加入一些尺度
  • 3
  • 6
  • 9
  • 12
  • #digits{宽度:30em;高度:30em;边界半径:15em;位置:绝对;顶部:0;左:50%;margin-left:-15em;}#digitsli{字体大小:1.6em;显示:块;宽度:1.6em;高度:1.6em;位置:绝对;顶部:50%;左:50%;行高:1.6em;文本对齐:居中;weight:bold;}#digitsli:nth-child(1){transform:translate(7em,0)}#digitsli:nth-child(2){transform:translate(0,7em)}#digitsli:nth-child(3){transform:translate(-7em,0)}#digitsli:nth-child(4){transform:translate(0,-7em)}这里我们直接把指针的轴做成中心点在#digits:before{内容:''之前旋转;宽度:1.6em;高度:1.6em;边界半径:.8em;位置:绝对;顶部:50%;左:50%;保证金:-.8em00-.8em;背景:#121314;}#digits:之后{内容:'';宽度:4em;高度:4em;边界半径:2.2em;位置:绝对;顶部:50%;左:50%;保证金:-2.1em00-2.1em;边框:.1em实心#c6c6c6;背景:-webkit-径向渐变(中心椭圆,rgba(200,200,200,0),rgba(190,190,190,1)90%,rgba(130,130,130,1)100%);背景:-moz-径向渐变(中心椭圆,rgba(200,200,200,0),rgba(190,190,190,1)90%,rgba(130,130,130,1)100%);background:radial-gradient(ellipseatcenter,rgba(200,200,200,0),rgba(190,190,190,1)90%,rgba(130,130),1100%);}指针开发下面我们来开发表盘指针。这里我们准备三个dom,分别是时针、分针和秒针。
    时针的主体部分分为针柱和针尖,针柱为长方形。针尖可以由一个半圆和一个三角形组成#watch.hours-hand{width:.8em;高度:7em;边界半径:00.9em.9em;背景:#232425;位置:绝对;底部:50%;左:50%;保证金:00-.8em-.4em;盒子-阴影:#232425002px;变换原点:0.4em6.2em;变换:旋转(-25度);}#watch.hours-hand:before{content:'';背景:继承;宽度:1.8em;高度:.8em;边界半径:00.8em.8em;框阴影:#232425001px;位置:绝对;顶部:-.7em;left:-.5em;}#watch.hours-hand:after{content:'';宽度:0;高度:0;边框:.9em实心#232425;边框宽度:0.9em2.4em.9em;左边框颜色:透明;右边框颜色:透明;位置:绝对;顶部:-3.1em;left:-.5em;}注意这里我们使用了属性transform-origin,这个属性是用来设置rotate旋转的参考点,在dom旋转的时候会用到Rotate,如果不设置的话,分针会以自己的中心点旋转。为了区分,我们给不同的指针赋予了不同的样式,而分针就是一个长方形。#watch.minutes-hand{width:.8em;高度:12.5em;边界半径:.5em;背景:#343536;位置:绝对;底部:50%;左:50%;02像素;transform-origin:0.4em11em;}秒针开发秒针由三部分组成,分别是针尾端的圆角矩形、重叠中心点的圆圈和很长的针尖。也可以做成圆角/*secondshand*/#watch.seconds-hand{width:.2em;高度:14em;边界半径:.1em.1em00/10em10em00;背景:#c00;位置:绝对;底部:50%;左:50%;保证金:00-2em-.1em;盒子阴影:rgba(0,0,0,.8)00.2em;transform-origin:0.1em12em;}#watch.seconds-hand:after{content:'';宽度:1.4em;高度:1.4em;边界半径:.7em;背景:继承;位置:绝对;左:-.65em;bottom:1.35em;}#watch.seconds-hand:before{content:'';宽度:.8em;高度:3em;边界半径:.2em.2em.4em.4em/.2em.2em2em2em;盒子阴影:rgba(0,0,0,.8)00.2em;背景:继承;位置:绝对;左:-.35em;bottom:-3em;}让指针旋转上面我们开发了表盘和指针的基本样式,让指针旋转。刚才我们在写css的时候,已经知道指针的位置是通过transform转动一定的角度来实现的,所以我们想要实现指针的移动,只要定期改变角度就可以了setInterval(function(){vartime=newDate();varhour=time.getHours()varminute=time.getMinutes();varsecond=time.getSeconds();varhournum;if(hour>12){小时数=((小时-12)+分钟/60)*30;}else{小时数=(小时+分钟/60*100)*30;}varminnum=(minute+second/60)*6+second/60;varsennum=second*6;document.getElementsByClassName("时针")[0].style.transform="rotate("+hournum+"deg)"document.getElementsByClassName("分针")[0].style.transform="旋转(""+minnum+"deg)"document.getElementsByClassName("seconds-hand")[0].style.transform="rotate("+sennum+"deg)"},1000);这样,你就完成了。数字手表开发指针很直观,但不如数字直观准确,所以我们可以加一个小数字表盘。数字表盘更简单。让我们获取当前的小时、分钟和秒,并定期刷新它。这里需要主机栏拨盘水平,不能盖住手。#watch.digital-wrap{width:9em;高度:3em;边框:.1em实心#222;边界半径:.2em;位置:绝对;顶部:50%;左:50%;保证金:3em00-4.5em;溢出:隐藏;背景:#4c4c4c;背景:-webkit-线性渐变(顶部,#4c4c4c,#0f0f0f);背景:-moz-线性渐变(顶部,#4c4c4c,#0f0f0f);背景:-ms-线性渐变(顶部,#4c4c4c,#0f0f0f);背景:-o-线性渐变(顶部,#4c4c4c,#0f0f0f);背景:线性渐变(到底部,#4c4c4c,#0f0f0f);}#watch.digital-wrapul{float:left;宽度:2.9em;高度:3em;border-right:.1emsolid#000;颜色:#ddd;字体系列:Consolas、monaco、monospace;r;line-height:3em;}#watch.digital-wrapul:last-child{width:3em;border:none}//接收上面的指针,把js往后转if(hour<10){hour="0"+parseInt(hour);}if(minute<10){minute="0"+parseInt(minute);}if(second<10){second="0"+parseInt(second);}document.getElementsByClassName("digit-hours")[0].innerHTML=hour;document.getElementsByClassName("digit-minutes")[0].innerHTML=分钟;document.getElementsByClassName("digit-seconds")[0].innerHTML=秒;你完成了