पृष्ठ या सामग्री के नीचे पाद, जो भी कम हो


92

मेरे पास निम्नलिखित संरचना है:

<body>
    <div id="main-wrapper">
        <header>
        </header>
        <nav>
        </nav>
        <article>
        </article>
        <footer>
        </footer>
    </div>
</body>

मैं <article>जावास्क्रिप्ट का उपयोग करके सामग्री को गतिशील रूप से लोड करता हूं । इस वजह से, <article>ब्लॉक की ऊंचाई बदल सकती है।

मैं चाहता हूं कि <footer>बहुत अधिक सामग्री होने पर ब्लॉक पृष्ठ के निचले भाग में हो, या ब्राउज़र विंडो के निचले भाग में तब हो जब सामग्री की कुछ ही पंक्तियां मौजूद हों।

फिलहाल मैं एक या दूसरे कर सकता हूं ... लेकिन दोनों नहीं।

तो क्या किसी को पता है कि मैं यह कैसे कर सकता हूं - <footer>पृष्ठ / सामग्री या स्क्रीन के निचले हिस्से के नीचे से चिपके रहने के लिए, जिसके आधार पर यह कम है।


क्या लोग इस पर टिप्पणी करने की परवाह करेंगे कि उन्होंने 2 साल पुराने सवाल को क्यों गलत ठहराया?
विल

चलो, लगभग 6 साल हो गए ...
विल

जवाबों:


99

रयान फ़ेट का चिपचिपा पाद बहुत अच्छा है, हालाँकि मुझे इसकी कमी * की मूल संरचना लगती है।


फ्लेक्सबॉक्स संस्करण

यदि आप पर्याप्त भाग्यशाली हैं कि आप पुराने ब्राउज़र का समर्थन करने के लिए बिना फ्लेक्सबॉक्स का उपयोग कर सकते हैं, तो चिपचिपा पाद तुच्छ रूप से आसान हो जाते हैं, और एक गतिशील आकार के पाद का समर्थन करते हैं।

फ्लेक्सबॉक्स के साथ नीचे चिपके रहने के लिए पाद प्राप्त करने की चाल एक ही कंटेनर फ्लेक्स में अन्य तत्वों को लंबवत रूप से रखना है। सभी इसे लेता है एक पूर्ण-ऊंचाई वाले रैपर तत्व display: flexऔर कम से कम एक सहोदर flexसे अधिक मूल्य वाला 0:

सीएसएस:
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

#main-wrapper {
  display: flex;
  flex-direction: column;
  min-height: 100%;
}

article {
  flex: 1;
}


यदि आप flexbox का उपयोग नहीं कर सकते हैं, तो मेरी पसंद का आधार संरचना है:

<div class="page">
  <div class="page__inner">
    <header class="header">
      <div class="header__inner">
      </div>
    </header>
    <nav class="nav">
      <div class="nav__inner">
      </div>
    </nav>
    <main class="wrapper">
      <div class="wrapper__inner">
        <div class="content">
          <div class="content__inner">
          </div>
        </div>
        <div class="sidebar">
          <div class="sidebar__inner">
          </div>
        </div>
      </div>
    </main>
    <footer class="footer">
      <div class="footer__inner">
      </div>
    </footer>
  </div>
</div>

जो सब से दूर नहीं है:

<div id="main-wrapper">
    <header>
    </header>
    <nav>
    </nav>
    <article>
    </article>
    <footer>
    </footer>
</div>

पाद को छड़ी करने के लिए छल करने के लिए पाद को अपने युक्त तत्व के निचले पैडिंग के लिए लंगर डालना है। इसके लिए आवश्यक है कि पाद की ऊंचाई स्थिर हो, लेकिन मैंने पाया है कि पाद आमतौर पर स्थिर ऊँचाई के होते हैं।

HTML:
<div id="main-wrapper">
    ...
    <footer>
    </footer>
</div>
सीएसएस:
#main-wrapper {
    padding: 0 0 100px;
    position: relative;
}

footer {
    bottom: 0;
    height: 100px;
    left: 0;
    position: absolute;
    width: 100%;
}

पाद लेख के साथ #main-wrapper, आपको अब #main-wrapperपृष्ठ की कम से कम ऊंचाई चाहिए, जब तक कि उसके बच्चे लंबे न हों। यह बनाने के द्वारा किया जाता #main-wrapperएक है min-heightकी 100%। आपको यह भी याद रखना होगा कि इसके माता-पिता, htmlऔर bodyपेज के समान ही लंबा होना चाहिए।

सीएसएस:
html,
body {
    height: 100%;
    margin: 0;
    padding: 0;
}

#main-wrapper {
    min-height: 100%;
    padding: 0 0 100px;
    position: relative;
}

footer {
    bottom: 0;
    height: 100px;
    left: 0;
    position: absolute;
    width: 100%;
}

बेशक, आपको मेरे फैसले पर सवाल उठाना चाहिए, क्योंकि यह कोड पृष्ठ के नीचे से पाद लेख को नीचे गिराने के लिए मजबूर कर रहा है, तब भी जब कोई सामग्री हो। पिछले चाल द्वारा प्रयोग किया जाता बॉक्स मॉडल बदलने के लिए है #main-wrapper, इसलिए है कि min-heightके 100%शामिल 100pxगद्दी।

सीएसएस:
html,
body {
    height: 100%;
    margin: 0;
    padding: 0;
}

#main-wrapper {
    box-sizing: border-box;
    min-height: 100%;
    padding: 0 0 100px;
    position: relative;
}

