एचटीएमएल टेबल हेडर हमेशा बड़ी तालिका देखते समय खिड़की के शीर्ष पर दिखाई देते हैं


169

मैं एक फीचर जोड़ने के लिए एचटीएमएल टेबल की प्रस्तुति को "ट्वीक" करने में सक्षम होना चाहता हूं: जब पृष्ठ के माध्यम से नीचे स्क्रॉल किया जाता है ताकि टेबल स्क्रीन पर हो लेकिन हेडर पंक्तियां ऑफ-स्क्रीन हों, तो मैं चाहूंगा कि हेडर बने रहें देखने के क्षेत्र के शीर्ष पर दिखाई दे रहा है।

यह वैचारिक रूप से एक्सेल में "फ्रीज पैन" सुविधा की तरह होगा। हालाँकि, एक HTML पृष्ठ में इसमें कई सारणियाँ हो सकती हैं और मैं केवल यही चाहूंगा कि यह उस तालिका के लिए हो, जो वर्तमान में इन-व्यू है, जबकि यह केवल इन-व्यू है।

नोट: मैंने एक समाधान देखा है जहां तालिका डेटा क्षेत्र को स्क्रॉल किया जाता है जबकि हेडर स्क्रॉल नहीं करते हैं। वह समाधान नहीं है जिसकी मुझे तलाश है।


क्या आपका पृष्ठ टेबल का उपयोग करके बनाया गया है? क्या यह संभव नहीं है कि पहले इसे डिवोर्स में बदल दिया जाए और टेबलों के लिए टेबुलर डेटा को अकेला छोड़ दिया जाए।
लॉक करें

6
मैंने हाल ही में एक प्लगइन लिखा है जो यह करता है: programmingdrunk.com/floatThead
mkoryak

1
टॉप-वोटेड सॉल्यूशन और नीचे दिए गए डेरिवेटिव्स के अलावा, @mkoryak का प्लगइन भी काफी अच्छा है। "खरीदारी" समाप्त करने से पहले उस पर भी एक नज़र रखना सुनिश्चित करें।
डैनो

धन्यवाद डैन :) मेरे पास अगली रिलीज के लिए भी कुछ किक-गधा सुविधाएँ हैं
mkoryak

मैं दूसरा @mkoryak floatThead प्लगइन हूं - मैं इसे तेजी से एकीकृत करने में सक्षम था। प्लगइन के लिए बड़ा धन्यवाद!
w5m

जवाबों:


67

बाहर की जाँच करें jQuery.floatThead ( उपलब्ध डेमो ) जो बहुत शांत है, डेटाटेबल्स के साथ भी काम कर सकता है, और यहां तक ​​कि एक overflow: autoकंटेनर के अंदर भी काम कर सकता है ।


हाँ यह क्षैतिज स्क्रॉलिंग, विंडो स्क्रॉलिंग, इनर स्क्रॉलिंग और विंडो आकार बदलने के साथ काम करता है।
mkoryak

क्या आप एक वर्किंग कोड के साथ एक बेला जोड़ सकते हैं? (मुझे पता है कि साइट में है ...)
मिशेल आयरेस

12
मैंने एक विशाल डेमो / डॉक्स पृष्ठ बनाया है। आपको एक बेला की आवश्यकता क्यों है?
मकोरिक

5
@MustModify स्टैकओवरफ़्लो मुझसे सवाल पूछने के लिए एक अच्छी जगह नहीं है। गितुब पर एक मुद्दे की रिपोर्ट करें, भले ही इसका सिर्फ एक सवाल हो कि इसे कैसे काम करना है। एक दिन में आम तौर पर बीमार प्रतिक्रिया। यहाँ बीमार शायद एक साल से कम समय में जवाब देते हैं :)
mkoryak

1
@ इसकी कीमत क्या है, इसके उदाहरणों में तालिकाओं पर कोई भी वर्ग प्रासंगिक नहीं है। प्लगइन को काम करने के लिए किसी सीएसएस या कक्षाओं की आवश्यकता नहीं है, जैसा कि मेरे डॉक्स कहते हैं।
mkoryak

135

मैंने jQuery का उपयोग करते हुए एक प्रूफ-ऑफ-कॉन्सेप्ट सॉल्यूशन बनाया है ।

