DEV Community

Cover image for OhSnap! This How To Pin Footers in React
Gedalya Krycer
Gedalya Krycer

Posted on

 

OhSnap! This How To Pin Footers in React

The "OhSnap!" series explores bite-sized tips that you can apply today.


"How to pin the darn footer to the darn bottom of the darn page???"

It's a common problem where the amount of content on the page does not go past the viewport/fold of the screen. This in turn causes the footer to rather annoyingly pop-up to the middle of the page.

Luckly, there is a simple solution...

1 — Segment the page's HTML/JSX in two sections

<div className="content-container"> 
  •••
</div>
<footer className="footer--pin">
  •••
</footer>
Enter fullscreen mode Exit fullscreen mode
  • All the main page content should be placed in a div that has a "content-container" class.

  • All the footer content should be in a footer element as per best practices and assigned a "footer--pin" class.

(Names for these classes are of course up to you.)


2 — Get the actual height of the footer

Footer Height in Google Chrome Dev Tools

  • The actual height is margin-top + border-top + padding-top + content + padding-bottom + border-bottom + margin-bottom

  • You can find this with the Chrome DevTools box model section.


3 — Add .content-container style properties

.content-container {
  min-height: calc(100vh - 34px);
}
Enter fullscreen mode Exit fullscreen mode
  • Using calc() we are saying that the content div should take up 100% of the viewport, minus the height of the footer.

  • This will force the content container to take up all the available screen space, minus the footer height, which in effect pushes down the footer.


4 — Add .footer--pin style properties

.footer--pin {
  position: relative;
  left: 0;
  bottom: 0;
}
Enter fullscreen mode Exit fullscreen mode
  • Set the footer to a relative position and pin to the bottom and left.

Result

The great thing is that the footer also stays pinned at the bottom, even when more content is added to the page.


More Resources


Thumbnail designed with Figma

Top comments (6)

Collapse
 
dorshinar profile image
Dor Shinar

That's not a very flexible way, and I would not recommend relying on fixed pixels for that.
Using flexbox with justify-content: space-between or CSS grid would give you the same result, without using absolute positioning and fixed height.

Collapse
 
gedalyakrycer profile image
Gedalya Krycer

Thanks for sharing! I’ll have to look at those ways as well.

Collapse
 
sammykapienga profile image
sammy kapienga

Thank you so much you have really saved my code day

Collapse
 
milanpanin profile image
Milan Panin

You save my day with this code! Thank you! :)

Collapse
 
linneagear profile image
Linnea Gear

This is great, this worked when we did a navbar at work the other day. Positioning is a lifesaver!

Collapse
 
gedalyakrycer profile image
Gedalya Krycer

So glad you found it helpful!!

Top Posts from the React Ecosystem

1. Changes In The Official React Documentation

The former React Docs Beta has been officially released as the updated React documentation at react.dev after years of hard work and refinement. Check out the brand new React Docs: What’s New in the Updated React Docs

2. CRA's Time is Over

React developer team has removed create-react-app (CRA) from official documentation rendering it no longer the default setup method for new projects. The bulky setup, slow, and outdated nature of CRA led to its removal: create-react-app is officially dead

3. How to Fetch Dev.to Articles for Your Portfolio

Integrate the articles of your Dev.to profile into your personal portfolio with either React, Vue, or Next.js by following these simple steps. It outlines how to include frontend to pull the information and correctly utilizes the Dev.to API: How to Fetch Your Dev.to Articles for Your Portfolio with React