Lorenzo Pompei
Lorenzo Pompei

Reputation: 21

Footer does not stick to bottom

My footer doesn't stick to the bottom when the content of the page is very little, I tried using:

position:absolute;
and
bottom:0;

but it seems to stick, but when I add too much content it goes "under" the footer that remains in the middle of the page.

By under I mean that the text passes under the footer that remains in almost the middle of the page and surpasses it, if needed I can send some pictures of the problem, thanks a lot for your time!

this is the HTML

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="/src/app/footer/footer.component.css"> <!--import css footer-->
  <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css">
</head>
<body>
<!--parte footer dell'html-->

  <footer class="footer">
    <div class="flex-wrapper">
     <div class="container">
        <div class="row">
            <div class="footer-col">
                <div class="content"> 
                    <a href="#"> <!--i link da collegare vanno dove sono presenti gli #-->
                    <img src="https://i.imgur.com/1yvwx9I.png" >
                    </a>
                </div>
            </div>
            <div class="footer-col">
                <h4>Azienda</h4> <!--titolo-->
                <ul>
                    <li><a href="chi-siamo">Chi Siamo</a></li> <!--elenco degli elementi-->
                    <li><a href="contatti">Contattaci</a></li>
                    <li><a href="#">Placeholder</a></li>
                    <li><a href="#">PlaceHolder</a></li>
                </ul>
            </div>
            <div class="footer-col">
                <h4>Aiuto</h4>
                <ul>
                    <li><a href="faq">FAQ</a></li>
                    <li><a href="consegne">Consegne</a></li>
                    <li><a href="reso">Reso</a></li>
                    <li><a href="privacy">Informatica privacy</a></li>
                </ul>
            </div>
            <div class="footer-col">
                <h4>Seguici su</h4>
                <div class="social-links">
                    <a href="facebook"><i class="fab fa-facebook-f"></i></a> <!--icone dei social-->
                    <a href="twitter"><i class="fab fa-twitter"></i></a>
                    <a href="instagram"><i class="fab fa-instagram"></i></a>
                    <a href="linkedin"><i class="fab fa-linkedin-in"></i></a>
                </div>
            </div>
        </div>
     </div>
    </div>
  </footer>

</body>
</html>


this is the CSS

