¿Cómo consigue que el pie de página permanezca en la parte inferior de una página web?

291

Tengo un diseño simple de 2 columnas con un pie de página que borra el div derecho e izquierdo en mi marcado. Mi problema es que no puedo hacer que el pie de página permanezca en la parte inferior de la página en todos los navegadores. Funciona si el contenido empuja el pie de página, pero ese no es siempre el caso.

Bill el lagarto
fuente
Agregaré a @Jimmy: también debe declarar el posicionamiento absoluto (o relativo) al elemento que contiene el pie de página. En tu caso, es el elemento del cuerpo. Editar: Lo probé en su página con firebug y parecía funcionar muy bien ...
yoavf
puede ser que necesites estirar la página html a altura completa como dice este enlace: makandracards.com/makandra/…
sina

Respuestas:

199

Para obtener un pie de página adhesivo:

  1. Tener un <div>con class="wrapper"su contenido.

  2. Justo antes del cierre </div>del wrapperlugar el <div class="push"></div>.

  3. Justo después del cierre </div>del wrapperlugar, el <div class="footer"></div>.

* {
    margin: 0;
}
html, body {
    height: 100%;
}
.wrapper {
    min-height: 100%;
    height: auto !important;
    height: 100%;
    margin: 0 auto -142px; /* the bottom margin is the negative value of the footer's height */
}
.footer, .push {
    height: 142px; /* .push must be the same height as .footer */
}
Staale
fuente
44
@jlp: debe agregar la etiqueta del formulario a la altura: 100%, de lo contrario se romperá el pie de página adhesivo. De esta manera: html, body, form {height: 100%;}
dazbradbury
Noté que agregar relleno al pie de página lo atornilla, pero descubrí que eso se puede solucionar restando el relleno adicional en el pie de página de la altura {footer, push}.
nicooga
1
La explicación detallada con la demostración se proporciona en este sitio: CSS Sticky Footer
mohitp
Hola, seguí tus pasos y funciona bastante bien para páginas grandes. Pero en las páginas pequeñas donde el usuario no puede desplazarse hacia abajo, el pie de página es un poco demasiado lejos en la parte inferior. Por lo tanto, hace que una página casi vacía se pueda desplazar. Alguien sabe cómo solucionar esto? Puedes ver mi página de prueba aquí Sheltered-escarpment-6887.herokuapp.com
Syk
1
@Syk He descubierto que reducir la altura mínima ayuda. 94% es un valor correcto, pero aún ve el problema en el móvil :( No estoy seguro de que haya una solución real aquí.
ACK_stoverflow
84

¡Usa unidades CSS vh!

Probablemente, la forma más obvia y no hacky de hacer un pie de página pegajoso sería utilizar las nuevas unidades de ventana de visualización CSS .

Tomemos por ejemplo el siguiente marcado simple:

<header>header goes here</header>
<div class="content">This page has little content</div>
<footer>This is my footer</footer>

Si el encabezado tiene 80px de alto y el pie de página tiene 40px de alto, entonces podemos hacer nuestro pie de página adhesivo con una sola regla en el contenido div:

.content {
    min-height: calc(100vh - 120px);
    /* 80px header + 40px footer = 120px  */
}

Lo que significa: deje que la altura de la división de contenido sea al menos el 100% de la altura de la vista menos las alturas combinadas del encabezado y pie de página.

Eso es.

... y así es como funciona el mismo código con mucho contenido en el div de contenido:

NÓTESE BIEN:

1) Se debe conocer la altura del encabezado y pie de página

2) Las versiones anteriores de IE (IE8-) y Android (4.4-) no son compatibles con las unidades de ventana gráfica. ( caniuse )

3) Érase una vez que webkit tenía un problema con las unidades de ventana gráfica dentro de una regla de cálculo. De hecho, esto se ha solucionado ( ver aquí ) para que no haya ningún problema allí. Sin embargo, si está buscando evitar el uso de calc por alguna razón, puede evitarlo usando márgenes negativos y relleno con tamaño de caja:

Al igual que:

