整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

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

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

          分析:

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

          1. 再添加上一個圓形。

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

          初步實現

          1. 先畫一個正方形:
             <body>
                 <div id="heart"></div>
             </body>
             #heart{
                    height: 300px;
                    width: 300px;
                    border: 2px solid black;
                 }
          1. 給這個正方形的左邊加行一個圓形.這里使用偽類:before來實現:
                  #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偽類來實現。
                #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. 最后一步, 旋轉一下, 然后上個顏色.去掉之前為了看清楚加的邊框。
                /*給heart進行旋轉并加上顏色*/
               transform: rotate(45deg);
               background-color: red;

          完整代碼:

          注頭條號,專注做前端

          誰說程序員不浪漫,其實有些程序還是很浪漫的好嘛,懂得學以致用,下面是一個前端開發利用所學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>


          主站蜘蛛池模板: 在线电影一区二区三区| 久久久91精品国产一区二区三区| 精品国产日产一区二区三区| 国产精品无码亚洲一区二区三区| 亚洲乱码一区av春药高潮| 国产在线视频一区二区三区98 | 无码人妻精品一区二区三区66| 成人精品一区二区三区中文字幕 | 在线观看国产一区亚洲bd| 成人毛片一区二区| 无码人妻一区二区三区免费| 日本精品无码一区二区三区久久久| 国产福利微拍精品一区二区 | 相泽亚洲一区中文字幕| 中文字幕一区在线观看| 日韩免费观看一区| 免费无码毛片一区二区APP| 亚洲综合色一区二区三区小说| 亚洲一区二区三区在线| 玩弄放荡人妻一区二区三区| 99久久精品日本一区二区免费| 午夜福利无码一区二区| 国产色欲AV一区二区三区| 福利一区二区在线| 中文字幕一区二区三区精华液| 国产AV午夜精品一区二区三| 无码日韩精品一区二区免费暖暖| 日韩人妻精品无码一区二区三区| 国产精品分类视频分类一区| 日韩一区在线视频| V一区无码内射国产| 日本一区二区三区精品中文字幕| 日韩好片一区二区在线看| 亚洲日韩AV一区二区三区四区| 国产综合视频在线观看一区| 国产精品一区二区av不卡| 久久精品亚洲一区二区| 在线精品一区二区三区| 日韩精品一区二区午夜成人版 | 91香蕉福利一区二区三区| 在线|一区二区三区|