@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');
body  {
  /* fonto e grandezza font*/
  line-height: 1;
  font-family: 'Poppins', sans-serif;
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.container {
  width: 100%;
  margin: 0 auto;
}

.row {
  /*si occupa delle righe, accomoda lo spostamento dell'elenco con il dimensionamento della pagina */
  display: flex;
  flex-wrap: wrap;
}

ul {
  list-style: none;
}

.footer {
  /* solamente il colore di background del footer e lo spazio tra gli elementi */
  background-color: #24262b;
  padding: 20px 0;
}

.footer-col {
  /* si occupa delle colonne e del loro ridimensionamento */
  width: 25%;
  padding: 0;
}

.footer-col h4 {
  /*stabilisco la grandezza del font e del colore dei titoli */
  font-size: 25px;
  color: #ffffff;
  text-transform: capitalize;
  margin-bottom: 35px;
  font-weight: 500;
  position: relative;
}

.footer-col h4::before {
  /* barra rossa sotto ai titoli */
  content: '';
  position: absolute;
  left: 0;
  bottom: -10px;
  background-color: #e91e63;
  height: 2px;
  box-sizing: border-box;
  width: 50px;
}

.footer-col ul li:not(:last-child) {
  margin-bottom: 10px; /* spazio tra le scritte in verticale */
}

.footer-col ul li a {
  /* stato degli elementi dell'elenco pre-hover, potete notare che dispongo qui "transition" cioè il tempo che ci metterà a passare allo stato dell'hover dal suo stato normale e viceversa */
  font-size: 16px;
  text-transform: capitalize;
  color: #ffffff;
  text-decoration: none;
  font-weight: 300;
  color: #bbbbbb;
  display: block;
  transition: all 0.3s ease;
}

.footer-col ul li a:hover {
  /* colore e leggero spostamento quando avviene l'hover (cioè quando ci passa sopra il mouse) */
  color: #ffffff;
  padding-left: 8px;
}

.footer-col .social-links a {
  /* stesso meccaniscmo dei font, qui però inserisco il background-color per il cambiamento del color  (color -> background-color)*/
  display: inline-block;
  height: 40px;
  width: 40px;
  background-color: rgba(255, 255, 255, 0.2);
  margin: 0 10px 10px 0;
  text-align: center;
  line-height: 40px;
  border-radius: 50%;
  color: #ffffff;
  transition: all 0.5s ease;
}

.footer-col .social-links a:hover {
  color: #24262b;
  background-color: #ffffff;
}


.content {
  display: block;
  padding: 10px;
  margin: 15px auto;
  text-align: center;
  font: 25px Georgia, "Times New Roman", Times, serif;
  font-size: 14px;
  width: 300px;
  display: flex;
}

.foot {
  display: inline;
  line-height: 70px;
}

/* dove si trova il logo, lo inizializzo con un filtro grigio e una transizione di 0.6, uso webkit per la scala di grigio (e anche la transizione solo per webkit), la scala di grigio viene usata perché rende il contrasto con l'hover molto più bello */
.content img {
  height: 150px;
  width: 150px;
  float: left;
  filter: grayscale(100%);
  -webkit-filter: grayscale(100%);
  -webkit-transition: all .6s ease-in-out;
  transition: 0.6s;
}
/* hover del logo */
.content img:hover {
  filter: invert(400%);
  filter: brightness(4);
  -webkit-filter: grayscale(-100);
  -webkit-transform: scale(1.10);
}


/* tiene il footer esteso evitando gli spazi sui lati */
footer {
  position: absolute;
  /* temporaneo, di solito 0px o togli */
  right: 0px;
  left: 0px;
}

This is what happens when i add bottom:0px;

the error

Upvotes: 0

Views: 872

Answers (1)

Usama Saeed
Usama Saeed

Reputation: 331

The best way to make sure your footer always sticks to the bottom is to use a flexbox for your body tag.

HTML & CSS Code Snippet

@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');

body  {
  /* fonto e grandezza font*/
  line-height: 1;
  font-family: 'Poppins', sans-serif;
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

/* tiene il footer esteso evitando gli spazi sui lati */
html, body {
  height: 100%;
}

body {
  display: flex;
  flex-direction: column;
}

.content {
/*   flex: 1 0 auto; */
  flex-direction: column;
}

.footer {
  flex-shrink: 0;
}

.container {
  width: 100%;
  margin: 0 auto;
}

.row {
  /*si occupa delle righe, accomoda lo spostamento dell'elenco con il dimensionamento della pagina */
  display: flex;
  flex-wrap: wrap;
}

ul {
  list-style: none;
}

.footer {
  /* solamente il colore di background del footer e lo spazio tra gli elementi */
  background-color: #24262b;
  padding: 20px 0;
}

.footer-col {
  /* si occupa delle colonne e del loro ridimensionamento */
  width: 25%;
  padding: 0;
}

.footer-col h4 {
  /*stabilisco la grandezza del font e del colore dei titoli */
  font-size: 25px;
  color: #ffffff;
  text-transform: capitalize;
  margin-bottom: 35px;
  font-weight: 500;
  position: relative;
}

.footer-col h4::before {
  /* barra rossa sotto ai titoli */
  content: '';
  position: absolute;
  left: 0;
  bottom: -10px;
  background-color: #e91e63;
  height: 2px;
  box-sizing: border-box;
  width: 50px;
}

.footer-col ul li:not(:last-child) {
  margin-bottom: 10px; /* spazio tra le scritte in verticale */
}

.footer-col ul li a {
  /* stato degli elementi dell'elenco pre-hover, potete notare che dispongo qui "transition" cioè il tempo che ci metterà a passare allo stato dell'hover dal suo stato normale e viceversa */
  font-size: 16px;
  text-transform: capitalize;
  color: #ffffff;
  text-decoration: none;
  font-weight: 300;
  color: #bbbbbb;
  display: block;
  transition: all 0.3s ease;
}

.footer-col ul li a:hover {
  /* colore e leggero spostamento quando avviene l'hover (cioè quando ci passa sopra il mouse) */
  color: #ffffff;
  padding-left: 8px;
}

.footer-col .social-links a {
  /* stesso meccaniscmo dei font, qui però inserisco il background-color per il cambiamento del color  (color -> background-color)*/
  display: inline-block;
  height: 40px;
  width: 40px;
  background-color: rgba(255, 255, 255, 0.2);
  margin: 0 10px 10px 0;
  text-align: center;
  line-height: 40px;
  border-radius: 50%;
  color: #ffffff;
  transition: all 0.5s ease;
}

.footer-col .social-links a:hover {
  color: #24262b;
  background-color: #ffffff;
}


.content {
  display: block;
  padding: 10px;
  margin: 15px auto;
  text-align: center;
  font: 25px Georgia, "Times New Roman", Times, serif;
  font-size: 14px;
  width: 300px;
  display: flex;
}

.foot {
  display: inline;
  line-height: 70px;
}

/* dove si trova il logo, lo inizializzo con un filtro grigio e una transizione di 0.6, uso webkit per la scala di grigio (e anche la transizione solo per webkit), la scala di grigio viene usata perché rende il contrasto con l'hover molto più bello */
.content img {
  height: 150px;
  width: 150px;
  float: left;
  filter: grayscale(100%);
  -webkit-filter: grayscale(100%);
  -webkit-transition: all .6s ease-in-out;
  transition: 0.6s;
}
/* hover del logo */
.content img:hover {
  filter: invert(400%);
  filter: brightness(4);
  -webkit-filter: grayscale(-100);
  -webkit-transform: scale(1.10);
}
<body>
  <!--parte footer dell'html-->
  <div class="content">
  <p>Demo Content</p>
  <p>Demo Content</p>
  <p>Demo Content</p>
  <p>Demo Content</p>
  <p>Demo Content</p>
  <p>Demo Content</p>
  <p>Demo Content</p>
  <p>Demo Content</p>
  <p>Demo Content</p>
  <p>Demo Content</p>
  <p>Demo Content</p>
  <p>Demo Content</p>
  </div>
  <footer class="footer">
    <div class="flex-wrapper">
     <div class="container">
        <div class="row">
            <div class="footer-col">
                <div class="content"> 
                    <a href="#"> <!--i link da collegare vanno dove sono presenti gli #-->
                    <img src="https://i.imgur.com/1yvwx9I.png" >
                    </a>
                </div>
            </div>
            <div class="footer-col">
                <h4>Azienda</h4> <!--titolo-->
                <ul>
                    <li><a href="chi-siamo">Chi Siamo</a></li> <!--elenco degli elementi-->
                    <li><a href="contatti">Contattaci</a></li>
                    <li><a href="#">Placeholder</a></li>
                    <li><a href="#">PlaceHolder</a></li>
                </ul>
            </div>
            <div class="footer-col">
                <h4>Aiuto</h4>
                <ul>
                    <li><a href="faq">FAQ</a></li>
                    <li><a href="consegne">Consegne</a></li>
                    <li><a href="reso">Reso</a></li>
                    <li><a href="privacy">Informatica privacy</a></li>
                </ul>
            </div>
            <div class="footer-col">
                <h4>Seguici su</h4>
                <div class="social-links">
                    <a href="facebook"><i class="fab fa-facebook-f"></i></a> <!--icone dei social-->
                    <a href="twitter"><i class="fab fa-twitter"></i></a>
                    <a href="instagram"><i class="fab fa-instagram"></i></a>
                    <a href="linkedin"><i class="fab fa-linkedin-in"></i></a>
                </div>
            </div>
        </div>
     </div>
    </div>
  </footer>

</body>

You could even add a header above that or more stuff below. The trick with flexbox is either:

  1. flex: 1 on the child you want to grow to fill the space (the content, in our case).
  2. or, margin-top: auto to push the child away as far as it will go from the neighbor (or whichever direction margin is needed).

To check more ways for this purpose you can check this article "https://css-tricks.com/couple-takes-sticky-footer/"

Here is the link for Codepen as well

Upvotes: 1

Related Questions