Danield
fuente
44
Esta es prácticamente la mejor solución que he visto aquí, funcionó incluso en mi extraño caso con algunos contenidos del contenido que se desbordan en el pie de página por quién sabe qué. Y supongo que con algo como Sass y variables, podría ser cada vez más flexible.
themarketka
1
De hecho, este funciona como un encanto. Fácil de recurrir para un navegador no compatible también.
Aramir
3
¿Cómo es que jugar con medidas absolutas no es todavía hacky? En el mejor de los casos, quizás sea menos hacky
Jonathan
¿Pero y si la altura del pie de página y el encabezado se mide en porcentaje y no px? ¿Te gusta el 15% del alto de la página?
Fernanda Brum Lousada
3
Las unidades de ventana gráfica no siempre funcionan como se esperaba en los navegadores móviles que ocultan o muestran la barra de direcciones dependiendo de la posición de desplazamiento
Evgeny
57

Pie de página adhesivo con display: flex

Solución inspirada en el pie de página adhesivo de Philip Walton .

Explicación

Esta solución es válida solo para :

  • Chrome ≥ 21.0
  • Firefox ≥ 20.0
  • Internet Explorer ≥ 10
  • Safari ≥ 6.1

Se basa en la flexpantalla , aprovechando la flex-growpropiedad, que permite que un elemento crezca en altura o anchura (cuando flow-directionse establece en cualquiera columno rowrespectivamente), para ocupar el espacio adicional en el contenedor.

Vamos a aprovechar también la vhunidad, donde 1vhse define como :

1/100 de la altura de la ventana gráfica

Por lo tanto, su altura 100vhes una forma concisa de decirle a un elemento que abarque la altura de la ventana gráfica completa.

Así es como estructuraría su página web:

----------- body -----------
----------------------------

---------- footer ----------
----------------------------

Para que el pie de página se pegue en la parte inferior de la página, desea que el espacio entre el cuerpo y el pie de página crezca tanto como sea necesario para empujar el pie de página en la parte inferior de la página.

Por lo tanto, nuestro diseño se convierte en:

----------- body -----------
----------------------------

---------- spacer ----------
                             <- This element must grow in height
----------------------------

---------- footer ----------
----------------------------

Implementación

body {
    margin: 0;
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

.spacer {
    flex: 1;
}

/* make it visible for the purposes of demo */
.footer {
    height: 50px;
    background-color: red;
}
<body>
    <div class="content">Hello World!</div>
    <div class="spacer"></div>
    <footer class="footer"></footer>
</body>

Puedes jugar con él en el JSFiddle .

Caprichos del safari

Tenga en cuenta que Safari tiene una implementación defectuosa de la flex-shrinkpropiedad , que permite que los elementos se reduzcan más de la altura mínima que se requeriría para mostrar el contenido. Para solucionar este problema, deberá establecer la flex-shrinkpropiedad explícitamente en 0 en .contenty footeren el ejemplo anterior:

.content { flex-shrink: 0; }
.footer  { flex-shrink: 0; }
gcedo
fuente
13
Creo que esta es la respuesta correcta, ya que en realidad es el único enfoque que funciona incluso cuando no se conoce la altura del pie de página.
fstanis
Esto desordena la cuadrícula con Neat 2
Halfacht
Pero, ¿por qué no la solución de Philip Walton en sí misma, por qué un elemento "espaciador" adicional?
YakovL
@YakovL En el .Site-contentelemento de solución de Walton juega el mismo papel que spacer. Simplemente se llama de manera diferente.
Gherman el
@Gherman bueno, .Site-contenttiene un análogo .contenten este marcado ... pero no importa, pregunté por el caso gcedo tiene una idea específica al respecto, no hay necesidad de adivinar
YakovL
30

Puede usar el position: absolutesiguiente para colocar el pie de página en la parte inferior de la página, pero luego asegúrese de que sus 2 columnas tengan el apropiado margin-bottompara que el pie de página nunca las ocluya.

#footer {
    position: absolute;
    bottom: 0px;
    width: 100%;
}
#content, #sidebar { 
    margin-bottom: 5em; 
}
Palanqueta
fuente
He intentado esto con mi configuración similar (dos columnas + pie de página) y no funciona.
isomorfismos el
14
Se superpone con el contenido si el contenido crece.
Satya Prakash
1
Es por eso que el contenido tiene el margen inferior. debe establecerlo a la altura fija que haga el pie de página.
Jimmy
Por lo que vale, si algo es un valor cero, no importa en qué unidad de medida se encuentre, nada es nada, por lo que todas las 0pxs en todas las hojas de estilo que he visto deberían ser justas 0.
Jonathan
¿Qué sucede si la altura de la página es mayor que la altura de la pantalla o la longitud del contenido del pie de página es dinámica? Vea mi respuesta para la solución de este problema.
Ravinder Payal
15

