整合營銷服務(wù)商

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

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

          如何使用 CSS 代碼制作一個簡易愛心,編程獅教你

          么使用 CSS 繪制一個愛心【附愛心代碼】

          分析:

          • 愛心可以通過一個正方形+兩個圓形組合成。
          1. 先畫一個正方形+圓形, 擺放位置如下:

          1. 再添加上一個圓形。

          1. 最后再將整個圖形順時針旋轉(zhuǎn)45度即可。

          初步實(shí)現(xiàn)

          1. 先畫一個正方形:
             <body>
                 <div id="heart"></div>
             </body>
             #heart{
                    height: 300px;
                    width: 300px;
                    border: 2px solid black;
                 }
          1. 給這個正方形的左邊加行一個圓形.這里使用偽類:before來實(shí)現(xiàn):
                  #heart{
                         height: 200px;
                         width: 200px;
                         border: 2px solid black;
                         position: relative;
                     }
                 #heart:before{
                     content: '';
                     width: 200px;
                     height: 200px;
                     border: 2px solid black;
                     border-radius: 50%; // 正方形加圓角變成圓
                     position: absolute;
                     left: -100px;  // 向左位移正方形一半的長度
                 }

          此時圖形長這樣:

          1. 再添加一個圓形, 這里使用after偽類來實(shí)現(xiàn)。
                #heart{
                         height: 200px;
                         width: 200px;
                         border: 2px solid black;
                         position: relative;
                     }
                     // 這里偷個懶.直接寫一塊了
                 #heart:before,#heart:after{
                     content: '';
                     width: 200px;
                     height: 200px;
                     border: 2px solid black;
                     border-radius: 50%;
                     position: absolute;
                     left: -100px;
                 }
                 // 第二個圓, 只需要向上位移正方形一半的高度
                 #heart:after{
                     left: 0;
                     top: -100px;
                 }

          1. 最后一步, 旋轉(zhuǎn)一下, 然后上個顏色.去掉之前為了看清楚加的邊框。
                /*給heart進(jìn)行旋轉(zhuǎn)并加上顏色*/
               transform: rotate(45deg);
               background-color: red;

          完整代碼:

          注頭條號,專注做前端

          誰說程序員不浪漫,其實(shí)有些程序還是很浪漫的好嘛,懂得學(xué)以致用,下面是一個前端開發(fā)利用所學(xué)html5制作的html5愛心+表白 ,附源碼

          如果你是一個單身程序員,那么趕緊的拿下這個資源吧

          源碼下載

          http://zjdx1.sc.chinaz.com/Files/DownLoad/webjs1/201401/jiaoben1892.rar

          ////

          lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

          <HTML>

          <HEAD>

          <TITLE> New Document </TITLE>

          <META NAME="Generator" CONTENT="EditPlus">

          <META NAME="Author" CONTENT="">

          <META NAME="Keywords" CONTENT="">

          <META NAME="Description" CONTENT="">

          <style>

          html, body {

          height: 100%;

          padding: 0;

          margin: 0;

          background: #000;

          }

          canvas {

          position: absolute;

          width: 100%;

          height: 100%;

          }

          </style>

          </HEAD>

          <BODY>

          </style>

          <canvas id="pinkboard"></canvas>

          <script>

          /*

          * Settings

          */

          var settings = {

          particles: {

          length: 500, // maximum amount of particles

          duration: 2, // particle duration in sec

          velocity: 100, // particle velocity in pixels/sec

          effect: -0.75, // play with this for a nice effect

          size: 30, // particle size in pixels

          },

          };

          /*

          * RequestAnimationFrame polyfill by Erik M?ller

          */

          (function(){var b=0;var c=["ms","moz","webkit","o"];for(var a=0;a<c.length&&!window.requestAnimationFrame;++a){window.requestAnimationFrame=window[c[a]+"RequestAnimationFrame"];window.cancelAnimationFrame=window[c[a]+"CancelAnimationFrame"]||window[c[a]+"CancelRequestAnimationFrame"]}if(!window.requestAnimationFrame){window.requestAnimationFrame=function(h,e){var d=new Date().getTime();var f=Math.max(0,16-(d-b));var g=window.setTimeout(function(){h(d+f)},f);b=d+f;return g}}if(!window.cancelAnimationFrame){window.cancelAnimationFrame=function(d){clearTimeout(d)}}}());


          /*

          * Point class

          */

          var Point = (function() {

          function Point(x, y) {

          this.x = (typeof x !== 'undefined') ? x : 0;

          this.y = (typeof y !== 'undefined') ? y : 0;

          }

          Point.prototype.clone = function() {

          return new Point(this.x, this.y);

          };

          Point.prototype.length = function(length) {

          if (typeof length == 'undefined')

          return Math.sqrt(this.x * this.x + this.y * this.y);

          this.normalize();

          this.x *= length;

          this.y *= length;

          return this;

          };

          Point.prototype.normalize = function() {

          var length = this.length();

          this.x /= length;

          this.y /= length;

          return this;

          };

          return Point;

          })();

          /*

          * Particle class

          */

          var Particle = (function() {

          function Particle() {

          this.position = new Point();

          this.velocity = new Point();

          this.acceleration = new Point();

          this.age = 0;

          }

          Particle.prototype.initialize = function(x, y, dx, dy) {

          this.position.x = x;

          this.position.y = y;

          this.velocity.x = dx;

          this.velocity.y = dy;

          this.acceleration.x = dx * settings.particles.effect;

          this.acceleration.y = dy * settings.particles.effect;

          this.age = 0;

          };

          Particle.prototype.update = function(deltaTime) {

          this.position.x += this.velocity.x * deltaTime;

          this.position.y += this.velocity.y * deltaTime;

          this.velocity.x += this.acceleration.x * deltaTime;

          this.velocity.y += this.acceleration.y * deltaTime;

          this.age += deltaTime;

          };

          Particle.prototype.draw = function(context, image) {

          function ease(t) {

          return (--t) * t * t + 1;

          }

          var size = image.width * ease(this.age / settings.particles.duration);

          context.globalAlpha = 1 - this.age / settings.particles.duration;

          context.drawImage(image, this.position.x - size / 2, this.position.y - size / 2, size, size);

          };

          return Particle;

          })();

          /*

          * ParticlePool class

          */

          var ParticlePool = (function() {

          var particles,

          firstActive = 0,

          firstFree = 0,

          duration = settings.particles.duration;

          function ParticlePool(length) {

          // create and populate particle pool

          particles = new Array(length);

          for (var i = 0; i < particles.length; i++)

          particles[i] = new Particle();

          }

          ParticlePool.prototype.add = function(x, y, dx, dy) {

          particles[firstFree].initialize(x, y, dx, dy);

          // handle circular queue

          firstFree++;

          if (firstFree == particles.length) firstFree = 0;

          if (firstActive == firstFree ) firstActive++;

          if (firstActive == particles.length) firstActive = 0;

          };

          ParticlePool.prototype.update = function(deltaTime) {

          var i;

          // update active particles

          if (firstActive < firstFree) {

          for (i = firstActive; i < firstFree; i++)

          particles[i].update(deltaTime);

          }

          if (firstFree < firstActive) {

          for (i = firstActive; i < particles.length; i++)

          particles[i].update(deltaTime);

          for (i = 0; i < firstFree; i++)

          particles[i].update(deltaTime);

          }

          // remove inactive particles

          while (particles[firstActive].age >= duration && firstActive != firstFree) {

          firstActive++;

          if (firstActive == particles.length) firstActive = 0;

          }

          };

          ParticlePool.prototype.draw = function(context, image) {

          // draw active particles

          if (firstActive < firstFree) {

          for (i = firstActive; i < firstFree; i++)

          particles[i].draw(context, image);

          }

          if (firstFree < firstActive) {

          for (i = firstActive; i < particles.length; i++)

          particles[i].draw(context, image);

          for (i = 0; i < firstFree; i++)

          particles[i].draw(context, image);

          }

          };

          return ParticlePool;

          })();

          /*

          * Putting it all together

          */

          (function(canvas) {

          var context = canvas.getContext('2d'),

          particles = new ParticlePool(settings.particles.length),

          particleRate = settings.particles.length / settings.particles.duration, // particles/sec

          time;

          // get point on heart with -PI <= t <= PI

          function pointOnHeart(t) {

          return new Point(

          160 * Math.pow(Math.sin(t), 3),

          130 * Math.cos(t) - 50 * Math.cos(2 * t) - 20 * Math.cos(3 * t) - 10 * Math.cos(4 * t) + 25

          );

          }

          // creating the particle image using a dummy canvas

          var image = (function() {

          var canvas = document.createElement('canvas'),

          context = canvas.getContext('2d');

          canvas.width = settings.particles.size;

          canvas.height = settings.particles.size;

          // helper function to create the path

          function to(t) {

          var point = pointOnHeart(t);

          point.x = settings.particles.size / 2 + point.x * settings.particles.size / 350;

          point.y = settings.particles.size / 2 - point.y * settings.particles.size / 350;

          return point;

          }

          // create the path

          context.beginPath();

          var t = -Math.PI;

          var point = to(t);

          context.moveTo(point.x, point.y);

          while (t < Math.PI) {

          t += 0.01; // baby steps!

          point = to(t);

          context.lineTo(point.x, point.y);

          }

          context.closePath();

          // create the fill

          context.fillStyle = '#ea80b0';

          context.fill();

          // create the image

          var image = new Image();

          image.src = canvas.toDataURL();

          return image;

          })();

          // render that thing!

          function render() {

          // next animation frame

          requestAnimationFrame(render);

          // update time

          var newTime = new Date().getTime() / 1000,

          deltaTime = newTime - (time || newTime);

          time = newTime;

          // clear canvas

          context.clearRect(0, 0, canvas.width, canvas.height);

          // create new particles

          var amount = particleRate * deltaTime;

          for (var i = 0; i < amount; i++) {

          var pos = pointOnHeart(Math.PI - 2 * Math.PI * Math.random());

          var dir = pos.clone().length(settings.particles.velocity);

          particles.add(canvas.width / 2 + pos.x, canvas.height / 2 - pos.y, dir.x, -dir.y);

          }

          // update and draw particles

          particles.update(deltaTime);

          particles.draw(context, image);

          }

          // handle (re-)sizing of the canvas

          function onResize() {

          canvas.width = canvas.clientWidth;

          canvas.height = canvas.clientHeight;

          }

          window.onresize = onResize;

          // delay rendering bootstrap

          setTimeout(function() {

          onResize();

          render();

          }, 10);

          })(document.getElementById('pinkboard'));

          </script>

          </BODY>

          </HTML>


          主站蜘蛛池模板: 国产精品免费视频一区| 日韩aⅴ人妻无码一区二区| 麻豆一区二区三区精品视频| 成人乱码一区二区三区av| 中文字幕精品一区 | 亚洲色精品vr一区二区三区| 国模丽丽啪啪一区二区| 国产精品无圣光一区二区| 99精品一区二区免费视频| 五十路熟女人妻一区二区| 能在线观看的一区二区三区| 久久精品国产一区二区三区不卡 | 中文字幕在线不卡一区二区| 国产精品538一区二区在线| 插我一区二区在线观看| 日本一区二区在线| 麻豆AV天堂一区二区香蕉| 国产精品一区二区三区99| 精品国产一区二区三区麻豆| 国产综合精品一区二区| 亚洲AV无码一区二区三区DV| 婷婷亚洲综合一区二区| 色偷偷久久一区二区三区| 精品日韩一区二区| 伊人激情AV一区二区三区| 天堂一区二区三区在线观看| 99国产精品一区二区| 亚洲av乱码一区二区三区按摩| 亚洲免费一区二区| 欧美成人aaa片一区国产精品| 日韩精品无码视频一区二区蜜桃 | 蜜臀Av午夜一区二区三区| 国产伦精品一区二区三区在线观看| 国产福利视频一区二区 | 一区二区三区福利| 51视频国产精品一区二区| 国产在线视频一区| 国产精品一区二区资源| 在线观看国产一区二三区| 亚洲欧洲∨国产一区二区三区| 无码丰满熟妇浪潮一区二区AV |