Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 日本亚洲黄色,手机看片亚洲,亚洲免费在线视频播放

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          HTML使用Canvas繪制動(dòng)畫時(shí)鐘

          么是Canvas

          <canvas> 是HTML中的一個(gè)元素,它可被用來通過 JavaScript(Canvas API 或 WebGL API)繪制圖形及圖形動(dòng)畫。

          Canvas API 提供了一個(gè)通過 JavaScriptHTML<canvas> 元素來繪制圖形的方式。它可以用于動(dòng)畫、游戲畫面、數(shù)據(jù)可視化、圖片編輯以及實(shí)時(shí)視頻處理等方面。

          <canvas>標(biāo)簽本身沒有繪圖能力,它僅僅是圖形的容器。在HTML,一般通過Javascript語言來完成實(shí)際的操作。

          創(chuàng)建HTML頁面并添加繪圖容器

          本文通過Javascript操作Canvas制作一個(gè)簡(jiǎn)單的顯示當(dāng)前時(shí)間的動(dòng)畫時(shí)鐘,了解和學(xué)習(xí)簡(jiǎn)單的canvas用法,僅以拋磚引玉。

          首先創(chuàng)建一個(gè)HTML文件,為了方便管理,使用一個(gè)div標(biāo)簽包裹兩個(gè)canvas標(biāo)簽,并加上一些簡(jiǎn)單的css樣式。

          <!doctype html>
          <html lang="zh-cn">
          <head><title>Canvas繪制動(dòng)畫時(shí)鐘</title>
          <style>
          html,body{margin:0;padding:0}
          #clockWrap {
          	position: relative;
          }
          canvas {
          	position: absolute;
          }
          #clock-ui {
          	z-index: 2;
          }
          #clock-plate {
          	z-index: 1;
          }
          </style>
          </head>
          <body>
            <div id="clockWrap">
            <canvas id="clock-plate"></canvas>
            <canvas id="clock-ui"></canvas>
          </div>
          <script></script>
          </body></html>

          本示例中使用了兩個(gè)canvas標(biāo)簽(為什么使用兩個(gè),一個(gè)不是更簡(jiǎn)單嗎?),一個(gè)用于繪制鐘面,一個(gè)根據(jù)當(dāng)前時(shí)間實(shí)時(shí)顯示和更新時(shí)針、分針和秒針的動(dòng)態(tài)指向。好了,話不多說,開干。

          繪制鐘面刻度

          一個(gè)簡(jiǎn)單的時(shí)鐘,可以分為鐘面上的刻度和指針。其中刻度和12個(gè)數(shù)字是固定的,我們可以將它們繪制在當(dāng)作背景的canvas上(示例中id為clock-plate的canvas)。

          (1)要使用canvas,首先必須通過容器獲取渲染上下文:

          var $=function(id){return document.querySelector(id);}//這個(gè)函數(shù)只是為了方便獲取dom元素
          const canvasbg=$("#clock-plate"),
                canvas=$("#clock-ui"),
                ctx = canvasbg.getContext("2d"),//背景容器上下文
                ctxUI = canvas.getContext("2d");//指針容器上下文,后面代碼要用
          //定義畫布寬度和高度,時(shí)鐘圓直徑,并設(shè)置畫布大小
          const oW=1000,oH=800,cW=400,r=cW/2,oX=oW/2,oY=oH/2;
          canvas.width=oW;
          canvas.height=oH;
          canvasbg.width=oW;
          canvasbg.height=oH;

          (2)畫鐘的邊框,為了好看,這里畫兩個(gè)圈:

           //畫出時(shí)鐘外圓框
            ctx.lineWidth = 12;
          	ctx.beginPath();
          	ctx.arc(oX, oY, r+14, 0, 2 * Math.PI);
          	ctx.stroke();
          	ctx.closePath();
          	ctx.lineWidth = 8;
          	//畫出時(shí)鐘內(nèi)圓框(刻度圈)
          	ctx.beginPath();
          	ctx.arc(oX, oY, r, 0, 2 * Math.PI);
          	ctx.stroke();
          	ctx.closePath();
          	ctx.beginPath();

          邊框效果圖

          (3)繪制刻度線和數(shù)字,可以利用三角函數(shù)計(jì)算出每個(gè)刻度的坐標(biāo):

          利用三角函數(shù)計(jì)算刻度線的坐標(biāo)位置

          鐘面上有12個(gè)大格,從正上方12開始,它們的度數(shù)分別是270,300,330,0,30,60,90,120,150,180,210,240。然后利用JS的Math.sin和Math.cos分別計(jì)算出各大格的坐標(biāo)。注意:js中Math.sin()和Math.cos()的參數(shù)不是角度數(shù)弧度。可以使用Math.PI/180*角度來轉(zhuǎn)化,比如將30度轉(zhuǎn)換成弧度=Math.PI/180*30

          //繪制鐘表中心點(diǎn)
          	ctx.beginPath();
          	ctx.arc(oX, oY, 8, 0, 2 * Math.PI);//圓心
          	ctx.fill();
          	ctx.closePath();
          	//設(shè)置刻度線粗細(xì)度
          	ctx.lineWidth = 3;
          	//設(shè)置鐘面12個(gè)數(shù)字的字體、大小和對(duì)齊方式
          	ctx.font = "30px serif";
          	ctx.textAlign="center";
          	ctx.textBaseline="middle";
          	var kdx,kdy;
          	//繪制12個(gè)大刻度和12個(gè)數(shù)字
          	//為方便計(jì)算,先定義了0-11這12個(gè)刻度對(duì)應(yīng)的度數(shù),也可以直接定義對(duì)應(yīng)的弧度。
          	const hd=Math.PI/180,degr=[270,300,330,0,30,60,90,120,150,180,210,240];
          	for(var i=0;i<12;i++){
          		kdx=oX+Math.cos(hd*degr[i])*(r-3);
          		kdy=oY+Math.sin(hd*degr[i])*(r-3);
          		ctx.beginPath();
          		ctx.arc(kdx, kdy, 6, 0, 2 * Math.PI);//畫圓形大刻度
          		ctx.fill();
              //繪制刻度對(duì)應(yīng)的數(shù)字
          		ctx.strokeText(i==0? 12 : i,oX+Math.cos(hd*degr[i])*(r-24),oY+Math.sin(hd*degr[i])*(r-24));
          		ctx.closePath();
          	}
          	
          	//繪制小刻度
          	ctx.lineWidth = 2;
          	for(var i=0;i<60;i++){
          		if(i % 5 == 0) continue;//跳過與刻度重疊的刻度
          		x0=Math.cos(hd*i*6);
          		y0=Math.sin(hd*i*6);
          		ctx.beginPath();
          		ctx.moveTo(oX+x0*(r-10), oY+y0*(r-10)); 
          		ctx.lineTo(oX+x0*r, oY+y0*r); //畫短刻度線
          		ctx.stroke(); 
          		ctx.closePath();
          	}

          效果如圖:

          鐘面效果圖

          (4)根據(jù)當(dāng)前時(shí)間繪制指針

          習(xí)慣上,時(shí)針粗短,分針略粗而長(zhǎng),秒針細(xì)長(zhǎng)。為加大區(qū)別,示例中秒針細(xì)長(zhǎng)并且繪制成紅色。

          function drawHp(i){//繪制時(shí)針
          	const x0=Math.cos(hd*i*30),y0=Math.sin(hd*i*30);
          	drawPointer(oX,oY,oX+x0*(r-90),oY+y0*(r-90),10,"#000000");
          }
          function drawMp(i){//繪制分針
          	const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
          	drawPointer(oX,oY,oX+x0*(r-60),oY+y0*(r-60),5,"#000000");
          }
          function drawSp(i){//繪制秒針
          	const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
          	drawPointer(oX,oY,oX+x0*(r-20),oY+y0*(r-20),2,"#FF0000");
          }
          //抽取出繪制三種指針時(shí)共同的部分,注意指針繪制在渲染上下文ctxUI中
          function drawPointer(ox,oy,tx,ty,width,color){
          	ctxUI.strokeStyle = color;
          	ctxUI.lineCap = "round";
          	ctxUI.lineWidth = width;
          	ctxUI.beginPath();
          	ctxUI.moveTo(ox, oy);
          	ctxUI.lineTo(tx,ty);
          	ctxUI.stroke();
          	ctxUI.closePath();
          }

          現(xiàn)在已經(jīng)有了繪制三種指針的方法,參數(shù)是當(dāng)前時(shí)間的時(shí)、分和秒,將根據(jù)它們的值確定指針的坐標(biāo)。不過,因?yàn)槭褂玫氖悄J(rèn)的convas坐標(biāo)體系,0值實(shí)際指向3的位置,需要小小的修正一下。

          window.requestAnimationFrame(function fn(){
          		var d = new Date();
          		ctxUI.clearRect(0,0,oW,oH);
          		//度數(shù)從0開始,而0在3刻度(15分/秒位置),修正為全值減15,如果小于0則修正回來
              var hour=d.getHours(),minute=d.getMinutes()-15,second=d.getSeconds()-15;
          		hour=hour>11? hour-15 : hour-3;
          		drawHp(hour>=0? hour : 12+hour);
          		drawMp(minute>=0? minute : 60+minute);
          		drawSp(second>=0? second : 60+second);
          		window.requestAnimationFrame(fn);
          });

          接下來,調(diào)用window.requestAnimationFrame,在其中繪制并更新指標(biāo)的位置。看看效果如何:

          指針繪制情況與實(shí)際時(shí)間相符

          貌似效果有了,截圖時(shí)電腦上的時(shí)間是10時(shí)17分,指針繪制上,時(shí)針指向10時(shí),分針指向17。嗯,感覺有點(diǎn)別扭?對(duì)了,時(shí)針和分針怎么是端端正正地指向它們的整時(shí)整分刻度上呢?實(shí)際鐘表上時(shí)針和分針是展示動(dòng)態(tài)進(jìn)度的,此時(shí)時(shí)針應(yīng)該越過10時(shí)的位置才對(duì)。沒關(guān)系,我們?cè)诶L制時(shí)針和分針時(shí)別點(diǎn)東西,讓它的角度值加上分針和秒針的值試試。

          //修改后的繪制三種指針的方法
          function drawHp(i,f,m){//繪制時(shí)針,參數(shù):時(shí),分,秒
          	const x0=Math.cos(hd*(i+(f/60)+(m/600))*30),y0=Math.sin(hd*(i+(f/60)+(m/600))*30);
          	drawPointer(oX,oY,oX+x0*(r-90),oY+y0*(r-90),10,"#000000");
          }
          function drawMp(i,f){//繪制分針,參數(shù),分,秒
          	const x0=Math.cos(hd*(i+(f/60))*6),y0=Math.sin(hd*(i+(f/60))*6);
          	drawPointer(oX,oY,oX+x0*(r-60),oY+y0*(r-60),5,"#000000");
          }
          function drawSp(i){//繪制秒針
          	const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
          	drawPointer(oX,oY,oX+x0*(r-20),oY+y0*(r-20),2,"#FF0000");
          }

          再來看看效果,嗯,立竿見影呀:

          指針指向更合理了

          到此為止,canvas繪制一個(gè)簡(jiǎn)易時(shí)鐘就完成了。下面繼續(xù)優(yōu)化一下。剛才使用requestAnimationFrame方法即時(shí)更新繪制情況。這個(gè)方法與刷新率有關(guān),看看mdn上面怎么說的:

          window.requestAnimationFrame() 方法會(huì)告訴瀏覽器你希望執(zhí)行一個(gè)動(dòng)畫。它要求瀏覽器在下一次重繪之前,調(diào)用用戶提供的回調(diào)函數(shù)。

          對(duì)回調(diào)函數(shù)的調(diào)用頻率通常與顯示器的刷新率相匹配。雖然 75hz、120hz 和 144hz 也被廣泛使用,但是最常見的刷新率還是 60hz(每秒 60 個(gè)周期/幀)。為了提高性能和電池壽命,大多數(shù)瀏覽器都會(huì)暫停在后臺(tái)選項(xiàng)卡或者隱藏的 <iframe> 中運(yùn)行的 requestAnimationFrame()。

          本示例中,更新指針的位置并不需要很高的刷新頻率,可以通過節(jié)流進(jìn)行一下優(yōu)化:

          var fps = 5, fpsInterval = 1000 / fps,lastTime = new Date().getTime(); //記錄上次執(zhí)行的時(shí)間
          function runStep() {
              requestAnimationFrame(runStep);
              var d=new Date(),now = d.getTime()
              var elapsed = now - lastTime;
              if (elapsed > fpsInterval) {
          				ctxUI.clearRect(0,0,oW,oH);
                  lastTime = now - (elapsed % fpsInterval); 
          			//度數(shù)從0開始,而0在3刻度(15分/秒位置),修正為全值-15,如果小于0則用60減回
                  var hour=d.getHours(),minute=d.getMinutes()-15,second=d.getSeconds()-15;//console.log(d.getSeconds(),second);
                  hour=hour>11? hour-15 : hour-3;
                  drawHp(hour>=0? hour : 12+hour,minute+15,second+15);
                  drawMp(minute>=0? minute : 60+minute,second+15);
                  drawSp(second>=0? second : 60+second);
              }
          }
          runStep();

          當(dāng)然,實(shí)現(xiàn)時(shí)鐘的方法是很多,比如可以使用畫布的旋轉(zhuǎn)(rotate方法)來實(shí)現(xiàn)指針的動(dòng)態(tài)轉(zhuǎn)動(dòng)等等。

          完整HTML+JS源碼:

          源:量子位

          本文約2509字,建議閱讀4分鐘。

          本文介紹資深前端用HTML+CSS繪畫,全程不用PS、AI這種圖形化的圖片編輯器,單純敲一行行代碼純手工繪制。

          HTML不是編程語言,但這并不妨礙精通它的大佬玩出花來。

          普通的前端,用HTML+CSS制作網(wǎng)頁,元素簡(jiǎn)單,工具豐富。

          大佬級(jí)前端,用HTML+CSS繪畫,全程不用PS、AI這種圖形化的圖片編輯器,單純敲一行行代碼純手工繪制。

          把代碼轉(zhuǎn)換之后,就變成了鮮嫩的水果:

          或者畫出洛可可風(fēng)格的古典女性肖像:

          還有弗拉芒巴洛克肖像風(fēng)格的人物畫像,充滿了中世紀(jì)的禁欲感:

          現(xiàn)代的也有,比如這位在粉色燈光下的著禮服的妹子:

          以及充滿者50年代氣息的復(fù)古風(fēng)人物海報(bào):

          曲線、光影、漸變,每個(gè)元素都相當(dāng)復(fù)雜。

          而且,創(chuàng)作過程中不用SVG,只用Atom文本編輯器和Chrome開發(fā)者工具。

          也就是說,畫面上的每一條曲線和漸變、每一處高光和陰影、每一根頭發(fā)和睫毛、每一片蕾絲和褶皺,都是一行行代碼從頭敲出來的!

          如此精細(xì)程度和創(chuàng)造力,讓學(xué)美術(shù)的網(wǎng)友感嘆“學(xué)畫畫不如寫代碼”,讓學(xué)計(jì)算機(jī)的同學(xué)覺得“別人寫的這么藝術(shù),一定是我的教科書打開方式不對(duì)”。

          真·交叉學(xué)科大佬。

          這個(gè)項(xiàng)目也一度登上了GitHub Trending排行榜第二名:

          并且Issues里都是諸多用戶的膜拜:厲害!崇拜!太棒了!

          它們的作者,是灣區(qū)前端大神Diana Smith小姐姐,她目前是企業(yè)及軟件開發(fā)商Atlassian的一名資深Web開發(fā)。


          繪制過程

          Diana在專門討論CSS的網(wǎng)站CSS-Tricks寫下了詳細(xì)的教程。

          畫出這樣一個(gè)圖形分成幾步?

          如果不用CSS,一般都是直接嵌入這個(gè)特殊的圖形。

          如果用CSS,那么就從黑色矩形開始,然后在兩側(cè)加上上兩個(gè)

          與白色背景顏色匹配的邊框半徑元素。



          先畫出一個(gè)黑色矩形,然后兩邊用圓弧遮擋。有了基礎(chǔ)形狀后,下一步就是給它添上漸變的背景。但是如果用矩形方式填充,得到的效果就是這樣的:

          Diana的辦法是:在保留矩形的同時(shí),加上兩個(gè)彎曲的div,把凹進(jìn)去的部分也填充上。

          最后完整的代碼是這樣的:

          div{
            width: 500px;
            height: 350px;
            background: #000;
            position: relative;
          
            &::after, &::before{
              width: 20%;
              height: 100%;    
              position: absolute;
              top: 0;
              z-index:2;
              content: "";    
          
              background: #1e5799; 
          background: -moz-linear-gradient(top, #1e5799 0%, #7db9e8 100%); 
          background: -webkit-linear-gradient(top, #1e5799 0%,#7db9e8 100%);
          background: linear-gradient(to bottom, #1e5799 0%,#7db9e8 100%); 
          filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 ); 
            }
          
            &::after{
              border-radius: 100% 0% 0% 100%;   
              right: 0;
            }
          
            &::before{
              border-radius: 0 100% 100% 0;   
              left: 0;
            }   
          }
          
          body{
            background: #1e5799; 
          background: -moz-linear-gradient(top, #1e5799 0%, #7db9e8 100%); 
          background: -webkit-linear-gradient(top, #1e5799 0%,#7db9e8 100%); 
          background: linear-gradient(to bottom, #1e5799 0%,#7db9e8 100%); 
          filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 ); 
          }

          你也可以去這個(gè)完成查看CSS樣式的實(shí)際運(yùn)行效果:

          https://codepen.io/jean-jordan/pen/KeKaBw

          剛剛我們畫的那幅畫像不像人的脖子?好的,我們?cè)倩氐饺讼癞嬌希珼iana繪制人物的脖子也是類似的過程。

          在上面這張圖里,我們看到了Diana如何逐步改形狀,最終得到了油畫中人物的脖子。

          但是僅僅會(huì)畫各種幾何形狀,是無法生成藝術(shù)品的,Diana總結(jié)了她在繪圖中的5個(gè)重要CSS屬性。

          1、邊界半徑(border-radius)

          邊界半徑是為了讓矩形的邊角過渡得更自然,對(duì)于大多數(shù)網(wǎng)頁開發(fā)者來說,只需一個(gè)參數(shù)border-radius,可以設(shè)定不同的半徑數(shù)值。

          border-radius: 15px 10px 40px 30px / 40px 10px 15px 30px;

          2、盒子陰影(box-shadow)

          對(duì)多個(gè)盒子陰影進(jìn)行分層是增加深度的最佳方法之一。框陰影將粘附到html容器的邊緣,也會(huì)沿著邊界半徑定義的邊緣。

          box-shadow: 6px -11px 20px 1px red, -15px -15px 5px -10px blue, inset 5px 5px 35px 10px green;


          開發(fā)者可以指定模糊半徑,以及陰影是向內(nèi)延伸還是向外延伸。

          3、變形(transform)

          變形的主要方式有:旋轉(zhuǎn)(rotate)、縮放(scale)和傾斜(skew)

          transform: rotate(-45deg)
          transform: scale(0.7, 1.3)
          transform: skew(25deg, 30deg);

          此外還有透視,讓物體產(chǎn)生遠(yuǎn)小近大的視覺效果,或者是僅僅為畫出一個(gè)梯形。

          transform: perspective(10px) rotateY(5deg);

          4、線性梯度(linear-gradient)和徑向梯度(radial-gradient)

          線性梯度用于定義一個(gè)方向上的漸變效果,徑向梯度用于定義圓和橢圓形的漸變效果

          background-image: linear-gradient(0deg, blue, transparent 60%),
          radial-gradient(circle at 70% 30%, purple, transparent 40%);

          5、層疊(overflow)

          層疊是一種將大量雜亂元素填充到一個(gè)整齊的包中的方法,可以創(chuàng)建一些有趣的形狀。在變形那部分的基礎(chǔ)上使用hidden參數(shù),可以把邊緣遮蓋起來。

          overflow: hidden;

          以上5種元素缺一不可,隨便少一種都會(huì)產(chǎn)生怪異的效果。

          從左至右分別是缺少邊界半徑、陰影、變形、梯度、層疊的效果(點(diǎn)擊查看大圖)

          不過即使這樣,也很有抽象藝術(shù)的美感,仿佛在看畢加索的作品。

          只適用于Chrome

          不過,由于這是一個(gè)純個(gè)人藝術(shù)創(chuàng)作,Diana小姐姐并不關(guān)心瀏覽器適配性。

          因此,這些代碼在Chrome里可以完美展現(xiàn),但如果用其他瀏覽器打開,可能就會(huì)出現(xiàn)不一樣的效果。

          比如,MAC上的Safari瀏覽器打開,妹子的眼睛就方了:

          肩膀上的高光,變成了一個(gè)大圈圈:

          胸前的禮服上,也被潑了一道墨:

          如果用早期的Chrome打開,會(huì)出現(xiàn)驚悚的頭身分離的效果:

          早期的Opera瀏覽器,打開之后臉方了:

          Windows 7上從IE 6到IE 11,顯示出來的都是這個(gè)鬼樣子:

          濃重的線條,甚至有點(diǎn)抽象藝術(shù)的感覺。

          同樣是早期IE,放到Mac上也一樣鬼畜,這是IE 5.1.7的效果:

          還有人試了試,在Windows 98系統(tǒng)的IE 7瀏覽器打開,會(huì)變成非常像素風(fēng)的樣子:

          最恐怖的是三星手機(jī)上的夜間模式打開:

          連人種都變了啊!

          其他的幾張畫,換個(gè)瀏覽器打開也比較鬼畜。

          妹子你bra里的鋼圈出來了啊!

          拉夫領(lǐng)變得透明而有光澤,領(lǐng)口的蕾絲干脆斷掉了,仿佛是逃難時(shí)期的肖像畫。

          最后,如果你在iPhone上裝了Chrome,出來的也是Safari的效果,想看完整效果的話,請(qǐng)?jiān)诎沧渴謾C(jī)或者電腦的Chrome上打開。

          因此,有不少網(wǎng)友都覺得,這幾幅畫可以當(dāng)成瀏覽器測(cè)試項(xiàng)目,一試就能知道內(nèi)核用的是誰家的。

          反向繪圖

          CSS太難,學(xué)不會(huì)?不要緊,雖然我們不能把代碼變成圖片,但是可以把圖片變成代碼啊。

          沒錯(cuò),就是ASCII藝術(shù),早在DOS時(shí)期,就有人用命令行界面來顯示圖片。直到今天已成為一種流行的互聯(lián)網(wǎng)文化。

          用單色字符來畫出世界名畫已經(jīng)不算新鮮事。最近又有個(gè)碼農(nóng)開發(fā)了一個(gè)新的項(xiàng)目Primg,讓任何一幅畫都可以用質(zhì)數(shù)來表示。

          比如蒙拉麗莎,就可以用一個(gè)3萬位的質(zhì)數(shù)二進(jìn)制方式繪制出來。

          傳送門:

          作者的GitHub:
          https://github.com/cyanharlow

          作者博客主頁:
          https://diana-adrianne.com/

          教程:
          https://css-tricks.com/solving-lifes-problems-with-css/

          用質(zhì)數(shù)生成任意ASCII藝術(shù):
          https://github.com/geonnave/primg

          —完—

          關(guān)注清華-青島數(shù)據(jù)科學(xué)研究院官方微信公眾平臺(tái)“ THU數(shù)據(jù)派 ”及姊妹號(hào)“ 數(shù)據(jù)派THU ”獲取更多講座福利及優(yōu)質(zhì)內(nèi)容。

          次畫的是QQ瀏覽器圖標(biāo),比較復(fù)雜,各種高光漸變色內(nèi)陰影等。其實(shí),CSS畫畫就和用PS畫畫一樣,從最底層,一層一層往上畫,最后合成一張圖:

          CSS畫QQ瀏覽器圖標(biāo)

          1、讓容器居中,同時(shí)將body背景變成灰色,可以看得更清楚

          html,body{
           height:100%;
          }
          body{
           display: flex;
           justify-content: center;
           align-items: center;
           background-color: #eee;
          }
          

          2、畫一個(gè)藍(lán)色漸變圓形,作為外邊的藍(lán)色環(huán)(現(xiàn)在還是圓,不是環(huán)),相對(duì)定位,這樣里面的所有元素都可以以它為定位點(diǎn)了:

          .logo{
           width: 300px;
           height:300px;
           background: linear-gradient(to right bottom,#66adff,#1a6adb);
           border-radius: 999px;
           position: relative;
          }
          <div class="logo"></div>
          

          效果圖:

          3、給 logo 的 after 上個(gè)灰色,做出鏤空效果:

          .logo:after{
           position: absolute;
           width: 150px;
           height: 150px;
           content:'';
           background-color: #eee;
           border-radius: 999px;
           z-index: 15;
           left: 50%;
           top:50%;
           margin-left: -75px;
           margin-top:-75px;
          }
          

          效果圖:

          4、給 logo 的 before 加上漸變背景,漸變色和 logo 一樣,只不過顏色反過來,這樣有凹陷的感覺,同時(shí)將它治愈 after 的下面,比 after 稍微大點(diǎn):

          .logo:before{
           position: absolute;
           width: 166px;
           height: 166px;
           content:'';
           background: linear-gradient(to right bottom,#1a6adb,#66adff);
           border-radius: 999px;
           z-index: 9;
           left: 50%;
           top:50%;
           margin-left: -83px;
           margin-top:-83px;
          }
          

          效果圖:

          5、由于邊框不支持漸變,我們只能接著加div,來畫出剛才的 before 的高光:

          .before-high-light{
           position: absolute;
           width: 168px;
           height: 168px;
           content:'';
           background: linear-gradient(to right bottom,#96d9ff,#5cafff,#96d9ff);
           border-radius: 999px;
           z-index: 8;
           left: 50%;
           top:50%;
           margin-left: -84px;
           margin-top:-84px;
          }
          <div class="logo">
           <div class="before-high-light"></div>
          </div>
          

          效果圖:

          6、畫左上角的大片高光,它是被遮擋在中間圓的下面,所以,z-index要更低,同時(shí)它的顏色是從半透明的白色到無,大小要比 logo 小個(gè)一兩像素:

          .left-top-high-light{
           position: absolute;
           width: 298px;
           height: 298px;
           content:'';
           background: linear-gradient(to right bottom,rgba(255,255,255,.8),rgba(255,255,255,0) 50%);
           border-radius: 999px;
           z-index: 7;
           left: 50%;
           top:50%;
           margin-left: -149px;
           margin-top:-149px;
          }
          <div class="logo">
           <div class="before-high-light"></div>
           <div class="left-top-high-light"></div>
          </div>
          

          效果圖:

          7、畫云,一共三朵,放在右下角,白色背景,利用內(nèi)陰影,給云上色(放在chrome調(diào)整,這塊比較麻煩,需要細(xì)細(xì)調(diào)),由于css容器樣式的局限性,不能讓云成為一個(gè)整體,建議這類可以考慮用svg或者canvas實(shí)現(xiàn),我這里還是用div來實(shí)現(xiàn):

          .clouds{
           position: absolute;
           width: 90px;
           height: 90px;
           background-color: #fff;
           border-radius: 999px;
           z-index: 16;
           bottom: 20px;
           right:60px;
           box-shadow: -3px 15px 12px 0 rgba(42,127,236,.3) inset;
          }
          .clouds:before{
           content:'';
           position: absolute;
           width: 100px;
           height: 70px;
           background-color: #fff;
           border-radius: 999px;
           bottom: -20px;
           left:-30px;
           box-shadow: 5px -5px 8px 0 rgba(42,127,236,.3) inset;
          }
          .clouds:after{
           content:'';
           position: absolute;
           width: 123px;
           height: 60px;
           background-color: #fff;
           border-radius: 0 999px 999px 0;
           bottom: -20px;
           right:-30px;
           box-shadow: -16px -9px 11px 0 rgba(42,127,236,.3) inset;
          }
          <div class="logo">
           <div class="before-high-light"></div>
           <div class="left-top-high-light"></div>
           <div class="clouds"></div>
          </div>
          

          效果圖:

          8、左下角,云之下的高光,這個(gè)高光容器,寬高為 logo 的一半,左下角為全圓角,其他三個(gè)角可以不設(shè)置圓角,z-index 置于前面所有內(nèi)容的下面,logo 的上面,背景為從左上到右下,從無到有的白色漸變,如果覺得太生硬,可以稍微給點(diǎn)羽化:

          .left-bottom-high-light{
           position: absolute;
           width: 150px;
           height: 150px;
           content:'';
           background: linear-gradient(to right bottom,rgba(255,255,255,0) 50%,rgba(255,255,255,1) 70%);
           border-radius:0 0 0 999px;
           z-index: 14;
           left:0;
           bottom:0;
           filter: blur(1px);
          }
          <div class="logo">
           <div class="before-high-light"></div>
           <div class="left-top-high-light"></div>
           <div class="clouds"></div>
           <div class="left-bottom-high-light"></div>
          </div>
          

          效果圖:

          9、底部陰影 shadow,可以用背景色+羽化來實(shí)現(xiàn),也可以用 box-shadow 來實(shí)現(xiàn),這里我們用第一種方法:

          .shadow{
           position: absolute;
           width:200px;
           height:10px;
           content:'';
           background:#666;
           border-radius:50%;
           z-index: 1;
           left: 50%;
           bottom:-3px;
           margin-left: -100px;
           filter: blur(4px);
          }
          <div class="logo">
           <div class="before-high-light"></div>
           <div class="left-top-high-light"></div>
           <div class="clouds"></div>
           <div class="left-bottom-high-light"></div>
           <div class="shadow"></div>
          </div>
          

          效果圖:

          10、頂部高光 high-light,實(shí)現(xiàn)方法和上面的陰影一樣:

          .high-light{

          position: absolute;

          width:100px;

          height:20px;

          content:'';

          background:rgba(255,255,255,.9);

          border-radius:50%;

          z-index: 15;

          left: -8px;

          top: 33px;

          filter: blur(4px);

          transform: rotate(-45deg);

          }

          <div class="logo">

          <div class="before-high-light"></div>

          <div class="left-top-high-light"></div>

          <div class="clouds"></div>

          <div class="left-bottom-high-light"></div>

          <div class="shadow"></div>

          <div class="high-light"></div>

          </div>

          最終效果圖:


          主站蜘蛛池模板: 成人精品一区久久久久| 国内精自品线一区91| 日韩免费视频一区| 风间由美性色一区二区三区| 少妇人妻精品一区二区| 日韩国产精品无码一区二区三区| 麻豆视传媒一区二区三区| 高清精品一区二区三区一区| 国产麻豆精品一区二区三区v视界 国产美女精品一区二区三区 | 午夜福利一区二区三区高清视频| 极品少妇伦理一区二区| 国模视频一区二区| 国产精品视频一区二区猎奇| 亚洲电影一区二区三区| 国产综合一区二区| 中文字幕精品一区| 亚洲日本一区二区一本一道| 黑人一区二区三区中文字幕| 国产伦精品一区二区| 内射少妇一区27P| 日本一区二区在线不卡| 日韩精品无码Av一区二区 | 国产一区二区精品久久岳| 亚洲高清成人一区二区三区| 精品女同一区二区| 亚洲AV永久无码精品一区二区国产| 国产精品一区二区久久乐下载| 国模视频一区二区| 色多多免费视频观看区一区| 一区二区视频免费观看| 久久久久人妻一区精品 | 在线观看国产一区二区三区| 国产天堂在线一区二区三区| 高清一区二区在线观看| 国产在线观看一区精品| 日本一区精品久久久久影院| 农村乱人伦一区二区| 国产伦精品一区二区三区不卡| 国产精品一区二区久久沈樵| 亚洲乱码国产一区网址| 一区二区三区四区免费视频|