Aquí hay una solución con jQuery que funciona como un encanto. Comprueba si la altura de la ventana es mayor que la altura del cuerpo. Si es así, cambia el margen superior del pie de página para compensar. Probado en Firefox, Chrome, Safari y Opera.

$( function () {

    var height_diff = $( window ).height() - $( 'body' ).height();
    if ( height_diff > 0 ) {
        $( '#footer' ).css( 'margin-top', height_diff );
    }

});

Si su pie de página ya tiene un margen superior (de 50 píxeles, por ejemplo), deberá cambiar la última parte para:

css( 'margin-top', height_diff + 50 )
Sophivorus
fuente
Una alternativa es agregar un div "empujador" justo antes del pie de página. Luego ajuste la altura del empujador div. Esto evita tener que lidiar con el margen superior existente
Zarzaparrilla
Vea mi respuesta para una solución sin js.
Ferit
11

Establezca el CSS para #footer:

position: absolute;
bottom: 0;

A continuación, deberá agregar una paddingo marginen la parte inferior de su #sidebary #contentpara que coincida con la altura de #footero cuando se superponen, el#footer cubrirá.

Además, si no recuerdo mal, IE6 tiene un problema con el bottom: 0CSS. Puede que tenga que usar una solución JS para IE6 (si le importa IE6).

Raleigh Buckner
fuente
10
cuando la ventana es demasiado pequeña, el pie de página aparece delante del contenido con este CSS.
Seichi
1
Ver mi respuesta @Seichi
ferit
6

Una solución similar a @gcedo pero sin la necesidad de agregar un contenido intermedio para empujar el pie de página hacia abajo. Simplemente podemos agregar margin-top:autoal pie de página y será empujado al final de la página, independientemente de su altura o la altura del contenido anterior.

body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  margin:0;
}

.content {
  padding: 50px;
  background: red;
}

.footer {
  margin-top: auto;
  padding:10px;
  background: green;
}
<div class="content">
  some content here
</div>
<footer class="footer">
  some content
</footer>

Temani Afif
fuente
1
Otro enfoque sería dar .content flex: 1 0 auto;para que sea cultivable y no shinkable, pero margin-top: auto;es un buen truco que implica un estilo de pie de página, no "no relacionado", lo .contentcual es bueno. En realidad, me pregunto por qué se necesita flexibilidad en este enfoque ...
YakovL
@YakovL sí, la idea principal aquí es el truco de margen superior;) Sé que puedo hacer el contenido de esta manera, pero será casi lo mismo que una respuesta anterior donde la idea es empujar el pie de página por el contenido ... y aquí quería evitar esto y empujar el pie de página solo con margen;)
Temani Afif
@YakovL flex es necesario para el margen: automático :) no podemos usarlo sin él ... como margen: el comportamiento automático es ligeramente diferente con el elemento flexible y luego bloquea los elementos. Si lo elimina display:flexno funcionará, tendrá un flujo de elementos de bloque normal
Temani Afif
Sí, puedo ver que no funcionará sin él, pero no entiendo por qué (qué es "ligeramente diferente")
YakovL
1
@YakovL es simple, usando el elemento de bloque normal, el flujo siempre es una dirección de fila, por lo que solo funcionará el margen derecho / izquierdo utilizado con automático (como el famoso margin:0 autoelemento de bloque central) PERO no tenemos ninguna dirección de columna, por lo que no hay margen auto con arriba / abajo. Flexbox tiene ambas direcciones de fila / columna;). Esta es la ligera diferencia, pero el margen también se usa dentro de flexbox para alinear el elemento, por lo que incluso dentro de una dirección de fila puede usar el margen superior / inferior automático para alinear verticalmente. Puede leer más aquí: w3.org/TR/css- FlexBox-1 / # auto-márgenes
Temani Afif
5

ingrese la descripción de la imagen aquí

