ओवरफ्लो स्क्रॉल सीएसएस div में काम नहीं कर रहा है


124

मैं अपने HTML पृष्ठ स्क्रॉलिंग समस्या के लिए CSS / Javascript समाधान की तलाश कर रहा हूं।

मेरे पास तीन div हैं जिनमें एक div, हैडर और एक रैपर div है,

मुझे रैपर div में एक ऊर्ध्वाधर स्क्रॉलबार की आवश्यकता है, सामग्री के आधार पर ऊंचाई ऑटो या 100% होनी चाहिए।

शीर्ष लेख को ठीक किया जाना चाहिए, और मुझे संपूर्ण स्क्रॉलबार नहीं चाहिए, इसलिए मैंने overflow:hiddenबॉडी टैग में दिया है,

मुझे अपने रैपर div में वर्टिकल स्क्रॉलबार की जरूरत है। मैं इसे कैसे ठीक करूं?

एचटीएमएल

<div id="container">

    <div class="header"></div>

    <div class="wrapper">
        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus porta tortor sed metus. Nam pretium. Sed tempor. Integer ullamcorper, odio quis porttitor sagittis, nisl erat tincidunt massa, eu eleifend eros nibh sollicitudin est. Nulla dignissim. Mauris sollicitudin, arcu id sagittis placerat, tellus mauris egestas felis, eget interdum mi nibh vel lorem. Aliquam egestas hendrerit massa. Suspendisse sed nunc et lacus feugiat hendrerit. Nam cursus euismod augue. Aenean vehicula nisl eu quam luctus adipiscing. Nunc consequat justo pretium orci. Mauris hendrerit fermentum massa. Aenean consectetuer est ut arcu. Aliquam nisl massa, blandit at, accumsan sed, porta vel, metus. Duis fringilla quam ut eros.</p>
        <!-- Lots more paragraphs-->
    </div>

</div>

सीएसएस

body{ margin:0; padding:0; overflow:hidden; height:100%}
#container { width:1000px; margin:0 auto;}
.header { width:1000px; height:30px; background-color:#dadada;}
.wrapper{ width:1000px; overflow:scroll; position:relative;}

कृपया इस जेएस फिडेल को देखें

जवाबों:


152

आपको heightCSS प्रॉपर्टी याद आ रही है।

इसे जोड़ने पर आप देखेंगे कि स्क्रॉल बार दिखाई देगा।

.wrapper{ 
    // width: 1000px;
    width:600px; 
    overflow-y:scroll; 
    position:relative;
    height: 300px;
}

JSFIDDLE

से प्रलेखन :

overflow-y

अतिप्रवाह-y सीएसएस संपत्ति निर्दिष्ट करती है कि क्या सामग्री को क्लिप करना है, एक स्क्रॉल बार को प्रस्तुत करना है, या ब्लॉक-स्तरीय तत्व के अतिप्रवाह सामग्री को प्रदर्शित करना है, जब यह शीर्ष और निचले किनारों पर ओवरफ्लो होता है।


8
व्यूपोर्ट में ऊंचाई को कैसे रोकें? मैं पिक्सेल में हार्डकोड नहीं करना चाहता, क्योंकि यह विभिन्न स्क्रीन आकारों के लिए काम नहीं करता है
djechlin

@djechlin उसके लिए एक प्रश्न पूछें। संभवतः आप प्रतिशत मूल्यों का उपयोग कर सकते हैं या dislpay: fixed... मुझे यकीन नहीं है कि आप क्या करने की कोशिश कर रहे हैं।
आयनों बिज़ुआ

12
व्यूपोर्ट ऊँचाई की संपत्ति का उपयोग करें: ऊँचाई: 100vh
यूसुफ

32

इसका समाधान आपके height:100%;सभी मूल तत्वों को जोड़ना है .wrapper-div। इसलिए:

html{
    height: 100%;
}

body{ 
    margin:0;
    padding:0;
    overflow:hidden;
    height:100%;
}

#container{
    width:1000px;
    margin:0 auto;
    height:100%;
}

24

यदि आप .wrapperकक्षा में ऊँचाई जोड़ते हैं तो आपका स्क्रॉल काम कर रहा है, बिना heightस्क्रॉल काम नहीं कर रहा है।

इसे आज़माएं http://jsfiddle.net/ZcrFr/3/

सीएसएस:

.wrapper {
  position: relative;
  overflow: scroll;
  width: 1000px;
  height: 800px;
}

4
धन्यवाद, लेकिन मेरी वास्तविक आवश्यकता यह है कि मुझे कोई ऊँचाई नहीं देनी चाहिए 100% या ऑटो दे सकते हैं, सामग्री को ब्राउज़र विंडो के अनुसार लेना चाहिए, क्या आप CSS / JAVASCRIPT में कोई अन्य समाधान कर सकते हैं?
user2493730

जब मैं प्रतिशत में ऊँचाई देता हूँ तो यह काम क्यों नहीं कर रहा हैheight:100%
कोडिंग वर्ल्ड

7

आपने div को ऊँचाई नहीं दी। जब अधिक सामग्री जोड़ी जाएगी तो यह अपने आप खिंच जाएगा। इसे ठीक-ऊँचाई दें और स्क्रॉल पट्टियाँ दिखाई देंगी।


