Pregunta Cómo crear un pie de página adhesivo que funcione bien con Bootstrap 3


Con o sin un navegador superior, es muy común que los sitios tengan un pie de página adhesivo. Bootstrap tiene una facilidad para crear fácilmente fijo pies de página, pero sin tal facilidad Para crear pegajoso pies de página - hay una gran diferencia.

Buscar en Google esta pregunta revelará que cientos, si no miles, de desarrolladores tienen la misma pregunta pero no tienen una buena respuesta.

Irónicamente, el Documentación de Bootstrap La página en sí tiene un pie de página adhesivo junto con el estilo bootstrap y una barra de navegación superior fija. Sin embargo, todo es CSS personalizado, y no parte del marco. Así que una ruta obvia es tomar y refactorizar su estilo personalizado, ya que obviamente funciona bien dentro del marco Bootstrap, pero eso parece más doloroso de lo que debería ser.

Ver este plunkr para una página de ejemplo con una barra de navegación superior de Bootstrap y un pie de página indeseable y no adhesivo.

Problema:

(Gracias Softlayer - por el gráficos)

A non-sticky footer is pretty ugly

Solución deseada:

A sticky footer is always at the bottom

Por supuesto, el pie de página también debe ser receptivo y compatible con varios navegadores ...


74
2017-11-03 19:22


origen


Respuestas:


La respuesta, como señala Schmalzy, se puede encontrar aquí en la sección de ejemplos del sitio getbootstrap.

Pero ese ejemplo no incluye un navegador superior. Para navegación superior fija con pie de página adhesivo, consulte esta plnkr, o código a continuación.

Estilo CSS:

/* Styles go here */

/* Sticky footer styles
-------------------------------------------------- */

html,
body {
  height: 100%;
  /* The html and body elements cannot have any padding or margin. */
}

/* Wrapper for page content to push down footer */
#wrap {
  min-height: 100%;
  height: auto;
  /* Negative indent footer by its height */
  margin: 0 auto -60px;
  /* Pad bottom by footer height */
  padding: 0 0 60px;
}

/* Set the fixed height of the footer here */
#footer {
  height: 60px;
  background-color: #f5f5f5;
}


/* Custom page CSS
-------------------------------------------------- */
/* Not required for template or sticky footer method. */

.container {
  width: auto;
  max-width: 680px;
  padding: 0 15px;
}
.container .credit {
  margin: 20px 0;
}

Index.html:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="shortcut icon" href="../../docs-assets/ico/favicon.png">

    <title>Sticky Footer Template for Bootstrap</title>

    <!-- Bootstrap core CSS -->
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.1/css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="style.css" rel="stylesheet">

    <!-- Just for debugging purposes. Don't actually copy this line! -->
    <!--[if lt IE 9]><script src="../../docs-assets/js/ie8-responsive-file-warning.js"></script><![endif]-->

    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
      <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
    <![endif]-->
  </head>

  <body>

    <!-- Wrap all page content here -->
    <div id="wrap">

<nav class="navbar navbar-default" role="navigation">
  <!-- Brand and toggle get grouped for better mobile display -->
  <div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
      <span class="sr-only">Toggle navigation</span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
    </button>
    <a class="navbar-brand" href="#">Brand</a>
  </div>

  <!-- Collect the nav links, forms, and other content for toggling -->
  <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
    <ul class="nav navbar-nav">
      <li class="active"><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
      <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
        <ul class="dropdown-menu">
          <li><a href="#">Action</a></li>
          <li><a href="#">Another action</a></li>
          <li><a href="#">Something else here</a></li>
          <li class="divider"></li>
          <li><a href="#">Separated link</a></li>
          <li class="divider"></li>
          <li><a href="#">One more separated link</a></li>
        </ul>
      </li>
    </ul>
    <form class="navbar-form navbar-left" role="search">
      <div class="form-group">
        <input type="text" class="form-control" placeholder="Search">
      </div>
      <button type="submit" class="btn btn-default">Submit</button>
    </form>
    <ul class="nav navbar-nav navbar-right">
      <li><a href="#">Link</a></li>
      <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
        <ul class="dropdown-menu">
          <li><a href="#">Action</a></li>
          <li><a href="#">Another action</a></li>
          <li><a href="#">Something else here</a></li>
          <li class="divider"></li>
          <li><a href="#">Separated link</a></li>
        </ul>
      </li>
    </ul>
  </div><!-- /.navbar-collapse -->
</nav>

      <!-- Begin page content -->
      <div class="container">

        <div class="page-header">
          <h1>Sticky footer</h1>
        </div>
        <p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.</p>
        <p>Use <a href="../sticky-footer-navbar">the sticky footer with a fixed navbar</a> if need be, too.</p>
      </div>
    </div><!-- Wrap Div end -->

    <div id="footer">
      <div class="container">
        <p class="text-muted credit">Example courtesy <a href="http://martinbean.co.uk">Martin Bean</a> and <a href="http://ryanfait.com/sticky-footer/">Ryan Fait</a>.</p>
      </div>
    </div>


    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
  </body>
</html>

77
2017-11-03 21:17



