Propose Day Using HTML and CSS

Hey Lovebirds! 💑✨

Valentine’s Day Week Day 2: Propose Day, February 8

This Propose Day, let's add a tech twist to your love story! 💻💞Create a special HTML & CSS project to pop the question in style. Customize it with romantic colors, animations, and heartfelt messages.

Share the love with code! 💑✨

Feel free to adjust the text further to suit your preferences!!!

Preview


HTML Code Structure :-

index.html

<!DOCTYPE html>
<html lang="en" >
<head>
  <meta charset="UTF-8">
  <title>LOADS OF LOGIC</title>
  <link rel='stylesheet' href='https://fonts.googleapis.com/css2?family=Short+Stack&amp;family=Homemade+Apple&amp;display=swap'>
  <link rel="stylesheet" href="./style.css">

</head>
<body>
<!-- partial:index.partial.html -->
<!-- A pen by Developer Rahul  -->
<div class="paper heart">
<p class="love-you">I LOVE YOU</p>
</div>

  
<div class="paper image">
  <p> and I fallen in</p>
    <p>Love with You 😍 </p>
   <img src="images/1.jpeg" />
</div>

<div class="paper image">
  <p</p>
  <img src="images/2.jpeg" />
</div>

<div class="paper image">
  <p>How can be </p>
   <p> someone so cute ❤️ </p>

  <img src="images/3.jpg" />
</div>



<div class="paper red">
<p class="p1"> and My Favorite</p>
<p class="p2">Person 😍</p>
</div>

<div class="paper">
<p class="p1">You are Cute </p>
  <p class="p1">Amazing <span style="color: red !important;">❤️</span></p>
</div>

<div class="paper">
<p class="p1">Drag the papers to move!</p>
</div>
<!-- partial -->
  <script  src="./script.js"></script>

</body>
</html>

CSS Code Structure :-

style.css

@import url('https://fonts.googleapis.com/css2?family=Zeyada&display=swap');

body {
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;

  background-size: 1000px;
  background-image: url("https://www.psdgraphics.com/wp-content/uploads/2022/01/white-math-paper-texture.jpg");
  background-position: center center;
}

body::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.60);
}

.paper {
  background-image: url("https://i0.wp.com/textures.world/wp-content/uploads/2018/10/2-Millimeter-Paper-Background-copy.jpg?ssl=1");
  background-size: 500px;
  background-position: center center;
  padding: 20px 100px;  
  transform: rotateZ(-5deg);
  box-shadow: 1px 15px 20px 0px rgba(0,0,0,0.5);
  position: absolute;
}

.paper.heart {
  position: relative;
  width: 200px;
  height: 200px;
  padding: 0;
  border-radius: 50%;
}

.paper.image {
  padding: 10px;
}
.paper.image p {
  font-size: 30px;
}

img {
  max-height: 200px;
  width: 100%;
  user-select: none;
}

.paper.heart::after {
  content: "";
  background-image: url('https://cdn.pixabay.com/photo/2016/03/31/19/25/cartoon-1294994__340.png');
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  background-size: 150px;
  background-position: center center;
  background-repeat: no-repeat;
  opacity: 0.6;
}

.love-you{
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 46px;
  font-weight: bold;
}

p {
  font-family: 'Zeyada';
  font-size: 50px;
  color: rgb(0,0,100);
  opacity: 0.75;
  user-select: none;
}

JS Code Structure :-

script.js

let highestZ = 1;

class Paper {
  holdingPaper = false;
  mouseTouchX = 0;
  mouseTouchY = 0;
  mouseX = 0;
  mouseY = 0;
  prevMouseX = 0;
  prevMouseY = 0;
  velX = 0;
  velY = 0;
  rotation = Math.random() * 30 - 15;
  currentPaperX = 0;
  currentPaperY = 0;
  rotating = false;

  init(paper) {
    document.addEventListener('mousemove', (e) => {
      if(!this.rotating) {
        this.mouseX = e.clientX;
        this.mouseY = e.clientY;
        
        this.velX = this.mouseX - this.prevMouseX;
        this.velY = this.mouseY - this.prevMouseY;
      }
        
      const dirX = e.clientX - this.mouseTouchX;
      const dirY = e.clientY - this.mouseTouchY;
      const dirLength = Math.sqrt(dirX*dirX+dirY*dirY);
      const dirNormalizedX = dirX / dirLength;
      const dirNormalizedY = dirY / dirLength;

      const angle = Math.atan2(dirNormalizedY, dirNormalizedX);
      let degrees = 180 * angle / Math.PI;
      degrees = (360 + Math.round(degrees)) % 360;
      if(this.rotating) {
        this.rotation = degrees;
      }

      if(this.holdingPaper) {
        if(!this.rotating) {
          this.currentPaperX += this.velX;
          this.currentPaperY += this.velY;
        }
        this.prevMouseX = this.mouseX;
        this.prevMouseY = this.mouseY;

        paper.style.transform = `translateX(${this.currentPaperX}px) translateY(${this.currentPaperY}px) rotateZ(${this.rotation}deg)`;
      }
    })

    paper.addEventListener('mousedown', (e) => {
      if(this.holdingPaper) return; 
      this.holdingPaper = true;
      
      paper.style.zIndex = highestZ;
      highestZ += 1;
      
      if(e.button === 0) {
        this.mouseTouchX = this.mouseX;
        this.mouseTouchY = this.mouseY;
        this.prevMouseX = this.mouseX;
        this.prevMouseY = this.mouseY;
      }
      if(e.button === 2) {
        this.rotating = true;
      }
    });
    window.addEventListener('mouseup', () => {
      this.holdingPaper = false;
      this.rotating = false;
    });
  }
}

const papers = Array.from(document.querySelectorAll('.paper'));

papers.forEach(paper => {
  const p = new Paper();
  p.init(paper);
});
Join Now


Previous Year Questions Now to Boost Your Exam Performance

LOADS OF LOGIC