यहां देखें नमूना

मुझे अब यह कोड एक मर्क्यूरियल बिटबकेट रिपॉजिटरी में मिल गया है । मुख्य फ़ाइल है tables.html

मुझे इसके साथ एक मुद्दे के बारे में पता है: यदि तालिका में एंकर हैं, और यदि आप एक ब्राउज़र में निर्दिष्ट एंकर के साथ URL खोलते हैं, तो जब पृष्ठ लोड होता है, तो एंकर के साथ पंक्ति शायद अस्थायी हेडर द्वारा अस्पष्ट हो जाएगी।

अपडेट 2017-12-11: मैं देखता हूं कि यह वर्तमान फ़ायरफ़ॉक्स (57) और क्रोम (63) के साथ काम नहीं करता है। निश्चित नहीं है कि यह कब और क्यों काम करना बंद कर देगा, या इसे कैसे ठीक किया जाएगा। लेकिन अब, मुझे लगता है कि हेंडी इरावन द्वारा स्वीकार किया गया उत्तर बेहतर है।


मुझे इस चीज की जरूरत थी कि मैं क्या कर रहा हूं। बहुत मदद, धन्यवाद। मेरे साथ मैं विंडो का उपयोग नहीं कर रहा था क्योंकि स्क्रॉलिंग पेज html के भीतर एक div था। तो मैं परिवर्तन करना पड़ा floatingHeaderRow.css("top", Math.min(scrollTop - offset.top, $(this).height() - floatingHeaderRow.height()) + "px");करने के लिए floatingHeaderRow.css("top", scrollTop + "px");कोड के साथ के रूप में आप तालिका शीर्ष लेख पृष्ठ में और नीचे कूद गया था अंततः पेज बंद गायब करना पड़ा।
नलुम

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

हम्म मुझे यकीन नहीं है, आपके विवरण के आधार पर। मेरा सुझाव है 1) यदि संभव हो तो, ऑनलाइन एक उदाहरण दिखाएं; 2) इसे StackOverflow पर एक प्रश्न के रूप में पूछें।
क्रेग मैकक्वीन