footer {
    bottom: 0;
    height: 100px;
    left: 0;
    position: absolute;
    width: 100%;
}

और वहां आपके पास, आपके मूल HTML संरचना के साथ एक चिपचिपा पाद है। बस ऐसे ही यह सुनिश्चित कर लें footerकी heightके बराबर है #main-wrappers ' padding-bottom, और आप सेट होना चाहिए।


* इसका कारण मुझे फेट की संरचना में दोष लगता है क्योंकि यह अनावश्यक तत्व को जोड़ते समय विभिन्न पदानुक्रमित स्तरों पर तत्वों .footerऔर .headerतत्वों को सेट करता है .push


मुझे जोड़ने की आवश्यकता थी #main-wrapper *:first-child { margin-top: 0; }, अन्यथा पहले बच्चे के शीर्ष मार्जिन से पृष्ठ बहुत लंबा होगा (छोटे पृष्ठों पर अनावश्यक स्क्रॉलबार के कारण)।
फ्लोरियन ब्रूकर

शुक्रिया, @zzzzBov इस पूरी तरह से स्पष्टीकरण के लिए, और विशेष रूप से फ्लेक्स-दिशा का उल्लेख करने के लिए (काश मैं इसे जल्द ही मिल जाता - मुझे घंटे के एक जोड़े को बचाया होता! :)
ea0723

फ्लेक्सबॉक्स संस्करण IE11 में मेरे लिए काम नहीं कर रहा है, लेकिन अन्य दृष्टिकोण मेरे लिए ठीक है! धन्यवाद और +1!
मैट

@ मैट, आपको IE11 में काम करने के लिए फ्लेक्सबॉक्स प्राप्त करने के लिए ब्राउज़र उपसर्गों का उपयोग करने की आवश्यकता है। ऑटोप्रिफ़र जैसे उपकरण का उपयोग करें और आपको उन्हें मैन्युअल रूप से जोड़ने के बारे में चिंता करने की आवश्यकता नहीं होगी।
13

2
उसकी साइट को उसके लिए एक मेमोरियम नोटिस में परिवर्तित करने के कारण चिपचिपा पाद लेख लिंक टूटा हुआ प्रतीत होता है। इसके अलावा, robots.txt की सेटिंग के कारण कैश किए गए संस्करण नहीं हैं
tzrlk

13

रेयान फ़ेट का चिपचिपा पाद एक सरल उपाय है जिसका उपयोग मैंने अतीत में कई बार किया है।

मूल HTML :

<div class="wrapper">
    <div class="header">
        <h1>CSS Sticky Footer</h1>
    </div>
    <div class="content"></div>
    <div class="push"></div>
</div>
<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 */
}

/*

Sticky Footer by Ryan Fait
http://ryanfait.com/

*/

इसका अनुवाद करना आपके लिए इन पंक्तियों के साथ पहले से ही परिणाम के समान है:

HTML :

<body>
    <div class="wrapper">
        <header>
        </header>
        <nav>
        </nav>
        <article>
        </article>
        <div class="push"></div>
    </div>
    <footer>
    </footer>
</body>

सीएसएस:

* {
    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 */
}

बस अपने पाद की ऊंचाई और धक्का div मैच के लिए रैपर मार्जिन पर नकारात्मक अद्यतन करने के लिए मत भूलना। सौभाग्य!


4
मैं जिस तरह से नीचे टिप्पणी करता हूं, वह एक पाद समाधान के लिए उपयुक्त है: डी
मदारा का भूत

इस विशेष शैली के लिए मार्कअप को बदलने की कोई आवश्यकता नहीं है।
zzzzBov

@zzzzBov के पास इस समय इस पर गौर करने के लिए ज्यादा समय नहीं है, लेकिन वास्तव में आपका क्या मतलब है?
जोश मे

मैं अपने मोबाइल एटीएम पर हूं इसलिए मैं एक पूर्ण उत्तर नहीं लिख सकता अन्यथा मैंने पहले ही ऐसा कर लिया होता। टिप्पणी अधिक थी इसलिए मुझे बाद में उत्तर जोड़ना याद होगा।
zzzzBov

@JoshMein, मैंने एक उत्तर जोड़ा है जो बताता है कि प्रदान की गई संरचना के साथ खिलवाड़ किए बिना पाद लेख को कैसे बनाया जाए।
zzzzBov

0

मैं बिना किसी अतिरिक्त मार्कअप को जोड़े इस समस्या को हल करना चाह रहा था, इसलिए मैंने निम्नलिखित समाधान का उपयोग किया:

article {
  min-height: calc(100vh - 150px); /* deduct the height or margins of any other elements within wrapping container*/
}

footer {
  height: 50px;
}

header {
   height: 50px;
}

nav {
  height: 50px;
}
<body>
  <div id="main-wrapper">
    <header>
    </header>
    <nav>
    </nav>
    <article>
    </article>
    <footer>
    </footer>
  </div>
</body>

आपको लेख के लिए न्यूनतम ऊंचाई निर्धारित करने में सक्षम होने के लिए शीर्ष लेख, नौसेना और पाद लेख की ऊंचाइयों को जानना होगा। इसके द्वारा, यदि लेख में सामग्री की कुछ पंक्तियाँ हैं, तो पाद लेख ब्राउज़र विंडो के निचले भाग पर चिपक जाएगा, अन्यथा यह सभी सामग्री से नीचे चला जाएगा।

आप इसे और अन्य समाधान यहां ऊपर पोस्ट कर सकते हैं: https://css-tricks.com/couple-takes-sticky-booter/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.