index.html:

<!DOCTYPE html>

<html>
 <head>
   <link rel="stylesheet" type="text/css" href="main.css" />
 </head>

<body>
 <div id="page-container">
   <div id="content-wrap">
     <!-- all other page content -->
   </div>
   <footer id="footer"></footer>
 </div>
</body>

</html>

main.css:

#page-container {
  position: relative;
  min-height: 100vh;
}

#content-wrap {
  padding-bottom: 2.5rem;    /* Footer height */
}

#footer {
  position: absolute;
  bottom: 0;
  width: 100%;
  height: 2.5rem;            /* Footer height */
}

Fuente: https://www.freecodecamp.org/news/how-to-keep-your-footer-where-it-belongs-59c6aa05c59c/

fermentar
fuente
2

A veces tuve problemas con esto y siempre encontré que la solución con todos esos div dentro de cada uno era una solución desordenada. Simplemente lo jugué un poco, y personalmente descubrí que esto funciona y ciertamente es una de las formas más simples:

html {
    position: relative;
}

html, body {
    margin: 0;
    padding: 0;
    min-height: 100%;
}

footer {
    position: absolute;
    bottom: 0;
}

Lo que me gusta de esto es que no es necesario aplicar HTML adicional. Simplemente puede agregar este CSS y luego escribir su HTML como siempre

Daniel Alsaker
fuente
Esto me funcionó, sin embargo, agregué ancho: 100% al pie de página.
Victor.Uduak
2

Dado que la solución Grid aún no se ha presentado, aquí está, con solo dos declaraciones para el elemento padre , si damos por sentado el height: 100%y margin: 0:

html, body {height: 100%}

body {
  display: grid; /* generates a block-level grid */
  align-content: space-between; /* places an even amount of space between each grid item, with no space at the far ends */
  margin: 0;
}

.content {
  background: lightgreen;
  /* demo / for default snippet window */
  height: 1em;
  animation: height 2.5s linear alternate infinite;
}

footer {background: lightblue}

@keyframes height {to {height: 250px}}
<div class="content">Content</div>
<footer>Footer</footer>

Los artículos se distribuyen uniformemente dentro del contenedor de alineación a lo largo del eje transversal. El espacio entre cada par de elementos adyacentes es el mismo. El primer elemento está al ras con el borde de inicio principal, y el último elemento está al ras con el borde del extremo principal.

VXp
fuente
1

CSS:

  #container{
            width: 100%;
            height: 100vh;
            }
 #container.footer{
            float:left;
            width:100%;
            height:20vh;
            margin-top:80vh;
            background-color:red;
            }

HTML:

           <div id="container">
               <div class="footer">
               </div>
           </div>

Esto debería ser útil si está buscando un pie de página sensible alineado en la parte inferior de la página, que siempre mantiene un margen superior del 80% de la altura de la ventana gráfica.

Ajith
fuente
1

Use el posicionamiento absoluto y el índice z para crear un div de pie de página fijo en cualquier resolución utilizando los siguientes pasos:

  • Crear un div de pie de página con position: absolute; bottom: 0; y la altura deseada
  • Establezca el relleno del pie de página para agregar espacios en blanco entre la parte inferior del contenido y la parte inferior de la ventana
  • Cree un contenedor divque envuelva el contenido del cuerpo conposition: relative; min-height: 100%;
  • Agregar relleno inferior al contenido principal div que sea igual a la altura más el relleno del pie de página
  • Establezca el z-indexpie de página más grande que el contenedor divsi el pie de página está recortado

Aquí hay un ejemplo:

    <!doctype html>
    <html>
    <head>
      <title>Sticky Footer</title>
      <meta charset="utf-8">
      <style>
      .wrapper { position: relative; min-height: 100%; }
      .footer { position: absolute; bottom:0; width: 100%; height: 200px; padding-top: 100px; background-color: gray; }
      .column { height: 2000px; padding-bottom: 300px; background-color: green; }
     /* Set the `html`, `body`, and container `div` to `height: 100%` for IE6 */

      </style>
    </head>
    <body>
      <div class="wrapper">
        <div class="column">
          <span>hello</span>
        </div>
        <div class="footer">
          <p>This is a test. This is only a test...</p>
        </div>
      </div>
    </body>
    </html>

Paul Sweatte
fuente
1

Para esta pregunta, muchas de las respuestas que he visto son torpes, difíciles de implementar e ineficientes, así que pensé en intentarlo y encontrar mi propia solución, que es solo un poco de CSS y HTML

html,
body {
  height: 100%;
  margin: 0;
}
.body {
  min-height: calc(100% - 2rem);
  width: 100%;
  background-color: grey;
}
.footer {
  height: 2rem;
  width: 100%;
  background-color: yellow;
}
<body>
  <div class="body">test as body</div>
  <div class="footer">test as footer</div>
</body>

esto funciona estableciendo la altura del pie de página y luego usando css calc para calcular la altura mínima que puede tener la página con el pie de página todavía en la parte inferior, espero que esto ayude a algunas personas :)

jjr2000
fuente
0

Una solución sería establecer la altura mínima para las cajas. Desafortunadamente, parece que IE no lo admite bien (sorpresa).

Pantera gris
fuente
0

Ninguna de estas soluciones css puras funciona correctamente con el cambio de tamaño dinámico del contenido (al menos en Firefox y Safari), por ejemplo, si tiene un fondo establecido en el contenedor div, la página y luego cambia el tamaño (agregando algunas filas) a la tabla dentro del div, el la tabla puede sobresalir de la parte inferior del área con estilo, es decir, puede tener la mitad de la tabla en blanco sobre el tema negro y la mitad de la tabla completa en blanco porque tanto el color de fuente como el color de fondo son blancos. Básicamente no se puede arreglar con las páginas de Themeroller.

El diseño de varias columnas de div anidado es un truco feo y el div de cuerpo / contenedor de altura mínima del 100% para el pie de página pegado es un truco más feo.

La única solución sin script que funciona en todos los navegadores que he probado: una tabla mucho más simple / corta con thead (para encabezado) / tfoot (para pie de página) / tbody (td para cualquier número de columnas) y 100% de altura. Pero esto ha percibido desventajas semánticas y de SEO (tfoot debe aparecer antes que tbody. Sin embargo, los roles ARIA pueden ayudar a los motores de búsqueda decentes).

obecalp
fuente
0

Varias personas han puesto la respuesta a este simple problema aquí, pero tengo una cosa que agregar, considerando lo frustrado que estaba hasta que descubrí lo que estaba haciendo mal.

Como se mencionó, la forma más sencilla de hacerlo es así ...

html {
    position: relative;
    min-height: 100%;
}

body {
    background-color: transparent;
    position: static;
    height: 100%;
    margin-bottom: 30px;
}

.site-footer {
    position: absolute;
    height: 30px;
    bottom: 0px;
    left: 0px;
    right: 0px;
}

Sin embargo, la propiedad no mencionada en las publicaciones, presumiblemente porque generalmente es predeterminada, es la posición: estática en la etiqueta del cuerpo. Posición relativa no funcionará!

Mi tema de WordPress había anulado la pantalla predeterminada del cuerpo y me confundió durante un tiempo desagradablemente largo.

Kyle Zimmer
fuente
0

Un viejo hilo que conozco, pero si está buscando una solución receptiva, esta adición de jQuery ayudará a:

$(window).on('resize',sticky);
$(document).bind("ready", function() {
   sticky();
});

function sticky() {
   var fh = $("footer").outerHeight();
   $("#push").css({'height': fh});
   $("#wrapper").css({'margin-bottom': -fh});
}

La guía completa se puede encontrar aquí: https://pixeldesigns.co.uk/blog/responsive-jquery-sticky-footer/

usuario1235285
fuente
0

He creado una biblioteca muy simple https://github.com/ravinderpayal/FooterJS

Es muy simple de usar. Después de incluir la biblioteca, simplemente llame a esta línea de código.

footer.init(document.getElementById("ID_OF_ELEMENT_CONTAINING_FOOTER"));

Los pies de página se pueden cambiar dinámicamente al recuperar la función anterior con diferentes parámetros / id.

footer.init(document.getElementById("ID_OF_ANOTHER_ELEMENT_CONTAINING_FOOTER"));

Nota: - No tiene que alterar ni agregar ningún CSS. La biblioteca es dinámica, lo que implica que incluso si se cambia el tamaño de la pantalla después de cargar la página, restablecerá la posición del pie de página. He creado esta biblioteca, porque CSS resuelve el problema por un tiempo, pero cuando el tamaño de la pantalla cambia significativamente, desde el escritorio a la tableta o viceversa, se superponen al contenido o ya no permanecen fijos.

Otra solución son las Consultas de medios CSS, pero debe escribir manualmente diferentes estilos CSS para diferentes tamaños de pantallas, mientras que esta biblioteca hace su trabajo automáticamente y es compatible con todos los navegadores básicos compatibles con JavaScript.

Editar solución CSS:

@media only screen and (min-height: 768px) {/* or height/length of body content including footer*/
    /* For mobile phones: */
    #footer {
        width: 100%;
        position:fixed;
        bottom:0;
    }
}

Ahora, si la altura de la pantalla es mayor que la longitud de su contenido, haremos que el pie de página se fije en la parte inferior y, de lo contrario, aparecerá automáticamente al final de la pantalla, ya que debe desplazarse para ver esto.

Y, parece una mejor solución que JavaScript / biblioteca uno.

Ravinder Payal
fuente
0

No tenía suerte con las soluciones sugeridas en esta página antes, pero finalmente, este pequeño truco funcionó. Lo incluiré como otra posible solución.

footer {
  position: fixed;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 1rem;
  background-color: #efefef;
  text-align: center;
}
Caballo riendo
fuente
0

Solución Flexbox

Se prefiere el diseño flexible para las alturas naturales de encabezado y pie de página. Esta solución flexible se prueba en navegadores modernos y realmente funciona :) en IE11.

Ver JS Fiddle .

HTML

<body>
  <header>
    ...
  </header>
  <main>
    ...
  </main>
  <footer>
    ...
  </footer>
</body>  

CSS

html {
  height: 100%;
}

body {
  height: 100%;
  min-height: 100vh;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  margin: 0;
  display: flex;
  flex-direction: column;
}

main {
  flex-grow: 1;
  flex-shrink: 0;
}

header,
footer {
  flex: none;
}
Reggie Pinkham
fuente
0

Para mí, la mejor manera de mostrarlo (el pie de página) es pegarse al final pero no cubrir el contenido todo el tiempo:

#my_footer {
    position: static
    fixed; bottom: 0
}
juan Isaza
fuente
1
¿Es correcta esta sintaxis? ¿Se supone que la posición es estática o fija?
stealththeninja
0

jQuery CROSS BROWSER PLUGIN PERSONALIZADO - $ .footerBottom ()

O use jQuery como lo hago yo, y configure la altura de su pie de página en autoo parafix lo que quiera, funcionará de todos modos. este complemento utiliza selectores jQuery, por lo que para que funcione, deberá incluir la biblioteca jQuery en su archivo.

Así es como ejecuta el complemento. ¡Importe jQuery, copie el código de este complemento jQuery personalizado e impórtelo después de importar jQuery! Es muy simple y básico, pero importante.

Cuando lo haces, todo lo que tienes que hacer es ejecutar este código:

$.footerBottom({target:"footer"}); //as html5 tag <footer>.
// You can change it to your preferred "div" with for example class "footer" 
// by setting target to {target:"div.footer"}

no es necesario colocarlo dentro del evento de documento listo. Funcionará bien como está. Volverá a calcular la posición de su pie de página cuando se cargue la página y cuando la ventana cambie de tamaño.

Aquí está el código del complemento que no tiene que entender. Solo sé cómo implementarlo. Hace el trabajo por ti. Sin embargo, si desea saber cómo funciona, solo mire el código. Te dejé comentarios.

//import jQuery library before this script

// Import jQuery library before this script