Las soluciones de pie de página fijo que se basan en pies de página de altura fija caen en desuso con enfoques receptivos (donde la altura del pie de página a menudo cambia en diferentes puntos de quiebre). La solución de pie de página adhesiva más simple que he visto implica el uso de display: table en un contenedor de nivel superior, por ejemplo:

http://galengidman.com/2014/03/25/responsive-flexible-height-sticky-footers-in-css/

http://timothy-long.com/responsive-sticky-footer/

http://www.visualdecree.co.uk/posts/2013/12/17/responsive-sticky-footers/


24
2018-05-23 15:53



La mejor manera es hacer lo siguiente:
HTML:Pie de página adhesivo
CSS: CSS para el pie de página adhesivo
Muestra de código HTML:

<div class="container">
  <div class="page-header">
    <h1>Sticky footer</h1>
  </div>
  <p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.</p>
  <p>Use <a href="../sticky-footer-navbar">the sticky footer with a fixed navbar</a> if need be, too.</p>
</div>

<footer class="footer">
  <div class="container">
    <p class="text-muted">Place sticky footer content here.</p>
  </div>
</footer>

Muestra de código CSS:

    html {
  position: relative;
  min-height: 100%;
}
body {
  /* Margin bottom by footer height */
  margin-bottom: 60px;
}
.footer {
  position: absolute;
  bottom: 0;
  width: 100%;
  /* Set the fixed height of the footer here */
  height: 60px;
  background-color: #f5f5f5;
}

Otro pequeño ajuste podría hacerlo más perfecto (depende de su proyecto), por lo que no afectará el pie de página en las vistas móviles.

@media (max-width:768px){ .footer{position:absolute;width:100%;} }
@media (min-width:768px){ .footer{position:absolute;bottom:0;height:60px;width:100%;}}

19
2017-12-24 10:40



He estado buscando una forma simple de hacer que el pie de página adhesivo funcione. Acabo de aplicar un class="navbar-fixed-bottom"y funcionó al instante Lo único que debe tener en cuenta es ajustar la configuración del pie de página para dispositivos móviles. ¡Aclamaciones!


14
2017-07-09 14:37



Para aquellos que buscan una respuesta ligera, puede obtener un ejemplo de trabajo simple de aquí:

html {
    position: relative;
    min-height: 100%;
}
body {
    margin-bottom: 60px /* Height of the footer */
}
footer {
    position: absolute;
    bottom: 0;
    width: 100%;
    height: 60px /* Example value */
}

Solo juega con el bodyes margin-bottom para agregar espacio entre el contenido y el pie de página.


6
2017-07-28 14:33



Voy a detallar lo que dijo robodo en uno de los comentarios anteriores, un enfoque realmente rápido y atractivo, y lo que es más importante, receptivo (no de altura fija) que no involucra ningún truco es usar flexbox. Si no estás limitado por el apoyo de los navegadores, es una gran solución.

HTML

<body>
  <div class="site-content">
    Site content
  </div>
  <footer class="footer">
    Footer content
  </footer>
</body>

CSS

html {
  height: 100%;
}
body {
  min-height: 100%;
  display: flex;
  flex-direction: column;
}
.site-content {
  flex: 1;
}

El soporte del navegador se puede verificar aquí: http://caniuse.com/#feat=flexbox

Soluciones de problemas más comunes usando flexbox: https://github.com/philipwalton/solved-by-flexbox


2
2018-01-07 22:28



No estoy seguro de lo que ha intentado hasta ahora, pero es bastante simple. Solo haz esto: http://plnkr.co/edit/kmEWh7?p=preview

html, body {
  height: 100%;
}

footer {
  position: absolute;
  bottom: 0;
}

1
2017-11-03 20:57



Dado que está en el arranque 3, el sitio usará jQuery. Entonces, la solución también podría ser la siguiente, en lugar de tratar de jugar con CSS complejo:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <link href="css/bootstrap.min.css" rel="stylesheet" />
    <style>
        .my-footer {
            border-radius : 0px;
            margin : 0px; /* pesky margin below .navbar */
            position : absolute;
            width : 100%;
        }
    </style>
</head>
<body>
    <div class="container-fluid">
        <div class="row">
            <!-- Content of any length -->
            asdfasdfasdfasdfs <br />
            asdfasdfasdfasdfs <br />
            asdfasdfasdfasdfs <br />
        </div>
    </div>

    <div class="navbar navbar-inverse my-footer">
        <div class="container-fluid">
            <div class="row">
                <p class="navbar-text">My footer content goes here...</p>
            </div>
        </div>
    </div>

    <script src="js/jquery-1.11.0.min.js"></script>
    <script src="js/bootstrap.min.js"></script>

    <script type="text/javascript">
        $(document).ready(function () {
            var $docH = $(document).height();
            // The document height will grow as the content on the page grows.
            $('.my-footer').css({
                /*
                The default height of .navbar is 50px with a 1px border,
                change this 52 if you change the height of your footer.
                */
                top: ($docH - 52) + 'px'
            });
        });
    </script>
</body>
</html>

Una perspectiva diferente, espero que ayude.

Saludos cordiales.


1
2017-08-01 07:57



establecer fácilmente

position:absolute;
bottom:0;
width:100%;

a tu .footer

solo hazlo


1
2017-07-02 07:00