@JonYork मैं वास्तव में एक ही मुद्दा था। मेरी समस्या हेडर में <t> के बजाय <td> का उपयोग कर रही थी, इसलिए यह प्रत्येक कॉलम की चौड़ाई को गैर-मौजूद <th> ( // Copy cell widths from original headerकोड का हिस्सा देखें ) पर लागू नहीं कर सकती थी । @ क्रेग मैक्वीन, कृपया अपना उत्तर संपादित करें ताकि कोई और यह गलती न करे।
एसेक्स

@CraigMcQueen जब मैं आपके भयानक कोड (धन्यवाद) का उपयोग करता हूं तो यह मेरे पास दूसरे टैब (jQuery टैब प्लगइन) के पीछे है जो दूसरी मेज पर है। कोई विचार? शीर्षलेख स्थान स्तंभों का अनुसरण करने के बजाय, बाईं ओर रखा गया है। लेकिन पहले jQuery टैब में टेबल पर पूरी तरह से काम करता है।
रिचर्ड ऐक

68

क्रेग, मैंने आपके कोड को थोड़ा परिष्कृत किया (कुछ अन्य चीजों के बीच जो अब स्थिति का उपयोग कर रहा है: निश्चित) और इसे एक jQuery प्लगइन के रूप में लपेटा।

इसे यहाँ आज़माएँ: http://jsfiddle.net/jmbesch/stFcx/

और यहाँ स्रोत प्राप्त करें: https://github.com/jmbesch/StickyTableHeaders


1
JQuery प्लगइन बनाने के लिए अच्छा विचार है। सवालों की एक जोड़ी: (1) क्या यह क्षैतिज स्क्रॉलिंग के साथ अच्छी तरह से काम करता है? (२) यह कैसे व्यवहार करता है जब आप नीचे स्क्रॉल करते हैं तो तालिका के नीचे खिड़की के शीर्ष पर स्क्रॉल होता है? उदाहरण उन मामलों के परीक्षण की अनुमति नहीं देता है।
क्रेग मैकक्वीन

आपका jsfiddle उदाहरण तालमेल के साथ बहुत अच्छा काम करता है, लेकिन जीथब पर कोड नहीं करता है। क्या आपको टेबल कोड को संशोधित करना था?
ericslaw

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

एरिक, यह अजीब है। क्या आपने Github से /demo/tablesorter.htm खोलने का प्रयास किया? मैंने टेबल कोड को संशोधित नहीं किया है, लेकिन इसे काम करने के लिए आपको टेबलटेकर से पहले स्टिकटेबल हैडर प्लगइन को लागू करने की आवश्यकता है।
जम्मिस्सर्च

2
क्षितिज स्क्रॉलिंग काफी काम नहीं करती है, काफी दूरी तक स्क्रॉल करने के बाद जब स्क्रीन को सामान्य रूप से टेबल के हिस्से के रूप में तैनात किया जाता है, तो स्क्रीन को स्क्रॉल करते समय थ्रेड को आगे छोड़ दिया जाता है।
नाथन फिलिप्स

16

यदि आप आधुनिक css3 अनुरूप ब्राउज़रों ( ब्राउज़र समर्थन: https://caniuse.com/#feat=css-sticky ) का उपयोग कर रहे हैं position:sticky, तो आप जेएस की आवश्यकता नहीं है और टेबल लेआउट मिस-एलाइनिंग वें को नहीं तोड़ेंगे और उसी कॉलम का td। न ही इसे ठीक से काम करने के लिए निश्चित स्तंभ चौड़ाई की आवश्यकता होती है।

एकल शीर्ष लेख पंक्ति के लिए उदाहरण:

thead th
{
    position: sticky;
    top: 0px;
}

1 या 2 पंक्तियों के साथ थ्रेड्स के लिए, आप कुछ इस तरह का उपयोग कर सकते हैं:

thead > :last-child th
{
    position: sticky;
    top: 30px; /* This is for all the the "th" elements in the second row, (in this casa is the last child element into the thead) */
}

thead > :first-child th
{
    position: sticky;
    top: 0px; /* This is for all the the "th" elements in the first child row */
}

आपको पहली पंक्ति की ऊंचाई (+ मार्जिन + बॉर्डर + गद्दी, यदि कोई हो) से मेल खाने के लिए पिक्सेल की संख्या को बदलने वाले अंतिम बच्चे की शीर्ष संपत्ति के साथ थोड़ा खेलने की आवश्यकता हो सकती है , इसलिए दूसरी पंक्ति बस नीचे चिपक जाती है पहले वाला

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

सीएसएस में पहले और पहले बच्चे के बाद अंतिम बच्चे का उपयोग क्यों करें ?

क्योंकि सीएसएस नियम ब्राउज़र द्वारा उसी क्रम में प्रस्तुत किए जाते हैं जैसे आप उन्हें सीएसएस फ़ाइल में लिखते हैं और इस वजह से अगर आपके पास थ्रेड तत्व में सिर्फ 1 पंक्ति है तो पहली पंक्ति एक साथ अंतिम पंक्ति भी है और पहले-बच्चे के नियम की आवश्यकता है पिछले बच्चे को ओवरराइड करने के लिए। यदि आपके पास शीर्ष मार्जिन से पंक्ति 30 px की ऑफसेट नहीं होगी, जो मुझे लगता है कि आप नहीं चाहते हैं।

स्थिति की ज्ञात समस्या: चिपचिपा यह थ्रेड तत्वों या तालिका पंक्तियों पर काम नहीं करता है: आपको वें तत्वों को लक्षित करना होगा। इस समस्या को हल करना भविष्य के ब्राउज़र संस्करणों पर हल किया जाएगा।


पहला उदाहरण फ़ायरफ़ॉक्स (61) में काम करने के लिए प्रकट नहीं होता है। हालाँकि, यदि पोजीशन स्टिकी थ्रेड पर सेट की जाती है, तो यह होता है।
EWH

1
आप thead tr+tr thदूसरी पंक्ति को लक्षित करने के लिए कर सकते हैं ।
तेइपेमम

5

संभव विकल्प

js-चल टेबल हेडर

js- फ़्लोटिंग-टेबल-हेडर (Google कोड)

द्रुपाल में

मेरे पास एक Drupal 6 साइट है। मैं व्यवस्थापक "मॉड्यूल" पृष्ठ पर था, और देखा कि तालिकाओं में यह सटीक विशेषता थी!

कोड को देखते हुए, इसे एक फ़ाइल नाम से लागू किया जा रहा है tableheader.js। यह वर्ग के साथ सभी तालिकाओं पर सुविधा लागू करता है sticky-enabled

Drupal साइट के लिए, मैं उस tableheader.jsमॉड्यूल का उपयोग करने में सक्षम होना चाहूंगा जो उपयोगकर्ता सामग्री के लिए है। tableheader.jsDrupal में उपयोगकर्ता सामग्री पृष्ठों पर मौजूद नहीं लगता है। मैंने एक मंच संदेश पोस्ट किया जिसमें पूछा गया कि ड्रुपल थीम को कैसे संशोधित किया जाए। एक प्रतिक्रिया के अनुसार, इस विषय के रूप में tableheader.jsउपयोग कर एक Drupal विषय में जोड़ा जा सकता है:drupal_add_js()template.php

drupal_add_js('misc/tableheader.js', 'core');

आपका Google कोड लिंक मेरे लिए बहुत उपयोगी था, tahnks।
विलियस गिडेलिस

5

मैंने इस समस्या का हाल ही में सामना किया है। दुर्भाग्य से, मुझे 2 तालिकाएं करनी थीं, एक शीर्ष लेख के लिए और एक शरीर के लिए। यह शायद अब तक का सबसे अच्छा तरीका नहीं है, लेकिन यहाँ जाता है:

<html>
<head>
    <title>oh hai</title>
</head>
<body>
    <table id="tableHeader">
        <tr>
            <th style="width:100px; background-color:#CCCCCC">col header</th>
            <th style="width:100px; background-color:#CCCCCC">col header</th>
        </tr>
    </table>
    <div style="height:50px; overflow:auto; width:250px">
        <table>
            <tr>
                <td style="height:50px; width:100px; background-color:#DDDDDD">data1</td>
                <td style="height:50px; width:100px; background-color:#DDDDDD">data1</td>
            </tr>
            <tr>
                <td style="height:50px; width:100px; background-color:#DDDDDD">data2</td>
                <td style="height:50px; width:100px; background-color:#DDDDDD">data2</td>
            </tr>
        </table>
    </div>
</body>
</html>

यह मेरे लिए काम किया, यह शायद सुंदर तरीका नहीं है, लेकिन यह काम करता है। मैं जांच करूंगा कि क्या मैं कुछ बेहतर कर सकता हूं, लेकिन यह कई तालिकाओं के लिए अनुमति देता है।

अतिप्रवाह पर पढ़ें, यह देखने के लिए कि क्या यह आपकी आवश्यकता के अनुरूप है


हम्म काम नहीं कर रहा है, मैं इसे ठीक करने की कोशिश करूँगा, लेकिन दृष्टिकोण बना हुआ है, आपको अतिप्रवाह का उपयोग करना होगा: ऑटो प्रॉपर्टी
रॉयर

मैं आपके समाधान और इसकी सादगी की सराहना करता हूं, हालांकि मेरे सवाल में मैंने कहा "नोट: मैंने एक समाधान देखा है जहां तालिका डेटा क्षेत्र को स्क्रॉल किया जाता है जबकि हेडर स्क्रॉल नहीं करते हैं। यह वह समाधान नहीं है जिसकी मुझे तलाश है।"
क्रेग मैकक्वीन

@GabRoyer आपके द्वारा संदर्भित w3school पृष्ठ मौजूद नहीं है।
फरहान

लगता है उन्होंने इसे स्थानांतरित कर दिया है। फिक्स्ड
गेब रॉयर

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

3

यह वास्तव में एक मुश्किल बात है कि आपकी मेज पर एक चिपचिपा हैडर है। मेरे पास समान आवश्यकता थी लेकिन एस्प के साथ : ग्रिड व्यू और फिर मैंने पाया कि वास्तव में ग्रिडव्यू पर चिपचिपा हेडर लगा है। कई समाधान उपलब्ध हैं और मुझे सभी समाधानों की कोशिश में 3 दिन लगे लेकिन उनमें से कोई भी संतुष्ट नहीं कर सका।

इनमें से अधिकांश समाधानों के साथ मुझे जो मुख्य मुद्दा मिला वह था संरेखण समस्या। जब आप हेडर को फ्लोटिंग बनाने की कोशिश करते हैं, तो किसी तरह हेडर सेल्स और बॉडी सेल्स का अलाइनमेंट ट्रैक से हट जाता है।

कुछ समाधानों के साथ, मुझे हेडर को बॉडी की पहली कुछ पंक्तियों में ओवरलैप होने का मुद्दा भी मिला, जिसके कारण बॉडी रो फ्लोटिंग हेडर के पीछे छिप गए।

इसलिए अब मुझे इसे प्राप्त करने के लिए अपने स्वयं के तर्क को लागू करना था, हालांकि मैं भी इसे सही समाधान नहीं मानता, लेकिन यह किसी के लिए भी उपयोगी हो सकता है,

नीचे नमूना तालिका है।

<div class="table-holder">
        <table id="MyTable" cellpadding="4" cellspacing="0" border="1px" class="customerTable">
            <thead>
                <tr><th>ID</th><th>First Name</th><th>Last Name</th><th>DOB</th><th>Place</th></tr>
            </thead>
            <tbody>
                <tr><td>1</td><td>Customer1</td><td>LastName</td><td>1-1-1</td><td>SUN</td></tr>
                <tr><td>2</td><td>Customer2</td><td>LastName</td><td>2-2-2</td><td>Earth</td></tr>
                <tr><td>3</td><td>Customer3</td><td>LastName</td><td>3-3-3</td><td>Mars</td></tr>
                <tr><td>4</td><td>Customer4</td><td>LastName</td><td>4-4-4</td><td>Venus</td></tr>
                <tr><td>5</td><td>Customer5</td><td>LastName</td><td>5-5-5</td><td>Saturn</td></tr>
                <tr><td>6</td><td>Customer6</td><td>LastName</td><td>6-6-6</td><td>Jupitor</td></tr>
                <tr><td>7</td><td>Customer7</td><td>LastName</td><td>7-7-7</td><td>Mercury</td></tr>
                <tr><td>8</td><td>Customer8</td><td>LastName</td><td>8-8-8</td><td>Moon</td></tr>
                <tr><td>9</td><td>Customer9</td><td>LastName</td><td>9-9-9</td><td>Uranus</td></tr>
                <tr><td>10</td><td>Customer10</td><td>LastName</td><td>10-10-10</td><td>Neptune</td></tr>
            </tbody>
        </table>
    </div>

ध्यान दें : तालिका 'तालिका-धारक' के बराबर वर्ग विशेषता के साथ एक DIV में लिपटी है।

नीचे JQuery स्क्रिप्ट है जो मैंने अपने html पेज हेडर में जोड़ी है।

<script src="../Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="../Scripts/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        //create var for table holder
        var originalTableHolder = $(".table-holder");
        // set the table holder's with
        originalTableHolder.width($('table', originalTableHolder).width() + 17);
        // Create a clone of table holder DIV
        var clonedtableHolder = originalTableHolder.clone();

        // Calculate height of all header rows.
        var headerHeight = 0;
        $('thead', originalTableHolder).each(function (index, element) {
            headerHeight = headerHeight + $(element).height();
        });

        // Set the position of cloned table so that cloned table overlapped the original
        clonedtableHolder.css('position', 'relative');
        clonedtableHolder.css('top', headerHeight + 'px');

        // Set the height of cloned header equal to header height only so that body is not visible of cloned header
        clonedtableHolder.height(headerHeight);
        clonedtableHolder.css('overflow', 'hidden');

        // reset the ID attribute of each element in cloned table
        $('*', clonedtableHolder).each(function (index, element) {
            if ($(element).attr('id')) {
                $(element).attr('id', $(element).attr('id') + '_Cloned');
            }
        });

        originalTableHolder.css('border-bottom', '1px solid #aaa');

        // Place the cloned table holder before original one
        originalTableHolder.before(clonedtableHolder);
    });
</script>

और सबसे नीचे रंग भरने के उद्देश्य के लिए सीएसएस क्लास है।

.table-holder
{
    height:200px;
    overflow:auto;
    border-width:0px;    
}

.customerTable thead
{
    background: #4b6c9e;        
    color:White;
}

इसलिए इस तर्क का पूरा विचार है कि टेबल को टेबल होल्डर डिव में रखें और पेज लोड होने पर क्लाइंट साइड में उस होल्डर का क्लोन बनाएं। अब क्लोन होल्डर के अंदर टेबल की बॉडी को छिपाएं और बाकी हेडर वाले हिस्से को ओरिजिनल हेडर पर रखें।

समान समाधान एस्प के लिए भी काम करता है: ग्रिडव्यू, आपको ग्रिडव्यू में इसे प्राप्त करने के लिए दो और चरणों को जोड़ने की आवश्यकता है,

  1. अपने वेब पेज में ग्रिडव्यू ऑब्जेक्ट के ऑनपैरेंडर इवेंट में, हेडर पंक्ति के टेबल सेक्शन को टेबल हैडर के बराबर सेट करें।

    if (this.HeaderRow != null)
    {
        this.HeaderRow.TableSection = TableRowSection.TableHeader;
    }
  2. और अपने ग्रिड में लपेटो <div class="table-holder"></div>

