Skip to content
Advertisement

JS background with Html text

I have found a js background and now I would like to have this background on all my php files.

The problem is that html code goes either under js or behind it. How can I solve this?

JS file:

<!DOCTYPE html>

<html>

  <head>

    <meta name = "viewport" content = "width=device-width">
    <title>StarField</title>

    <style>

      * { margin:0; padding:0; }

      html, body { width:100%; height:100%; }

      canvas { height:10%;  width:100%; }

     
    </style>

  </head>

  <body>

    <canvas></canvas>

    <script type = "text/javascript">

      const Star = function(x, y, z) {

        this.x = x; this.y = y; this.z = z;

        this.size = 25;

      };

      var context = document.querySelector("canvas").getContext("2d");

      var height = document.documentElement.clientHeight;
      var width  = document.documentElement.clientWidth;

      var stars = new Array();

      var max_depth = 7500;

      for(let index = 0; index < 200; index ++) stars[index] = new Star(Math.random() * width, Math.random() * height, index * (max_depth / 200));

      function loop() {

        window.requestAnimationFrame(loop);

        height = document.documentElement.clientHeight;
        width  = document.documentElement.clientWidth;

        context.canvas.height = height;
        context.canvas.width  = width;

        context.fillStyle = "#000000";
        context.fillRect(0, 0, width, height);

        for (let index = stars.length - 1; index > -1; index --) {

          let star = stars[index];

          star.z -= 5;

          if (star.z < 0) {

            stars.push(stars.splice(index, 1)[0]);
            star.z = max_depth;
            continue;

          }

          let translate_x = width * 0.5;
          let translate_y = height * 0.5;

          let field_of_view = (height + width) * 0.5;

          let star_x = (star.x - translate_x) / (star.z / field_of_view) + translate_x;
          let star_y = (star.y - translate_y) / (star.z / field_of_view) + translate_y;

          let scale = field_of_view / (field_of_view + star.z);

          let color = Math.floor(scale * 256);

          context.fillStyle = "rgb(" + color + "," + color + "," + color + ")";
          context.fillRect(star_x, star_y, star.size * scale, star.size * scale);

        }

      }

      loop();

    </script>

  </body>

</html>

Another Php file where I included js:

!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <link rel="stylesheet" href="feedback.css">
    <script src="https://kit.fontawesome.com/74d89d956b.js" crossorigin="anonymous"></script>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Feedback</title>
</head>
<body>

   <?php include "navbar.php" ?> 
   <?php include "background.php" ?> 
<div class="title">
    <h1>Thank you for being here!All suggestions are welcome.</h1>
</div>

<div class = "container">
<div class="star">
        <input type = "radio" name="rate" id="rate-5">
        <label for="rate-5" class="fa fa-star"></label>
        <input type = "radio" name="rate" id="rate-4">
        <label for="rate-4"class="fa fa-star"></label>
        <input type = "radio" name="rate" id="rate-3">
        <label for="rate-3"class="fa fa-star"></label>
        <input type = "radio" name="rate" id="rate-2">
        <label for="rate-2"class="fa fa-star"></label>
        <input type = "radio" name="rate" id="rate-1">
        <label for="rate-1"class="fa fa-star"></label>

        <form action = "feedbackform.php" method="post">
    <header></header>
    <div class="textarea">
        <textarea name="suggestion" cols="30" placeholder="What's your opinion about my cv?"></textarea>
    </div>
    <div class="btn">
        <button type="submit">Post</button>
    </div>

</form>
</div>
</div>
</form>
</body>
</html>

Css for Php file:

.title{
    text-align: center;

}
.title

    {
        text-transform: uppercase;
       background-image: linear-gradient(
        -225deg,
        #231557 90%,
        
        #ff1361 67%,
        #fff800 100%
      );
       background-size: auto auto;
       background-clip:border-box;
       background-size:20% auto;
       color:#fff;
       -webkit-text-fill-color: transparent;
       -webkit-background-clip: text;
       -webkit-text-fill-color:transparent;
       animation:textclip  2s linear infinite;
       
       
     }
     @keyframes textclip {
        to {
          background-position: 520% center;
        }
      }
    
      
  .container{
    
    text-align: center;
    width: 390px;
    height: 350px;
    margin-top: 250px;
    margin-left:750px;
    background-color: rgb(26, 24, 24);
    border: 1px solid #231557;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 25px;
    
    
  }
  body{
   
    position: fixed;
    top: 0px;
    left: 0px;
    width: 100vw;
    height: 100vh;
    overflow: auto;
}
  .container > .star input{
    display: none;
  }

  .star label{
    font-size: 30px;
    float: right;
    padding: 15px;
    color:gray;
    transition: width 2s;
    margin-top: -20px;
  }

  input:not(:checked) ~ label:hover,
  input:not(:checked) ~ label:hover ~ label{
    color:yellow;
  }
  input:checked ~ label{
    color:yellow;
  }

  input#rate-5:checked ~label{
    color:#fe7;
    text-shadow: 0px 0px 10px rgb(255, 255, 2);

  }
  .textarea textarea:focus{
    border-color: #444;
  }
 
 
  #rate-1:checked ~ form header:before{
    content: "Bleah";
  }
  #rate-2:checked ~ form header:before{
    content: "Nope";
  }
  #rate-3:checked ~ form header:before{
    content: "Ok ";
  }
  #rate-4:checked ~ form header:before{
    content: "Awesome ";
  }
  #rate-5:checked ~ form header:before{
    content: "Magnificent ";
  }
 
  input:checked ~ form{
    display: block;
  }
  form header{
    margin-left: 5px;
    margin-top: 50px;
    font-size:large;
    color:yellow;
    text-align: center;
  transition: all 0.2s ease;
  text-transform:uppercase;
  }


  form .textarea{
    margin-top: 5px;
    margin-left: 25px;
    
    
  }
  form .textarea textarea{
    resize: none;
    margin-top: 20px;
    margin-left: -30px;
    background:#BEBEBE;
    color:white;
    resize: none !important;
    height: 50px;
    width: 300px;
    
  }
  
  .btn{
    margin-top: 10px;
    margin-left: -2px;
    width: 100%;
  }
  .btn button{
    width: 310px;
    height: 30px;
    background-color:#BEBEBE;
    text-transform: uppercase;
    font-style: italic;
    cursor: pointer;
    transition: ease 1s;
  }

  .btn button:hover{
    background-color: rgb(129, 118, 118);
  }

Advertisement

Answer

At the moment the cavas which ‘paints’ the stars has default positioning. In this case therefore it comes before the main HTML.

If you want it as a background covering the whole viewport then a couple of things have to change:

  • the height needs to go to 100%
  • the positioning needs to be set at fixed (fixed in the viewport starting at the top left corner) and the z-index lowered so it’s below the subsequent HTML.

In the background.php file change the style of the canvas to:

  canvas { height:100%;  width:100%; position: fixed; top: 0; left: 0; z-index: -1;}
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement