Bootstrap 3 Flush footer xuống dưới cùng. không cố định


177

Tôi đang sử dụng Bootstrap 3 cho một trang web tôi đang thiết kế.

Tôi muốn có một footer như mẫu này. Mẫu vật

Xin lưu ý rằng tôi không muốn nó CỐ ĐỊNH vì vậy bootstrap navbar-fixed-bottom không giải quyết được vấn đề của tôi. Tôi chỉ muốn nó luôn ở dưới cùng của nội dung và cũng được đáp ứng.

Bất kỳ hướng dẫn sẽ được rất nhiều đánh giá cao.


BIÊN TẬP:

Xin lỗi nếu tôi không rõ ràng. Điều xảy ra bây giờ là khi nội dung không có đủ nội dung. Chân của tôi di chuyển lên và sau đó nó để lại một khoảng trống ở phía dưới.

Đây là những gì tôi có bây giờ cho thanh điều hướng của tôi

<nav class="navbar navbar-inverse navbar-bottom" style="padding:0 0 120px 0">
        <div class="container">
            <div class="row">
                <div class="col-sm-4">
                    <h5 id='footer-header'> SITEMAP </h3>
                    <div class="col-sm-4" style="padding: 0 0 0 0px">
                        <p>News</p>
                        <p>contact</p>
                    </div>
                    <div class="col-sm-4" style="padding: 0 0 0 0px">
                        <p>FAQ</p>
                        <p>Privacy Policy</p>
                    </div>
                </div>
                <div class="col-sm-4">
                    <h5 id='footer-header'> xxxx </h3>
                    <p>yyyyyyyyyyyyy</p>
                </div>
                <div class="col-sm-4">
                    <h5 id='footer-header'> xxxxx </h3>
                    <p>uuuuuuuuuuuuuuu</p>
                </div>
            </div>
        </div>
    </nav>

CSS

.navbar-bottom {
min-height: 300px;
margin-top: 100px;
background-color: #28364f;
padding-top: 35px;
color:#FFFFFF;
}

Bạn có mã ví dụ mà bạn đang làm việc đang gây ra vấn đề cho bạn không?
badAdviceGuy

Có vẻ như chân trang thông thường, nếu bạn không muốn Cố định, bạn có thể cập nhật kiểu. Vấn đề bạn đang gặp phải là gì?
Đột biến

Khi đó là điều cuối cùng trong HTML của bạn, nó sẽ luôn ở dưới cùng. Câu hỏi khó hiểu cần một ví dụ mã để hiểu vấn đề là gì.
Joe Conlin


@davidpauljunior: Đó là những bước chân không phải là thứ tôi đang tìm kiếm
user3169403

Câu trả lời:


124

Xem ví dụ dưới đây. Điều này sẽ định vị Footer của bạn ở dưới cùng nếu trang có ít nội dung và hoạt động như chân trang bình thường nếu trang có nhiều nội dung hơn.

CSS

* {
    margin: 0;
}
html, body {
    height: 100%;
}
.wrapper {
    min-height: 100%;
    height: 100%;
    margin: 0 auto -155px; /* the bottom margin is the negative value of the footer's height */
}
.footer, .push {
    height: 155px; /* .push must be the same height as .footer */
}

HTML

<div class="wrapper">
  <p>Your website content here.</p>
  <div class="push"></div>
</div>
<div class="footer">
  <p>Copyright (c) 2008</p>
</div>

CẬP NHẬT : Phiên bản mới của Bootstrap trình bày cách thêm chân trang dính mà không cần thêm trình bao bọc. Vui lòng xem Câu trả lời của Jboy Flaga để biết thêm chi tiết.


Liên kết của bạn bị hỏng
Halter

2
Tại sao có hai định nghĩa thuộc tính chiều cao trong trình bao bọc?
Khó có thể nhận ra

@HardlyNoticizable một là chiều rộng tối thiểu để buộc trình bao bọc ngay cả khi nội dung ít hơn.
Surjith SM

Vẫn tự hỏi tại sao có hai định nghĩa thuộc tính chiều cao. Bạn đã không trả lời @SurjithSM
Erowlin

@Erowlin Đó là một lỗi. bạn không cần hai thuộc tính chiều cao. Chỉ chiều cao tối thiểu là đủ, chỉnh sửa câu trả lời.
Surjith SM

315

Có một giải pháp đơn giản hóa từ bootstrap tại đây (nơi bạn không cần tạo lớp mới): http://getbootstrap.com/examples/sticky-footer-navbar/

Khi bạn mở trang đó, nhấp chuột phải vào trình duyệt và "Xem nguồn" và mở tệp stick-footer-navbar.css ( http://getbootstrap.com/examples/sticky-footer-navbar/sticky-footer-navbar. css )

bạn có thể thấy rằng bạn chỉ cần CSS này

/* Sticky footer styles
-------------------------------------------------- */
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;
}

cho HTML này

<html>
    ...
    <body>
        <!-- Begin page content -->
        <div class="container">
        </div>
        ...

        <footer class="footer">
        </footer>
    </body>
</html>

19
Điều này (từ các tài liệu / ví dụ về Bootstrap) phải là câu trả lời được chấp nhận.
richardm

5
Đối với tôi điều này không hoạt động vì chân trang của tôi khá cao. Thật tuyệt nếu bạn chỉ muốn một đoạn nhưng tôi có một số cột - sử dụng phương pháp này, tôi kết thúc với một lề dưới chân trang khi tôi đi xuống kích thước nhỏ hơn
NightMICU

9
Đây không phải là giải pháp chân dính Bootstraps? Tôi không nghĩ OP có nghĩa này. Đối với tôi, với một trang dài, chân trang của tôi xuất hiện ở cuối màn hình nhưng không ở cuối nội dung (tức là trên nội dung). Tôi đã phải thay đổi Vị trí: tuyệt đối; đến người thân (trong lớp .footer) để làm việc này.
Tino Mclaren

24
Đây sẽ là câu trả lời chính xác nếu chủ đề này không có "không cố định" trong tiêu đề ...
lộn xộn

1
Điều này chỉ hoạt động cho chân trang với kích thước cố định, tôi thích giải pháp của Philip Walton như đề xuất của @ChristopherTan, siêu mỏng và độc lập với chiều cao của chân
buergi

16