नोट : यदि आपके हेडर पर क्लिक करने योग्य नियंत्रण है, तो क्लोन हेडर में उठाए गए ईवेंट को मूल हेडर में पास करने के लिए आपको कुछ और jQuery स्क्रिप्ट जोड़ने की आवश्यकता हो सकती है। इस कोड jQuery चिपचिपा हेडर प्लगइन द्वारा बनाने में पहले से ही उपलब्ध है jmosbech


+1 अच्छे प्रयास के लिए, लेकिन बहुत सारे डेटा वाली बड़ी तालिकाओं के लिए, पूरी चीज़ का क्लोन करना बहुत बुरा है ... मुझे लगता है कि लोडिंग का समय दोगुना हो जाएगा
खावेरिम

2

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

लोकप्रिय जावास्क्रिप्ट चौखटे (jQuery, MooTools, YUI, आदि) पर एक नज़र डालें कि क्या वे या तो आप क्या चाहते हैं या जो आप चाहते हैं उसे करना आसान बना सकते हैं।


1
सलाह के लिए धन्यवाद। मैंने jQuery का उपयोग करके एक समाधान बनाया- मेरा उत्तर देखें।
क्रेग मैकक्वीन

मैंने यह कोशिश की और सोच रहा हूं कि आप प्रदर्शन के बजाय स्थिति का मतलब है, लेकिन न ही chome में काम के लिए काम किया।
ericslaw

@ericslaw Ack - हां मेरा मतलब था position: fixed । खेद है कि यह क्रोम में काम नहीं किया।
स्टेटिक्सन

चौड़ाई शैलियों को अनदेखा करके मेरे हैडर को गड़बड़ कर दिया
Pavel_kazlou

2

यदि आप एक पूर्ण स्क्रीन टेबल का उपयोग करते हैं, तो आप शायद वें को प्रदर्शित करने में रुचि रखते हैं: निश्चित; और शीर्ष: 0; या सीएसएस के माध्यम से बहुत समान दृष्टिकोण का प्रयास करें।

अपडेट करें

बस जल्दी से iframes (html4.0) के साथ एक काम कर समाधान का निर्माण। यह उदाहरण मानक अनुरूप नहीं है, हालांकि आप इसे आसानी से ठीक कर पाएंगे:

outer.html

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">   
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">     
    <head>      
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />   
        <title>Outer</title>
  <body>
    <iframe src="test.html" width="200" height="100"></iframe>
    </body>
</html> 

test.html

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">   
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">     
    <head>      
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />   
        <title>Floating</title>
    <style type="text/css">
      .content{
        position:relative; 
      }

      thead{
        background-color:red;
        position:fixed; 
        top:0;
      }
    </style>
  <body>
    <div class="content">      
      <table>
        <thead>
          <tr class="top"><td>Title</td></tr>
        </head>
        <tbody>
          <tr><td>a</td></tr>
          <tr><td>b</td></tr>
          <tr><td>c</td></tr>
          <tr><td>d</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
        </tbody>
      </table>
    </div>
    </body>
</html> 

@ a_m0d, सच ... लेकिन अनुरोध एक बड़ा भ्रामक लगता है। या तो हम इसे गलत समझ रहे हैं, या पूछने वाला पूरी तरह से समझ नहीं पाता है कि वह क्या चाहता है।
सैम्पसन

यहाँ कुछ javascript imaputz.com/cssStuff/bigFourVersion.html
merkuro

2

केवल सीएसएस का उपयोग करते हुए सबसे सरल उत्तर: डी !!!

table {
  /* Not required only for visualizing */
  border-collapse: collapse;
  width: 100%;
}

table thead tr th {
  /* you could also change td instead th depending your html code */
  background-color: green;
  position: sticky;
  z-index: 100;
  top: 0;
}

td {
  /* Not required only for visualizing */
  padding: 1em;
}
<table>
  <thead>
    <tr>
      <th>Col1</th>
      <th>Col2</th>
      <th>Col3</th>
    </tr>
  </thead>
  <tbody>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>david</td>
       <td>castro</td>
       <td>rocks!</td>
     </tr>
  </tbody>
</table>


1
धन्यवाद डेविड, यह सबसे अच्छा दृष्टिकोण है जो मैंने इस प्रश्न में पाया है
टॉमसज़ स्म्यकोव्स्की

0

आपके द्वारा बनाई गई अवधारणा का यह प्रमाण बहुत अच्छा था! हालाँकि मुझे यह jQuery प्लगइन भी मिला जो बहुत अच्छी तरह से काम करता है। आशा करता हूँ की ये काम करेगा!


ऐसा लगता है कि यह एक अलग सुविधा को लागू करता है । जैसा कि मैंने अपने मूल प्रश्न में कहा था: "नोट: मैंने एक समाधान देखा है जहाँ तालिका डेटा क्षेत्र को स्क्रॉल किया जाता है जबकि हेडर स्क्रॉल नहीं करता है। यह वह समाधान नहीं है जिसकी मुझे तलाश है।"
क्रेग मैकक्वीन

2
आपके द्वारा उल्लिखित प्लगइन की कोशिश करने से मेरा टेबल हेडर गड़बड़ हो गया। का उपयोग करने में सक्षम नहीं था।
pavel_kazlou

0

यह निराशाजनक है कि जो एक ब्राउज़र में महान काम करता है वह दूसरों में काम नहीं करता है। निम्नलिखित फ़ायरफ़ॉक्स में काम करता है, लेकिन क्रोम या IE में नहीं:

<table width="80%">

 <thead>

 <tr>
  <th>Column 1</th>
  <th>Column 2</th>
  <th>Column 3</th>
 </tr>

 </thead>

 <tbody style="height:50px; overflow:auto">

  <tr>
    <td>Cell A1</td>
    <td>Cell B1</td>
    <td>Cell C1</td>
  </tr>

  <tr>
    <td>Cell A2</td>
    <td>Cell B2</td>
    <td>Cell C2</td>
  </tr>

  <tr>
    <td>Cell A3</td>
    <td>Cell B3</td>
    <td>Cell C3</td>
  </tr>

 </tbody>

</table>

4
मैं फ़ायरफ़ॉक्स 8.0 में यह कोशिश कर रहा हूँ, और यह कुछ भी करने के लिए प्रतीत नहीं होता है। यह क्या करता है?
क्रेग मैकक्यून

क्या है px? क्या यह 90 के दशक में लोगों द्वारा उपयोग की जाने वाली विरासत इकाई है जब एक डिस्प्ले डिवाइस का इस्तेमाल 72 डीपीआई के लिए किया गया था?
16

मैं सहमत हूं: यह बहुत निराशाजनक है, दुर्भाग्य से ब्राउज़र डेवलपर्स हर स्थिति में मानकों का सम्मान नहीं करते हैं ... और कुछ साल पहले भी बदतर था! अब कुछ मुद्दों को हल कर दिया गया है और अधिक ब्राउज़र अधिक मानकीकृत तरीके से व्यवहार करते हैं, लेकिन अभी भी बहुत सारे कदम अभी भी किए जाने हैं: चलो आशा करते हैं और प्रार्थना करते हैं :-)
willy winka
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.