2012-03-11 15 views
7

मैं मुख्य सामग्री क्षेत्र और एक साइडबार के साथ एक वेबसाइट बनाने की कोशिश कर रहा हूं, जैसे स्टैक ओवरफ़्लो पर कुछ। लक्ष्य यह है कि जब आप नीचे स्क्रॉल करते हैं, तो साइडबार दिखाई देता है।सीएसएस/जेएस में एक निश्चित/चिपचिपा साइडबार कैसे बनाएं?

मैं इस में दो तरीकों का देखा है:

  1. position:fixed;
  2. डोम

दृष्टिकोण के साथ जावास्क्रिप्ट हेरफेर नहीं। 1, जहां तक ​​मुझे पता है, व्यूपोर्ट साइडबार सामग्री से छोटा होने पर एक समस्या होगी, इसलिए मुझे लगता है कि विश्वसनीय रूप से उपयोग नहीं किया जा सकता है और जावास्क्रिप्ट स्क्रिप्ट जो मैंने देखा है आमतौर पर एनिमेटेड या आमतौर पर "धीमा" होता है (आप देख सकते हैं कि प्रत्येक स्क्रॉल के बाद फिर से चल रहा है)।

क्या कोई जावास्क्रिप्ट लाइब्रेरी/सीएसएस दृष्टिकोण को इंगित कर सकता है जो उपर्युक्त मुद्दों से ग्रस्त नहीं होगा?

संपादित: एक उदाहरण के साइडबार एक एनीमेशन के बिना शीर्ष करने के लिए चिपके हुए और सही ढंग से स्थिति से निपटने जब साइडबार से सामग्री/व्यूपोर्ट अधिक है साथ this pageलेकिन होगा।

+2

क्या आपने जावास्क्रिप्ट के साथ विंडो की ऊंचाई को पुनर्प्राप्त करने का प्रयास किया है, फिर इस ऊंचाई को 'स्थिति: निश्चित' पर साइडबार पर दे दिया है, जिसमें आपकी आवश्यकता के अनुरूप 'अतिप्रवाह' है? – rayfranco

+0

यह काम कर सकता है, अच्छा विचार। – Borek

+0

क्षमा करें, शायद इस समय इस के साथ प्रयोग करने का समय नहीं होगा लेकिन बाद में वापस आने का प्रयास करेगा। यदि आपके पास हाथ में एक कामकाजी उदाहरण है तो यह चीजों को गति देगा। – Borek

उत्तर

1

आप ग्राहक खिड़की की ऊंचाई को पकड़ने और अपने साइडबार करने के लिए इसे इस तरह दे सकता है:

#sidebar { 
    position: fixed; 
    right: 0; 
    top: 0; 
    width: 200px; 
    overflow: hidden; 
} 

Here is a working JSFiddle.

तुम भी देख सकते हैं:

var sidebarHeight = $(window).innerHeight(); 

$('#sidebar')​​​​​​​​​​​.css('height',sidebarHeight);​​​​​​​​​​​​​ 
साइडबार के लिए उचित सीएसएस के साथ

आकार बदलने पर गड़बड़ी से बचने के लिए खिड़की का आकार बदलने के लिए :) Here is the way to go with jQuery

गुड लक

+1

मैं सीएसएस 3 मीडिया क्वेरी के बारे में कुछ पढ़ने की भी सिफारिश करता हूं, बस मामले में। यहां इसके बारे में एक उत्कृष्ट लेख दिया गया है: http://webdesignerwall.com/tutorials/responsive-design-in-3-steps – Chango

0
+0

यह समाधान समस्या 1 से भी पीड़ित है, यानी, जब साइडबार पृष्ठ सामग्री और व्यूपोर्ट से अधिक है, कुछ इसकी सामग्री में पहुंच योग्य नहीं है। – Borek

8

मैं भारी जे एस समाधान पसंद नहीं है, पूछने के लिए बहुत महत्वपूर्ण बात है - पसंदीदा अनुकूलता। IE8 में यह संभव है के बजाय

var $window = $(window), 
    $sidebar = $(sidebar); 

$window.on('resize', function(){ 
    $sidebar.height($window.innerHeight()); 
}); 

$window.resize(); 

कुछ इस तरह (शुद्ध सीएसएस समाधान) कर +:

#sidebar { 
    position: fixed; 
    left: 0; /* or right */ 
    top: 0; 
    bottom: 0; 
    overflow: auto; 
} 

जब आप शीर्ष & तल/एक ही समय में छोड़ दिया & सही मूल्य, बॉक्स होगा फैला हुआ था। (JSFiddle demo)

+1

धन्यवाद, यह निश्चित रूप से साइडबार सामग्री तक पहुंचने में सक्षम नहीं होने के मुकाबले बेहतर है, लेकिन क्या कोई समाधान है जो मुख्य स्क्रॉलबार का उपयोग करेगा और साइडबार के लिए केवल एक विशेष नहीं जोड़ता है? उदाहरण के लिए, उदाहरण के लिए, यदि इस पृष्ठ पर http://jsfiddle.net/h9XEc/1/ स्क्रॉलबार परिणाम फ्रेम के दाईं ओर था, साइडबार में नहीं। – Borek

3

समझ गया। यह जावास्क्रिप्ट आधारित है, लेकिन मुझे यकीन है कि यह कुछ भी भारी नहीं है और यहां तक ​​कि IE8 को इसे ठीक से हल करना चाहिए।

var top = $('#sidebar').offset().top; 
var height = $('#sidebar').height(); 
var winHeight = $(window).height(); 
var gap = 10; 
$(window).scroll(function(event) { 
    var scrollTop = $(this).scrollTop(); 

    // sidebar reached the (end - viewport height) 
    if (scrollTop + winHeight >= top + height + gap) { 
     // if so, fix the sidebar and make sure that offset().top will not give us results which would cancel the fixation 
     $('#sidebar').addClass('fixed').css('top', winHeight - height - gap + 'px'); 
    } else { 
     // otherwise remove it 
     $('#sidebar').removeClass('fixed').css('top', '0px'); 
    } 
});​ 

demo

1

सुनिश्चित नहीं हैं कि आप इस पता लगा लेकिन मैं एक निहित चिपचिपा साइडबार jQuery प्लगइन बनाया है है। यह वास्तव में सरल है और आपको jQuery की केवल एक पंक्ति के साथ आने की अनुमति देता है।यहां एक नज़र डालें: http://mojotech.github.com/stickymojo/

यह स्थिति से शुरू होता है: निश्चित; फिर किसी भी आकार को नियंत्रित करने के लिए जावास्क्रिप्ट का उपयोग करता है, स्क्रॉल करता है और यहां तक ​​कि आपको एक पाद लेख तत्व निर्दिष्ट करने की अनुमति देता है जिसे इसे छेड़छाड़ नहीं करना चाहिए। इन दृष्टिकोणों को जोड़कर आप एक चिकनी दिखने वाले निश्चित तत्व प्राप्त करेंगे। इसके अलावा, हमने आपके लिए यह आसान बना दिया है।

+1

अपने ब्राउज़र को 50px उच्च बनाने का प्रयास करें। आप अपनी साइडबार में डाउनलोड बटन कैसे एक्सेस करते हैं? – Borek

संबंधित मुद्दे