2
धन्यवाद, लेकिन मेरी वास्तविक आवश्यकता यह है कि मुझे कोई ऊंचाई नहीं देनी चाहिए हो सकता है कि वह 100% या ऑटो दे सके, सामग्री ब्राउज़र विंडो के अनुसार लेनी चाहिए, क्या आप CSS / JAVASCRIPT में कोई अन्य समाधान कर सकते हैं?
user2493730

1
इसे 100% की ऊंचाई दें। फिर आप अतिप्रवाह और खुद के लिए आवश्यकताओं को पूरा करते हैं।
निक

6

यदि आप अपने हेडर के लिए एक स्थिर ऊंचाई निर्धारित करते हैं, तो आप अपने आवरण के आकार के लिए गणना में उपयोग कर सकते हैं।

http://jsfiddle.net/ske5Lqyv/5/

अपने उदाहरण कोड का उपयोग करके, आप इस CSS को जोड़ सकते हैं:

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

#container {
  height: 100%;
}

.header {
  height: 64px;
  background-color: lightblue;
}

.wrapper {
  height: calc(100% - 64px);
  overflow-y: auto;
}

या, आप अधिक गतिशील दृष्टिकोण के लिए फ्लेक्सबॉक्स का उपयोग कर सकते हैं http://jsfiddle.net/19zbs7je/3/

<div id="container">
  <div class="section">
    <div class="header">Heading</div>
    <div class="wrapper">
      <p>Large Text</p>
    </div>
  </div>
</div>

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

#container {
  display: flex;
  flex-direction: column;
  height: 100%;
}

.section {
  flex-grow: 1;
  display: flex;
  flex-direction: column;
  min-height: 0;
}

.header {
  height: 64px;
  background-color: lightblue;
  flex-shrink: 0;
}

.wrapper {
  flex-grow: 1;
  overflow: auto;
  min-height: 100%; 
}

और अगर आप भी कट्टर होना चाहते हैं, तो इस सवाल पर मेरी प्रतिक्रिया पर एक नज़र डालें https://stackoverflow.com/a/52416148/1513083


4

मैंने आपका संपादन किया: फिडल

html, body{ margin:0; padding:0; overflow:hidden; height:100% }
.header { margin: 0 auto; width:500px; height:30px; background-color:#dadada;}
.wrapper{ margin: 0 auto; width:500px; overflow:scroll; height: 100%;}

Html-tag को 100% ऊँचाई देना इसका हल है। मैंने कंटेनर डिव को भी हटा दिया। जब आपका लेआउट इस तरह रहता है तो आपको इसकी आवश्यकता नहीं है।


इसके काम करने के लिए धन्यवाद, लेकिन कोडर स्लाइडर अवधारणा का उपयोग कर रहा हूं इसका मुख्य कंटेनर डिव है, हेडर क्षेत्र मेरे पास तीन तलाक तय होना चाहिए, अंदर आवरण सामग्री क्षेत्र केवल स्क्रॉल होना चाहिए, आपने कहा कि कंटेनर को हटा दें तो मैं इस मुद्दे को किसी अन्य तरीके से कैसे ठीक कर सकता हूं pl?
user2493730

1

मैं @Ionica Bizau पर टिप्पणी करना चाहता था, लेकिन मेरे पास पर्याप्त प्रतिष्ठा नहीं है।
जावास्क्रिप्ट कोड के बारे में अपने प्रश्न का उत्तर देने के लिए:
आपको जो करने की आवश्यकता है, वह माता-पिता के तत्व की ऊँचाई (किसी भी तत्व जो कि जगह लेते हैं) को प्राप्त करने के लिए और बच्चे के तत्वों पर लागू होता है।

function wrapperHeight(){
    var height = $(window).outerHeight() - $('#header').outerHeight(true);
    $('.wrapper').css({"max-height":height+"px"});      
}

नोट
विंडो को ".container" द्वारा प्रतिस्थापित किया जा सकता है, अगर किसी में कोई तैरता हुआ बच्चा नहीं है या सही ऊँचाई की गणना करने के लिए कोई फिक्स है। यह समाधान jQuery का उपयोग करता है।


यह एक CSS समस्या है कि जावास्क्रिप्ट का उपयोग क्यों करें?
ग्लेनग

क्योंकि ओपी ने सीएसएस / जावास्क्रिप्ट समाधान के लिए कहा। पहले से ही एक अच्छा सीएसएस समाधान था और मुझे विश्वास है कि उस समय जेपी ने जेएस में इसे कैसे किया जाए, इस पर सबसे अधिक वोट किए गए उत्तर पर टिप्पणी की थी। लेकिन यह कुछ साल रहा है इसलिए मुझे गलत याद आ सकता है ;-)
एनिमा-टी

1

Angular2 + Material2 + Sidenav के लिए, आपको निम्नलिखित कार्य करने होंगे:

 ngAfterViewInit() {
   this.element.nativeElement.getElementsByClassName('md-sidenav-content')[0].style.overflow = 'hidden'; 
  }

2
उस पर कोई और अधिक जानकारी? आप सामग्री 2 के मामले overflow:hiddenमें क्यों नहीं डाल सकते हैं css?
कुंसविक.देव।

0

मेरे मामले में, केवल height: 100vhअपेक्षित व्यवहार के साथ समस्या को ठीक करें


-1

एक ऊर्ध्वाधर स्क्रॉलबार के लिए इसे आज़माएं:

overflow-y:scroll;

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