sử dụng flexbox như bạn có thể sử dụng nó theo ý của bạn. Giải pháp được cung cấp bởi bootstrap 4 vẫn săn nội dung chồng chéo trong bố cục phản hồi, ví dụ: nó sẽ bị hỏng trong chế độ xem trên thiết bị di động, tôi gặp một mẹo nhỏ nhất là sử dụng bản demo giải pháp flexbox được hiển thị tại đây :( https://philipwalton.github.io / yet-by-flexbox / demos / stick-footer / ) theo cách này chúng ta không phải đối phó với vấn đề chiều cao cố định vốn là một giải pháp lỗi thời ... giải pháp này hoạt động cho bootstrap 3 và 4 bất cứ khi nào bạn sử dụng.

<body class="Site">
  <header></header>
  <main class="Site-content"></main>
  <footer></footer>
</body>

.Site {
  display: flex;
  min-height: 100vh;
  flex-direction: column;
}

.Site-content {
  flex: 1;
}

1
Đây là một giải pháp rất thông minh. Tôi nghĩ rằng CSS có quá nhiều thứ để cung cấp mà chúng ta thậm chí không biết cách tận dụng tối đa nó.
Gilbert

2
Tôi thích giải pháp này. Kinh ngạc.
Bagus Aji Santoso

14

CẬP NHẬT: Điều này không trực tiếp trả lời toàn bộ câu hỏi, nhưng những người khác có thể thấy điều này hữu ích.

Đây là HTML cho chân trang đáp ứng của bạn

<footer class="footer navbar-fixed-bottom">
     <div class="container">
     </div>
</footer>

Đối với CSS

footer{
    width:100%;
    min-height:100px;    
    background-color: #222; /* This color gets inverted color or you can add navbar inverse class in html */
}

GHI CHÚ: Tại thời điểm đăng bài cho câu hỏi này, các dòng mã trên không đẩy chân trang bên dưới nội dung trang; nhưng nó sẽ giữ chân trang của bạn không bò giữa chừng trang khi có ít nội dung trên trang. Để biết ví dụ đẩy chân trang bên dưới nội dung trang, hãy xem tại đây http://getbootstrap.com/examples/sticky-footer/


Đây thực sự là một giải pháp tồi, vì phần chân trang che đi nội dung chính khi họ gặp nhau. Bạn cần đặt bộ padding-bottomchứa nội dung chính bằng với chiều cao của chân trang. Và bạn cần phải làm nó một cách linh hoạt trên trang loadresizecác sự kiện và cả trên chân trang DOMSubtreeModified.
tao

9

Đối với những người vẫn đang vật lộn và giải pháp được trả lời không hoạt động hoàn toàn như bạn muốn, đây là giải pháp đơn giản nhất mà tôi đã tìm thấy.

Gói nội dung chính của bạn và gán cho nó một chiều cao xem tối thiểu. Điều chỉnh 60 đến bất cứ giá trị nào mà phong cách của bạn cần.

<div id="content" style="min-height:60vh"></div>
<div id="footer"></div>

Đó là nó và nó hoạt động khá tốt.


Tôi đã có cùng một vấn đề như một câu hỏi. Sau khi thử hầu hết tất cả các câu trả lời được xếp hạng cao ở đây, đây là câu trả lời duy nhất phù hợp với tôi. Và nó đã làm việc trong tất cả các kích cỡ. Chỉ thay đổi tôi đã thực hiện là "min-height: 70vh". Điều này sẽ phụ thuộc vào kích thước đầu trang và chân trang của trang web của bạn.
Arfath

Điều này nên cao hơn, hoạt động chính xác như yêu cầu.
khoai lang

Điều này làm việc cho nhu cầu của tôi. Chỉ cần điều chỉnh giá trị chiều cao tối thiểu cho đến khi bạn nhận được kết quả mong muốn.
sawyerrken

Thật tuyệt vời, đây là giải pháp đơn giản và hiệu quả nhất cho vấn đề vị trí chân trang!
Prahlad Yeri

5

Galen Gidman đã đăng một giải pháp thực sự tốt cho vấn đề chân trang dính đáp ứng không có chiều cao cố định. Bạn có thể tìm thấy giải pháp đầy đủ của anh ấy trên blog của anh ấy: http://galengidman.com/2014/03/25/responsive-flexible-height-sticky- feeters-in-css /

HTML

<header class="page-row">
  <h1>Site Title</h1>
</header>

<main class="page-row page-row-expanded">
  <p>Page content goes here.</p>
</main>

<footer class="page-row">
  <p>Copyright, blah blah blah.</p>
</footer>

CSS

html,
body { height: 100%; }

body {
  display: table;
  width: 100%;
}

.page-row {
  display: table-row;
  height: 1px;
}

.page-row-expanded { height: 100%; }

Điều này dường như tương thích với bootstrap, và do đó nên là câu trả lời được chấp nhận, imho. Nó không hoàn hảo, vì một thanh cuộn ngang dường như đang xuất hiện.
Florian Mertens

Florian: Không có thanh cuộn ngang cho tôi.
Khó có thể nhận ra

4

Đối với một giải pháp CSS thuần túy, cuộn sau lần thứ 2 <hr>. Câu hỏi đầu tiên là câu trả lời ban đầu (được trả lại vào năm 2016)


Lỗ hổng lớn của các giải pháp ở trên là chúng có chiều cao cố định cho chân trang.
Và điều đó không thể cắt nó trong thế giới thực, nơi mọi người sử dụng hàng trăm triệu thiết bị và có thói quen xấu này là xoay chúng khi bạn ít mong đợi nhất và ** gặp sự cố!** có nội dung trang của bạn phía sau chân trang!

Trong thế giới thực, bạn cần một hàm tính toán chiều cao của chân trang và tự động điều chỉnh nội dung trang padding-bottomđể phù hợp với chiều cao đó. Và bạn cần chạy chức năng nhỏ bé này trên trang loadresizecác sự kiện cũng như trên footerDOMSubtreeModified (chỉ trong trường hợp chân trang của bạn được cập nhật động không đồng bộ hoặc nó chứa các yếu tố hoạt hình thay đổi kích thước khi tương tác với).

Đây là một bằng chứng về khái niệm, sử dụng jQuery v3.0.0và Bootstrap v4-alpha, nhưng không có lý do gì nó không hoạt động trên các phiên bản thấp hơn của mỗi phiên bản.

Ban đầu, tôi đã đăng giải pháp này tại đây nhưng tôi nhận ra nó có thể giúp nhiều người hơn nếu được đăng dưới câu hỏi này.

Lưu ý: Tôi đã cố tình quấn $([selector]).accomodateFooter()như một plugin jQuery, vì vậy nó có thể được chạy trên bất kỳ phần tử DOM, như trong hầu hết các bố trí nó không phải là $('body')bottom-paddingnhu cầu mà điều chỉnh, nhưng một số trang wrapper phần tử với position:relative(thường là cha mẹ trực tiếp của footer) .


Chỉnh sửa sau (hơn 3 năm sau câu trả lời ban đầu):

Tại thời điểm này, tôi không còn xem xét chấp nhận sử dụng JavaScript để định vị chân trang nội dung động ở cuối trang. Nó có thể đạt được chỉ với CSS, sử dụng flexbox, nhanh như chớp, trình duyệt chéo.

Đây là:


3

Phương pháp này sử dụng đánh dấu tối thiểu. Chỉ cần đặt tất cả nội dung của bạn vào .wrapper có đáy đệm và đáy lề âm bằng với chiều cao chân trang (trong ví dụ 100px của tôi).

html, body {
    height: 100%;
}

/* give the wrapper a padding-bottom and negative margin-bottom equal to the footer height */

.wrapper {
    min-height: 100%;
    height: auto;
    margin: 0 auto -100px;
    padding-bottom: 100px;
}
.footer {
    height: 100px;
}

<body>

<div class="wrapper">
  <p>Your website content here.</p>
</div>
<div class="footer">
   <p>Copyright (c) 2014</p>
</div>

</body>

2

Hoặc cái này

<footer class="navbar navbar-default navbar-fixed-bottom">
    <p class="text-muted" align="center">This is a footer</p>
</footer>

1

Đối với Bootstrap:

<div class="navbar-fixed-bottom row-fluid">
  <div class="navbar-inner">
    <div class="container">
      Text
    </div>
  </div>
</div>

2
Câu hỏi đặc biệt nêu rõ đó navbar-fixed-bottomKHÔNG phải là điều giải quyết vấn đề.
p4sh4

1

Không có giải pháp nào trong số này thực sự hiệu quả với tôi vì tôi đã sử dụng lớp đảo ngược thanh điều hướng trong phần chân trang của mình. Nhưng tôi đã có được một giải pháp hiệu quả và không có Javascript. Được sử dụng Chrome để hỗ trợ hình thành các truy vấn phương tiện. Chiều cao của chân trang thay đổi khi màn hình thay đổi kích thước để bạn phải chú ý đến điều đó và điều chỉnh cho phù hợp. Nội dung chân trang của bạn (Tôi đặt id = "footer" để xác định nội dung của tôi) nên sử dụng postion = perfect và bottom = 0 để giữ nó ở dưới cùng. Ngoài ra chiều rộng: 100%. Đây là CSS của tôi với các truy vấn phương tiện truyền thông. Bạn sẽ phải điều chỉnh chiều rộng tối thiểu và chiều rộng tối đa và thêm hoặc xóa một số yếu tố:

#footer {
  position: absolute;
  color:  #ffffff;
  width: 100%;
  bottom: 0; 
}
@media only screen and (min-width:1px) and (max-width: 407px)  {
    body {
        margin-bottom: 275px;
    }

    #footer {
        height: 270px; 
    }
}
@media only screen and (min-width:408px) and (max-width: 768px)  {
    body {
        margin-bottom: 245px;
    }

    #footer {
        height: 240px; 
    }
}
@media only screen and (min-width:769px)   {
    body {
        margin-bottom: 125px;
    }

    #footer {
        height: 120px; 
    }
}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.