// Our custom jQuery Plugin
(function($) {
  $.footerBottom = function(options) { // Or use "$.fn.footerBottom" or "$.footerBottom" to call it globally directly from $.footerBottom();
    var defaults = {
      target: "footer",
      container: "html",
      innercontainer: "body",
      css: {
        footer: {
          position: "absolute",
          left: 0,
          bottom: 0,
        },

        html: {
          position: "relative",
          minHeight: "100%"
        }
      }
    };

    options = $.extend(defaults, options);

    // JUST SET SOME CSS DEFINED IN THE DEFAULTS SETTINGS ABOVE
    $(options.target).css({
      "position": options.css.footer.position,
      "left": options.css.footer.left,
      "bottom": options.css.footer.bottom,
    });

    $(options.container).css({
      "position": options.css.html.position,
      "min-height": options.css.html.minHeight,
    });

    function logic() {
      var footerOuterHeight = $(options.target).outerHeight(); // Get outer footer height
      $(options.innercontainer).css('padding-bottom', footerOuterHeight + "px"); // Set padding equal to footer height on body element
      $(options.target).css('height', footerOuterHeight + "!important"); // Set outerHeight of footer element to ... footer
      console.log("jQ custom plugin footerBottom runs"); // Display text in console so ou can check that it works in your browser. Delete it if you like.
    };

    // DEFINE WHEN TO RUN FUNCTION
    $(window).on('load resize', function() { // Run on page loaded and on window resized
      logic();
    });

    // RETURN OBJECT FOR CHAINING IF NEEDED - IF NOT DELETE
    // return this.each(function() {
    //   this.checked = true;
    // });
    // return this;
  };
})(jQuery); // End of plugin


// USE EXAMPLE
$.footerBottom(); // Run our plugin with all default settings for HTML5
/* Set your footer CSS to what ever you like it will work anyway */
footer {
  box-sizing: border-box;
  height: auto;
  width: 100%;
  padding: 30px 0;
  background-color: black;
  color: white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<!-- The structure doesn't matter much, you will always have html and body tag, so just make sure to point to your footer as needed if you use html5, as it should just do nothing run plugin with no settings it will work by default with the <footer> html5 tag -->
<body>
  <div class="content">
  <header>
    <nav>
      <ul>
        <li>link</li>
        <li>link</li>
        <li>link</li>
        <li>link</li>
        <li>link</li>
        <li>link</li>
      </ul>
    </nav>
  </header>

  <section>
      <p></p>
      <p>Lorem ipsum...</p>
    </section>
  </div>
  <footer>
    <p>Copyright 2009 Your name</p>
    <p>Copyright 2009 Your name</p>
    <p>Copyright 2009 Your name</p>
  </footer>

DevWL
fuente
Vanilla java-script es menos largo que el complemento.
Ravinder Payal
0

Las soluciones flexibles funcionaron para mí en lo que respecta a hacer que el pie de página sea adhesivo, pero desafortunadamente cambiar el cuerpo para usar el diseño flexible hizo que algunos de nuestros diseños de página cambiaran, y no para mejor. Lo que finalmente funcionó para mí fue:

    jQuery(document).ready(function() {

    var fht = jQuery('footer').outerHeight(true);
    jQuery('main').css('min-height', "calc(92vh - " + fht + "px)");

});

Obtuve esto de la respuesta de ctf0 en https://css-tricks.com/couple-takes-sticky-footer/

Roger
fuente
0

div.fixed {
   position: fixed;
   bottom: 0;
   right: 0;
   width: 100%;
   border: 3px solid #73AD21;
}
<body style="height:1500px">

   <h2>position: fixed;</h2>

   <p>An element with position: fixed; is positioned relative to the viewport, which means it always stays in the same place even if the page is scrolled:</p>

   <div class="fixed">
      This div element has position: fixed;
   </div>

</body>

antílope
fuente
0

Si no quieres usar la posición fija y seguirte de forma molesta en el móvil, esto parece estar funcionando para mí hasta ahora.

html {
    min-height: 100%;
    position: relative;
}

#site-footer {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    padding: 6px 2px;
    background: #32383e;
}

Simplemente configure el html en min-height: 100%;y position: relative;, luego, position: absolute; bottom: 0; left: 0;en el pie de página. Luego me aseguré de que el pie de página fuera el último elemento del cuerpo.

Avíseme si esto no funciona para nadie más y por qué. Sé que estos trucos de estilo tedioso pueden comportarse de manera extraña entre varias circunstancias en las que no había pensado.

kiko carisse
fuente
-1

Intente colocar un contenedor div (con overflow: auto) alrededor del contenido y la barra lateral.

Si eso no funciona, ¿tiene capturas de pantalla o enlaces de ejemplo donde el pie de página no se muestra correctamente?

John Sheehan
fuente