display: flex; flex-direction: column; min-height: 100dvh; on the body and a bottom element with margin-block-start: auto; are well known. From time to time, one also sees css grid used, for example with display: grid; grid-template-rows: auto 1fr auto; min-height: 100dvh; on the body to allow the main section to expand between native height header and footer elements. See this simple flems.io code example [a short-link to stay within discord's post length limit].display: grid; on the body tag, which means using display: flex to achieve a sticky footer is not an option without wrapping the entire page in an additional wrapper div. main tag to wrap her content, so there are numerous elements between the top and bottom. There was a reason for that, as adding a main wrapper to hold the content breaks her concept unless you set it to display: contents, which allows css to 'see through it' and act on the numerous child elements. This creates the situation described above with an unknown number of elements between the top and bottom of a page.