এইচটিএমএল টেবিল স্থির শিরোনাম সহ?


231

লম্বা এইচটিএমএল টেবিল প্রদর্শন করার জন্য কি ক্রস ব্রাউজার সিএসএস / জাভাস্ক্রিপ্ট কৌশল রয়েছে যাতে কলামের শিরোনামগুলি অন-স্ক্রিনে স্থির থাকে এবং টেবিলের বডি সহ স্ক্রল না করে। মাইক্রোসফ্ট এক্সেলে "ফ্রিজ প্যানস" প্রভাবটি ভাবেন।

আমি টেবিলের বিষয়বস্তুগুলির মধ্যে দিয়ে স্ক্রোল করতে সক্ষম হতে চাই তবে সর্বদা শীর্ষে কলামের শিরোনাম দেখতে সক্ষম হতে চাই।


3
: এই চেষ্টা ফিক্সড শিরোলেখ সঙ্গে বিশুদ্ধ সিএসএস স্ক্রোলযোগ্য ছক সম্পাদনা যেমন দেখা এই এক ইন্টারনেট এক্সপ্লোরার 7 এ কাজ করা উচিত: উদাহরণস্বরূপ : সঙ্গে ফিক্সড শিরোলেখ স্ক্রোলিং এইচটিএমএল টেবিল সম্পাদনা 2: -: আমি অতিরিক্ত যে লিঙ্ক ব্যবহারের হতে পারে একটি দম্পতি পাওয়া মূঢ় স্থির শিরোনাম - কিছু সীমাবদ্ধতা সহ একটি jQuery প্লাগইন। - [স্থির সারণী শিরোলেখ] ( ক্রস
ব্রাউজার.

আমি অনেকগুলি সমাধান পেয়েছি যা সাধারণত কাজ করে তবে তাদের কোনওটিই ডিভ্ল স্ক্রোলিংয়ের কাজ করেনি। মানে, আপনার টেবিলটি স্ক্রোলযোগ্য ডিভের অভ্যন্তরে রয়েছে এবং এখনও আপনি আপনার টেবিল শিরোনামটি সেই ডিভের মধ্যেই রাখতে চান। আমি এটি সমাধান করেছি এবং সমাধানটি এখানে ভাগ করে নিই ।
ইয়োজি

9
2018 সালে, সমস্ত ব্রাউজার নিম্নলিখিত সহজ সমাধান ব্যবহার করতে পারেন: thead th { position: sticky; top: 0; }। সাফারির একজন বিক্রেতা উপসর্গ দরকার:-webkit-sticky
ড্যানিয়েল ওয়াল্ট্রিপ

1
@ ড্যানিয়েলওয়াল্ট্রিপ আপনার এই উত্তরটি যুক্ত করা উচিত যাতে এটি শীর্ষস্থানে ভোট পেতে পারে - অন্য সমস্ত উত্তরগুলি পজিশনের সাথে অপ্রয়োজনীয়: আজকাল আঠালো আরও উন্নত সমর্থন
পিটার কের

উত্তর:


88

আমি এর জন্য কিছুক্ষণের জন্য সমাধানের সন্ধান করছিলাম এবং বেশিরভাগ উত্তর আমার অবস্থার জন্য কাজ করছে না বা উপযুক্ত নয় এটি খুঁজে পেয়েছি, তাই আমি jQuery সহ একটি সহজ সমাধান লিখেছি।

এটি সমাধানের রূপরেখা:

  1. একটি নির্দিষ্ট শিরোলেখ থাকা দরকার এমন টেবিলটি ক্লোন করুন এবং ক্লোনযুক্ত অনুলিপিটি মূলটির উপরে রাখুন।
  2. শীর্ষ টেবিল থেকে টেবিলের বডি সরান।
  3. নীচের টেবিল থেকে টেবিল শিরোনাম সরান।
  4. কলামের প্রস্থগুলি সামঞ্জস্য করুন। (আমরা মূল কলাম প্রস্থের উপর নজর রাখি)

একটি চলমানযোগ্য ডেমোতে নীচে কোড রয়েছে।

function scrolify(tblAsJQueryObject, height) {
  var oTbl = tblAsJQueryObject;

  // for very large tables you can remove the four lines below
  // and wrap the table with <div> in the mark-up and assign
  // height and overflow property  
  var oTblDiv = $("<div/>");
  oTblDiv.css('height', height);
  oTblDiv.css('overflow', 'scroll');
  oTbl.wrap(oTblDiv);

  // save original width
  oTbl.attr("data-item-original-width", oTbl.width());
  oTbl.find('thead tr td').each(function() {
    $(this).attr("data-item-original-width", $(this).width());
  });
  oTbl.find('tbody tr:eq(0) td').each(function() {
    $(this).attr("data-item-original-width", $(this).width());
  });


  // clone the original table
  var newTbl = oTbl.clone();

  // remove table header from original table
  oTbl.find('thead tr').remove();
  // remove table body from new table
  newTbl.find('tbody tr').remove();

  oTbl.parent().parent().prepend(newTbl);
  newTbl.wrap("<div/>");

  // replace ORIGINAL COLUMN width				
  newTbl.width(newTbl.attr('data-item-original-width'));
  newTbl.find('thead tr td').each(function() {
    $(this).width($(this).attr("data-item-original-width"));
  });
  oTbl.width(oTbl.attr('data-item-original-width'));
  oTbl.find('tbody tr:eq(0) td').each(function() {
    $(this).width($(this).attr("data-item-original-width"));
  });
}

$(document).ready(function() {
  scrolify($('#tblNeedsScrolling'), 160); // 160 is height
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>

<div style="width:300px;border:6px green solid;">
  <table border="1" width="100%" id="tblNeedsScrolling">
    <thead>
      <tr><th>Header 1</th><th>Header 2</th></tr>
    </thead>
    <tbody>
      <tr><td>row 1, cell 1</td><td>row 1, cell 2</td></tr>
      <tr><td>row 2, cell 1</td><td>row 2, cell 2</td></tr>
      <tr><td>row 3, cell 1</td><td>row 3, cell 2</td></tr>
      <tr><td>row 4, cell 1</td><td>row 4, cell 2</td></tr>			
      <tr><td>row 5, cell 1</td><td>row 5, cell 2</td></tr>
      <tr><td>row 6, cell 1</td><td>row 6, cell 2</td></tr>
      <tr><td>row 7, cell 1</td><td>row 7, cell 2</td></tr>
      <tr><td>row 8, cell 1</td><td>row 8, cell 2</td></tr>			
    </tbody>
  </table>
</div>

এই সমাধানটি ক্রোম এবং আইইতে কাজ করে। যেহেতু এটি jQuery ভিত্তিক, তাই এটি অন্যান্য jQuery সমর্থিত ব্রাউজারগুলিতেও কাজ করা উচিত।


4
এবং বিষয়বস্তুর প্রস্থের চেয়ে বড় হলে আমরা কীভাবে সমস্যাটি সমাধান করতে পারি?
মার্টজ

1
@ টিট্রা টিডি {সর্বোচ্চ-প্রস্থ: 30px; } এটি আপনাকে বিকাশকারীকে সারিগুলি কীভাবে প্রদর্শিত হয় তা নিয়ন্ত্রণ করতে দেয়।
লুবেন টোডরভ

তবে যদি কোনও শিরোনাম কোষের বিষয়বস্তুগুলি টিডি কোষের চেয়ে দীর্ঘ হয়? আমি চেষ্টা করেছি এটি আই 7 তে এবং প্রস্থ () সমস্ত কিছু ভেঙে দেয়।
আইই

4
দুর্ভাগ্যক্রমে, আপনার যদি কলামগুলির পিক্সেল-নিখুঁত প্রান্তিককরণের প্রয়োজন হয় তবে এটি কাজ করে না: jsbin.com/elekiq/1 ( উত্স কোড )। আপনি দেখতে পাচ্ছেন যে কিছু শিরোনামগুলি যেখানে হওয়া উচিত সেখান থেকে অফসেট করা হয়েছে, কিছুটা সামান্য। আপনি ব্যাকগ্রাউন্ড ব্যবহার করছেন: প্রভাবটি আরও সুস্পষ্ট: jsbin.com/elekiq/2 ( উত্স কোড )। (আমি এই একই রেখাগুলির সাথে কাজ করছিলাম, আমার কোডটিতে এটি প্রবেশ করলাম এবং ভেবেছিলাম "ওহ, আমি ভাবছি সে যদি সে আমার জন্য সমাধান করে!" তবে দুঃখের বিষয় নয়: :-)) ব্রাউজারগুলি নিয়ন্ত্রণ করতে ইচ্ছুক হওয়াতে খুব বেদনা পাচ্ছে কোষগুলির প্রস্থ ...
টিজে ক্রোডার

এটি অনুভূমিক স্ক্রোলিংয়ের সাথে কাজ করছে বলে মনে হচ্ছে না - এটি শিরোনাম তৈরি করে, তবে এটি স্ক্রোলযোগ্য অঞ্চল (দৃশ্যমান) ছাড়িয়ে প্রসারিত হয় এবং সামগ্রীটির সাথে স্ক্রোল করে না।
ক্র্যাশ

183

কোডের চারটি লাইনে এটি পরিষ্কারভাবে সমাধান করা যেতে পারে।

আপনি যদি কেবলমাত্র আধুনিক ব্রাউজারগুলিই যত্নবান হন তবে সিএসএস রূপান্তর ব্যবহার করে একটি স্থির শিরোনাম অনেক সহজ অর্জন করা যায়। অদ্ভুত শোনায় তবে দুর্দান্ত কাজ করে:

  • এইচটিএমএল এবং সিএসএস যেমন রয়েছে তেমন থাকে।
  • কোনও বাহ্যিক জাভাস্ক্রিপ্ট নির্ভরতা নেই।
  • কোড চার লাইন।
  • সমস্ত কনফিগারেশনের জন্য কাজ করে (টেবিল-বিন্যাস: স্থির ইত্যাদি)।
document.getElementById("wrap").addEventListener("scroll", function(){
   var translate = "translate(0,"+this.scrollTop+"px)";
   this.querySelector("thead").style.transform = translate;
});

ইন্টারনেট এক্সপ্লোরার 8- ব্যতীত সিএসএস রূপান্তরগুলির জন্য সমর্থন ব্যাপকভাবে উপলব্ধ

এখানে রেফারেন্সের জন্য সম্পূর্ণ উদাহরণ:


8
আমার এটি বলতে হবে, আমার পূর্ববর্তী মন্তব্য সত্ত্বেও, আমি এটি দেখেছি নিখুঁত সমাধানের নিকটতম বিষয়। এমনকি অনুভূমিক স্ক্রোলিংও নিখুঁত (আমার নিজের সমাধানের চেয়ে ভাল)। সীমান্তগুলির সাথে এখানে উদাহরণ রয়েছে (আপনি সীমান্ত-ধসের শব্দটি ব্যবহার করতে পারবেন না) এবং একটি স্ক্রোলবার যা ধারকটির
ডক্টরডেস্ট্রাকটো

11
খুঁজে পাওয়া গেছে, এটি কাজ করে তবে থাড নয়, থা / টিডি তে রূপান্তরটি প্রয়োগ করতে হবে।
লাল চুত্তয়ালা লোক

5
@ অ্যালেক্স অ্যালেক্সিভ, আপনার সমাধানটি আশ্চর্যজনক। ধন্যবাদ. আমি লক্ষ্য করেছি যে, ফলস্বরূপ স্থির শিরোনামে কলামগুলি পৃথককারী সীমানা রেখা নেই। ডিফল্ট সিএসএস স্টাইল হারিয়ে গেছে। এমনকি আমি যখন এটি অন্তর্ভুক্ত করি তখনও ... $(this).addClass('border')টেবিলের বাকী পরিবর্তনগুলি হ'ল আমি সীমান্ত শ্রেণিতে পাস করা ফন্ট, আকার, রঙ বৈশিষ্ট্যযুক্ত। তবে, স্থির শিরোনামে লাইন যুক্ত হয় না। এটি কীভাবে ঠিক করা যায় তার জন্য কোনও ইনপুট প্রশংসা করুন
user5249203

5
@ ব্যবহারকারী5249203 আমি জানি আপনি কয়েক মাস আগে জিজ্ঞাসা করেছিলেন কিন্তু আমার একই সমস্যা ছিল এবং এটি সীমান্ত-ধসের কারণে হয়েছিল: এটি দেখুন: stackoverflow.com/questions/33777751/…
আর্চজ

6
এটি আইই বা কোনও এজের কোনও সংস্করণে কাজ করে না। এখানে একটি সংস্করণ @ লাল চুত্তয়ালা লোক এর মন্তব্য উপর ভিত্তি করে যে হয় jsfiddle.net/n6o8ocwb/2
ডাকাতি

58

আমি সবেমাত্র একটি jQuery প্লাগইন একত্রে সম্পন্ন করেছি যা বৈধ এইচটিএমএল ব্যবহার করে বৈধ একক টেবিল গ্রহণ করবে (একটি থ্যাড এবং টোডি থাকতে হবে) এবং একটি টেবিল আউটপুট আসবে যা স্থির শিরোনামযুক্ত, optionচ্ছিক নির্দিষ্ট পাদচরণ যা ক্লোনড শিরোনাম বা যে কোনও হতে পারে আপনি পছন্দ করেছেন এমন সামগ্রী (পৃষ্ঠাগুলি ইত্যাদি)। আপনি যদি বৃহত্তর মনিটরের সুবিধা নিতে চান তবে ব্রাউজারটি পুনরায় আকার দেওয়ার পরে এটি টেবিলটিকেও আকার দেবে। অন্য যুক্ত বৈশিষ্ট্যটি টেবিল কলামগুলি সমস্ত দৃষ্টিতে ফিট করতে না পারলে স্ক্রলকে সাইড করতে সক্ষম হচ্ছে।

http://fixedheadertable.com/

গিথুব এ: http://markmalek.github.com/Fixed-Header-Table/

এটি সেটআপ করা অত্যন্ত সহজ এবং এর জন্য আপনি নিজস্ব কাস্টম শৈলী তৈরি করতে পারেন। এটি সমস্ত ব্রাউজারে গোলাকার কোণগুলিও ব্যবহার করে। মনে রাখবেন আমি সবেমাত্র এটি প্রকাশ করেছি, সুতরাং এটি এখনও প্রযুক্তিগতভাবে বিটা এবং এখানে খুব সামান্য কিছু সমস্যা রয়েছে যা আমি উপেক্ষা করছি।

এটি ইন্টারনেট এক্সপ্লোরার 7, ইন্টারনেট এক্সপ্লোরার 8, সাফারি, ফায়ারফক্স এবং ক্রোমে কাজ করে।


ধন্যবাদ! আমি যখন কাজ থেকে বাড়ি ফিরে আসছি তখন আমি পরে একটি নতুন রিলিজ যুক্ত করছি। আমি যা যুক্ত করছি তার সাথে আমার ব্লগ এন্ট্রিটির একটি লিঙ্ক এখানে দেওয়া হয়েছে: ফিক্সহেডেরেটেবল.ম্যামেলেক.com
মার্ক

এই জন্য আপনাকে ধন্যবাদ. আমি জানি এই প্রশ্নটি এক বছরেরও বেশি পুরানো, তবে স্থায়ী পলিটি ছড়িয়ে দেওয়ার ঝুঁকিতেও, আমি আপনাকে বলতে চাই যে আপনার কাজের প্রশংসা হয়েছে
sova

আপনার ডেমো সালে প্রস্থ IE6 :-( টেবিল হেডার এবং শরীরের বন্ধ প্রান্তিককৃত নেই।
Cheekysoft

4
সর্বশেষতম সংস্করণ আই 6-তে কাজ করে না। আমি আর আই 6 সমর্থন করি না।
চিহ্নিত করুন

দুর্দান্ত কাজ মার্ক - দুর্ভাগ্যক্রমে মোবাইল ডিভাইসগুলিতে স্থির শিরোনাম এবং কলামের স্ক্রলিংয়ের সাথে কিছু সমস্যা আছে (আইপ্যাড, অ্যান্ড্রয়েড ট্যাবলেট) - যখন আমি সামগ্রীটি স্ক্রোল করি those নির্দিষ্ট অংশগুলি স্ক্রোল করে না - যখন আমি স্ক্রোলিং বন্ধ করে টেবিলে একবার ট্যাপ করি tap , স্থির অংশগুলি যথাযথ অবস্থানগুলিতে "লাফ" - এটি ঠিক করার কোনও সহজ উপায় আছে?
Okizb

23

আমি একটি প্লাগইনও তৈরি করেছি যা এই সমস্যাটিকে সম্বোধন করে। আমার প্রকল্প - jQuery.floatThead প্রায় 4 বছরেরও বেশি সময় ধরে চলেছে এবং খুব পরিপক্ক।

এটির জন্য কোনও বাহ্যিক শৈলীর প্রয়োজন নেই এবং আপনার টেবিলটি কোনও বিশেষ উপায়ে স্টাইল করার আশা করবেন না। এটি ইন্টারনেট এক্সপ্লোরার 9 + এবং ফায়ারফক্স / ক্রোম সমর্থন করে।

বর্তমানে এটি (2018-05) রয়েছে:

405 কমিট করে এবং গিটহাবে 998 তারা


এখানে (অনেকগুলি নয়) উত্তরগুলি দ্রুত হ্যাক যা একটি ব্যক্তি যে সমস্যাটি পেয়েছিল তা সমাধান করেছে, তবে প্রতিটি টেবিলের জন্য কাজ করবে না।

অন্য কয়েকটি প্লাগইন পুরানো এবং সম্ভবত ইন্টারনেট এক্সপ্লোরার দিয়ে দুর্দান্ত কাজ করে তবে ফায়ারফক্স এবং ক্রোমে ব্রেক হয়ে যাবে।


1
দুর্দান্ত প্লাগইন, নেস্টেড টেবিল এবং অফসেটগুলিকে সমর্থন করে।
মিহাই অ্যালেক্স

2
গ্রেট। অনেক ধন্যবাদ. প্লাগইনটি ফায়ারফক্স ৪৫.২, ক্রোমিয়াম ৫১ এবং আইই ১১ এ ভালভাবে কাজ করেছে Also এছাড়াও, এটি একই পৃষ্ঠায় নির্মিত অনেক জেএস এবং jQuery কোডের সাথে হস্তক্ষেপ করে না।
অ্যালডো প্যারাডিসো

ধন্যবাদ. আমি জানাতে পেরে খুশি যে এই প্রকল্পে প্রতি 4 মাসে প্রতি 1 টি বাগ রিপোর্ট আসে। আমি অনেক ব্রেকিং পরিবর্তন করছি না। এটি বেশ শক্ত এবং কাজ করে।
mkoryak

20

টি এল; ডিআর

যদি আপনি আধুনিক ব্রাউজারগুলিকে লক্ষ্য করে থাকেন এবং অযৌক্তিক স্টাইলিংয়ের প্রয়োজনীয়তা না রাখেন: http://jsfiddle.net/dPixie/byB9d/3/ ... যদিও বড় চারটি সংস্করণ বেশ মিষ্টি পাশাপাশি এই সংস্করণটি তরল প্রস্থকে আরও অনেক ভাল পরিচালনা করে।

সবাইকে সুখবর!

এইচটিএমএল 5 এবং সিএসএস 3 এর অগ্রগতির সাথে এটি এখন কমপক্ষে আধুনিক ব্রাউজারগুলির পক্ষে সম্ভব। আমি যে সামান্য হ্যাকিশ বাস্তবায়ন নিয়ে এসেছি তা এখানে পাওয়া যাবে: http://jsfiddle.net/dPixie/byB9d/3/ । আমি এফএক্স 25, ক্রোম 31 এবং আইই 10 তে এটি পরীক্ষা করেছি ...

প্রাসঙ্গিক এইচটিএমএল (যদিও আপনার ডকুমেন্টের শীর্ষে একটি HTML5 ডক্টিপ সন্নিবেশ করুন):

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

section {
  position: relative;
  border: 1px solid #000;
  padding-top: 37px;
  background: #500;
}

section.positioned {
  position: absolute;
  top: 100px;
  left: 100px;
  width: 800px;
  box-shadow: 0 0 15px #333;
}

.container {
  overflow-y: auto;
  height: 200px;
}

table {
  border-spacing: 0;
  width: 100%;
}

td+td {
  border-left: 1px solid #eee;
}

td,
th {
  border-bottom: 1px solid #eee;
  background: #ddd;
  color: #000;
  padding: 10px 25px;
}

th {
  height: 0;
  line-height: 0;
  padding-top: 0;
  padding-bottom: 0;
  color: transparent;
  border: none;
  white-space: nowrap;
}

th div {
  position: absolute;
  background: transparent;
  color: #fff;
  padding: 9px 25px;
  top: 0;
  margin-left: -25px;
  line-height: normal;
  border-left: 1px solid #800;
}

th:first-child div {
  border: none;
}
<section class="positioned">
  <div class="container">
    <table>
      <thead>
        <tr class="header">
          <th>
            Table attribute name
            <div>Table attribute name</div>
          </th>
          <th>
            Value
            <div>Value</div>
          </th>
          <th>
            Description
            <div>Description</div>
          </th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>align</td>
          <td>left, center, right</td>
          <td>Not supported in HTML5. Deprecated in HTML 4.01. Specifies the alignment of a table according to surrounding text</td>
        </tr>
        <tr>
          <td>bgcolor</td>
          <td>rgb(x,x,x), #xxxxxx, colorname</td>
          <td>Not supported in HTML5. Deprecated in HTML 4.01. Specifies the background color for a table</td>
        </tr>
        <tr>
          <td>border</td>
          <td>1,""</td>
          <td>Specifies whether the table cells should have borders or not</td>
        </tr>
        <tr>
          <td>cellpadding</td>
          <td>pixels</td>
          <td>Not supported in HTML5. Specifies the space between the cell wall and the cell content</td>
        </tr>
        <tr>
          <td>cellspacing</td>
          <td>pixels</td>
          <td>Not supported in HTML5. Specifies the space between cells</td>
        </tr>
        <tr>
          <td>frame</td>
          <td>void, above, below, hsides, lhs, rhs, vsides, box, border</td>
          <td>Not supported in HTML5. Specifies which parts of the outside borders that should be visible</td>
        </tr>
        <tr>
          <td>rules</td>
          <td>none, groups, rows, cols, all</td>
          <td>Not supported in HTML5. Specifies which parts of the inside borders that should be visible</td>
        </tr>
        <tr>
          <td>summary</td>
          <td>text</td>
          <td>Not supported in HTML5. Specifies a summary of the content of a table</td>
        </tr>
        <tr>
          <td>width</td>
          <td>pixels, %</td>
          <td>Not supported in HTML5. Specifies the width of a table</td>
        </tr>
      </tbody>
    </table>
  </div>
</section>

কিন্তু কিভাবে?!

সহজভাবে আপনার কাছে একটি টেবিল শিরোনাম রয়েছে যাতে আপনি এটি 0px উচ্চ করে দৃশ্যত লুকিয়ে রাখেন, এতেও ডিভগুলি স্থির শিরোনাম হিসাবে ব্যবহৃত হয়। একেবারে অবস্থানযুক্ত শিরোলেখের জন্য টেবিলের ধারকটি পর্যাপ্ত স্থানটি ছেড়ে দেয় এবং আপনার প্রত্যাশা অনুযায়ী স্ক্রোলবারগুলি সহ টেবিলটি উপস্থিত হয়।

উপরের কোডটি সুনির্দিষ্টভাবে টেবিলের অবস্থান নির্ধারণের জন্য অবস্থিত শ্রেণি ব্যবহার করে (আমি এটি পপআপ শৈলীর ডায়ালগটিতে ব্যবহার করছি) তবে আপনি ডকুমেন্টের প্রবাহে positionedএবং ধারক থেকে ক্লাসটি সরিয়ে এটি ব্যবহার করতে পারেন ।

তবে ...

এটি নিখুঁত নয়। ফায়ারফক্স শিরোনাম সারি 0px করতে অস্বীকার করেছে (কমপক্ষে আমি কোনও উপায় খুঁজে পাইনি) তবে জেদীভাবে এটিকে ন্যূনতম 4px এ রাখে ... এটি কোনও বিশাল সমস্যা নয়, তবে আপনার স্টাইলিংয়ের উপর নির্ভর করে এটি আপনার সীমানা ইত্যাদির সাথে বিশৃঙ্খলা করবে will

সারণীটিও একটি ছদ্ম কলাম পদ্ধতির ব্যবহার করছে যেখানে ধারকটির পটভূমির রঙটি স্বয়ংক্রিয় হেডার ডিভের জন্য পটভূমি হিসাবে ব্যবহৃত হয় যা স্বচ্ছ।

সারসংক্ষেপ

সব মিলিয়ে আপনার প্রয়োজনীয়তার উপর নির্ভর করে স্টাইলিংয়ের সমস্যা থাকতে পারে, বিশেষত সীমানা বা জটিল ব্যাকগ্রাউন্ড। গণ্যতার ক্ষেত্রেও সমস্যা থাকতে পারে, আমি এখনও বিভিন্ন ব্রাউজারে এটি পরীক্ষা করে দেখিনি (দয়া করে আপনার অভিজ্ঞতাগুলি ব্যবহার করে মন্তব্য করুন) তবে আমি এটির মতো কিছু পাইনি তাই আমি ভেবেছিলাম এটি পোস্ট করার উপযুক্ত was যাইহোক ...


যদি আপনি উইন্ডোটির প্রস্থকে অনুভূমিক স্ক্রোলিংটি কিক্স না করা অবধি সঙ্কুচিত করেন তবে শিরোনামটি দেহের সাথে অনুভূমিকভাবে স্ক্রোল করে না। অভিশাপ।
dlaliberte

@ ড্লেলিবার্টে - হ্যাঁ, শিরোনাম এবং টেবিলটি আসলে দুটি ভিন্ন উপাদান যা আপনি করতে পারেন, অদ্ভুততায় পড়তে পারেন। তবে আমার উদাহরণটি টেবিল কলামগুলিতে ওভারফ্লো করতে দেয় না এবং শিরোনামগুলি সাধারণত টেবিলের সামগ্রীর চেয়ে নিয়ন্ত্রণ করা সহজ। এটি বলেছে, যদি আপনি শিরোনামটিকে "ওভারফ্লো" করে দেন তবে যদি টেবিলের ডানদিকে আটকে থাকে এবং মারাত্মকভাবে ভাঙা দেখায়। আপনি টেবিলে একটি মিনিট প্রস্থ সেট করে এটি ঠিক করতে পারেন, এটি পৃষ্ঠায়ও উপচে পড়তে বাধ্য করে ... তবে এটি একটি হ্যাক তাই এটি কখনই নিখুঁত হবে না ...
জোনাস শোবার্ট এরল্যান্ডসন

1
উল্লেখযোগ্য যে এটির জন্য এমন একটি নকশা প্রয়োজন যেখানে নির্দিষ্ট উচ্চতার টেবিলটি নির্দিষ্ট করা যায়।
চেকিসফট

1
@ চেকিসফট - না, টেবিল এবং সারি সামগ্রীগুলি অবাধে প্রবাহিত হতে পারে। ধারকটি, উদাহরণস্বরূপ আমার <section>উপাদানটিতে উচ্চতা সীমাবদ্ধ হওয়া দরকার কেবল এটির উপর দিয়ে প্রবাহিত করতে এবং স্ক্রোলিং দেখানোর জন্য। কোনও লেআউট যা কনটেইনারকে উপচে ফেলবে তা কাজ করবে। যদি আপনি এমন কোনও মামলা খুঁজে পান যেখানে এটি দয়া করে কোনও ফিডেলের লিঙ্ক পোস্ট করে না।
জোনাস শুবার্ট এরল্যান্ডসন

হার্ড কোডেড padding-topমানটির অর্থ হ'ল যদি টেবিল শিরোনামের পাঠ্যটি একাধিক লাইনে থাকে তবে এটি টেবিলের ঘরের উপরে উপস্থিত হবে। করুণা, কারণ এটি বেশিরভাগ সময় কবজির মতো কাজ করে। অন্যান্য বেশিরভাগ সমাধানের কলাম আকারের ইস্যুটি পাওয়ার divক্ষেত্রে এটি খুব সুন্দর কৌশল th
বার্নহার্ড হফম্যান

19

সিএসএসের নির্দিষ্টকরণের বাইরে থেকে এটি সমাধানের সমস্ত প্রচেষ্টা হ'ল আমরা সত্যই যা চাই তা ম্লান ছায়া: থ্যাডের অন্তর্নিহিত প্রতিশ্রুতিতে বিতরণ।

এই টেবিল ইস্যুটির জন্য হিমশীতল শিরোনামটি দীর্ঘকাল ধরে এইচটিএমএল / সিএসএসে একটি খোলা ক্ষত হয়ে দাঁড়িয়েছে।

নিখুঁত বিশ্বে এই সমস্যার জন্য খাঁটি সিএসএস সমাধান থাকতে পারে। দুর্ভাগ্যক্রমে, জায়গাটিতে ভাল লাগেনি।

এই বিষয়ে প্রাসঙ্গিক মান-আলোচনার মধ্যে রয়েছে:

আপডেট : ফায়ারফক্স position:sticky32 সংস্করণে পাঠানো হয়েছে Everyone


ফক্সযুক্ত কলামগুলি একইভাবে রাখা ভাল লাগবে
সিসাবা তোথ

4
করছেন। ফায়ারফক্স এবং অবস্থান: স্টিকি, এটি টেবিল শিরোলেখগুলির জন্য কাজ করে না: bugzilla.mozilla.org/show_bug.cgi?id=925259#c8 ... এই বাগের প্যাচটি স্পষ্টভাবে বলে: "আমরা বর্তমানে আপেক্ষিক অবস্থান সমর্থন করি না অভ্যন্তরীণ সারণী উপাদানগুলির, তাই আমরা তাদেরকেও স্টিকি অবস্থান থেকে বাদ দিই। "
জোনাস শুবার্ট এরল্যান্ডসন 12

2
এটি এখন সব ব্রাউজারে কাজ করে: thead th { position: sticky; top: 0; }। আমরা কি এই উত্তরটি পরিষ্কারভাবে জানাতে এই আপডেটটি করতে পারি?
ড্যানিয়েল ওয়াল্ট্রিপ

1
@ ড্যানিয়েলওয়াল্ট্রিপ সব ব্রাউজার? stackoverflow.com/a/37646284/3640407 এখনও চেয়ে প্রান্ত আরো MSIEs হয়
edc65


14

এখানে স্থির টেবিল শিরোনামগুলির জন্য jQuery প্লাগইন রয়েছে। এটি শীর্ষ পৃষ্ঠায় পৌঁছালে শিরোনামকে হিস্ট করে পুরো পৃষ্ঠাটিকে স্ক্রোল করার অনুমতি দেয়। এটি টুইটার বুটস্ট্র্যাপ টেবিলগুলির সাথে ভালভাবে কাজ করে।

গিটহাব সংগ্রহস্থল: https://github.com/oma/table-fixed-header

এটি কেবল টেবিলের সামগ্রীতে স্ক্রোল করে না । এটির জন্য অন্যান্য সরঞ্জামগুলির দিকে নজর দিন। আপনার ক্ষেত্রে কোনটি সবচেয়ে উপযুক্ত ফিট করে তা স্থির করুন।


1
বামার - উদাহরণ লিঙ্কটি মারা গেছে। "উফফ! ডেন সাইডেন ব্ল ইক্কে ফাননেট ..." ইচ্ছে করে কোডটি এখানে আটকানো হয়েছে।
জোসেফকে

হ্যাঁ ... সে সম্পর্কে দুঃখিত। লিঙ্কটি সরানো হয়েছে। প্রকল্পটি আর রক্ষণাবেক্ষণ করা হবে না
oma

চিন্তা করার দরকার নেই - আমি এই প্রাক-তৈরি বেশ কয়েকটি সমাধান সমাধান করে দেখেছি - কেউই কোনও ফ্লেক্স-কোল-প্রস্থের টেবিলের সাথে কাজ করেনি যা স্ক্রিন-প্রস্থকে ছাড়িয়ে গেছে। আমি আমার নিজের সমাধান লিখে ক্ষতবিক্ষত।
জোসেফকে

9

এখানে পোস্ট বেশিরভাগ সলিউশনের জন্য jQuery প্রয়োজন। আপনি যদি কোনও কাঠামোর স্বাধীন সমাধানের সন্ধান করছেন তবে গ্রিডটি চেষ্টা করুন : http://www.matts411.com/post/grid/

এটি এখানে গিথুবটিতে হোস্ট করা হয়েছে: https://github.com/mmurph211/ গ্রিড

এটি কেবল স্থির শিরোলেখকেই সমর্থন করে না, এটি অন্যান্য জিনিসগুলির মধ্যে স্থির বাম কলাম এবং পাদচরণগুলিও সমর্থন করে।


এটি সত্যিই ঝরঝরে যদি এটি আপনার প্রয়োজনগুলি পূরণ করে তবে আমি আজ এটির সাথে খেলেছি। দুর্ভাগ্যক্রমে, এটি বরং একটি আয়তক্ষেত্রাকার গ্রিড (নামটি বোঝায় যে, আসলে) এবং সামগ্রীগুলির দ্বারা সারি উচ্চতার সমন্বিত সত্য টেবিল নয়। এবং পৃথক সারি স্টাইলিং করা কঠিন বলে মনে হয়েছিল। আমি একটি জেব্রা স্ট্রাইপযুক্ত টেবিল তৈরি করতে পরিচালনা করতে পারিনি তবে আমার প্রয়োজনগুলি আরও জটিল হওয়ায় খুব কঠোর চেষ্টা করিনি। যাইহোক, দুর্দান্ত কাজ।
এমপিএলওয়ার্ক 2'13

1
আরে আমি তোমাকে চিনি! আমরা দেখতে পেয়েছি খুব অনুরূপ ছিটেফোঁটা লিখেছেন ( github.com/mkoryak/floatThead ) - মিশা
mkoryak

9

সিএসএস সম্পত্তিটির position: stickyবেশিরভাগ আধুনিক ব্রাউজারগুলিতে দুর্দান্ত সমর্থন রয়েছে (আমার এজতে সমস্যা ছিল, নীচে দেখুন)।

এটি আমাদের ফিক্সড হেডারগুলির সমস্যাটি সহজেই সমাধান করতে দেয়:

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

সাফারি বিক্রেতা উপসর্গ দরকার: -webkit-sticky

ফায়ারফক্সের জন্য, আমাকে min-height: 0একটি মূল উপাদান যুক্ত করতে হয়েছিল। কেন দরকার হয়েছিল তা আমি ভুলে গেছি।

দুর্ভাগ্যক্রমে, মাইক্রোসফ্ট এজ বাস্তবায়ন কেবলমাত্র আধা-কার্যকারী বলে মনে হচ্ছে। কমপক্ষে, আমার পরীক্ষায় আমার কিছু ঝলকানি এবং বিভ্রান্ত সারণী ঘর ছিল had টেবিলটি এখনও ব্যবহারযোগ্য, তবে উল্লেখযোগ্য নান্দনিক সমস্যা ছিল।


ব্যবহার position: sticky;একটি div আছে ভিতরে টেবিলের সাথে overflow: scroll;, overflow-x: scroll;অথবা overflow-y: scroll;। আধুনিক ব্রাউজারগুলিতে স্থির টেবিল শিরোনাম এবং কলামগুলির জন্য সেরা এবং সহজ সমাধান বলে মনে হয়। এই উত্তরের উপরে ভোট দেওয়া দরকার।
অ্যাবারেন্ট

এটি সহজ তবে কার্যকর। এটি আমি যা খুঁজছি ধন্যবাদ।
ক্যাটবিল্টস

6

আরও পরিশোধিত খাঁটি সিএসএস স্ক্রোলিং টেবিল

খাঁটি সিএসএস সমাধানগুলির সমস্ত আমি এখন পর্যন্ত দেখেছি - চতুর যদিও তারা হতে পারে - নির্দিষ্ট স্তরের পোলিশের অভাব রয়েছে, বা কিছু পরিস্থিতিতে ঠিক কাজ করবেন না। সুতরাং, আমি নিজের তৈরি করার সিদ্ধান্ত নিয়েছি ...

বৈশিষ্ট্য:

  • এটি খাঁটি সিএসএস, সুতরাং কোনও jQuery প্রয়োজন হয় না (বা কোনও জাভাস্ক্রিপ্ট কোড সে ক্ষেত্রে নেই)
  • আপনি টেবিলের প্রস্থকে শতাংশ (ওরফে "তরল") বা একটি নির্দিষ্ট মানতে সেট করতে পারেন বা সামগ্রীটিকে তার প্রস্থ নির্ধারণ করতে দিন (ওরফে "অটো")
  • কলামের প্রস্থগুলি তরল, স্থির বা অটোও হতে পারে।
  • অনুভূমিক স্ক্রোলিংয়ের কারণে কলামগুলি শিরোনামগুলির সাথে কখনই বিভ্রান্ত হবে না (আমি দেখেছি যে প্রতিটি অন্যান্য সিএসএস ভিত্তিক সমাধানে স্থির প্রস্থের প্রয়োজন হয় না) to
  • ইন্টারনেট এক্সপ্লোরার সহ 8 সংস্করণে ফিরে আসার মতো জনপ্রিয় সমস্ত ডেস্কটপ ব্রাউজারের সাথে সামঞ্জস্য
  • পরিষ্কার, পালিশ চেহারা; কোনও opালু দেখানো 1-পিক্সেল ফাঁক বা মিস্যালাইনযুক্ত সীমানা নয়; সমস্ত ব্রাউজারে একই দেখায়

এখানে বেশ কয়েকটি ফিডল রয়েছে যা তরল এবং অটো প্রস্থের বিকল্পগুলি দেখায়:

  • তরল প্রস্থ এবং উচ্চতা (পর্দার আকারের সাথে মানিয়ে নেয় ): জেএসফিডাল (নোট করুন যে এই কনফিগারেশনে যখন প্রয়োজন হবে তখন স্ক্রোলবারটি কেবলমাত্র প্রদর্শিত হয়, সুতরাং এটি দেখার জন্য আপনাকে ফ্রেমটি সঙ্কুচিত করতে হতে পারে)

  • অটো প্রস্থ, স্থির উচ্চতা (অন্যান্য সামগ্রীর সাথে সংহত করা সহজ): জেএসফিডাল

অটো প্রস্থ, স্থির উচ্চতা কনফিগারেশনে সম্ভবত আরও ব্যবহারের কেস রয়েছে, সুতরাং আমি নীচের কোডটি পোস্ট করব।

/* The following 'html' and 'body' rule sets are required only
   if using a % width or height*/

/*html {
  width: 100%;
  height: 100%;
}*/

body {
  box-sizing: border-box;
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0 20px 0 20px;
  text-align: center;
}
.scrollingtable {
  box-sizing: border-box;
  display: inline-block;
  vertical-align: middle;
  overflow: hidden;
  width: auto; /* If you want a fixed width, set it here, else set to auto */
  min-width: 0/*100%*/; /* If you want a % width, set it here, else set to 0 */
  height: 188px/*100%*/; /* Set table height here; can be fixed value or % */
  min-height: 0/*104px*/; /* If using % height, make this large enough to fit scrollbar arrows + caption + thead */
  font-family: Verdana, Tahoma, sans-serif;
  font-size: 16px;
  line-height: 20px;
  padding: 20px 0 20px 0; /* Need enough padding to make room for caption */
  text-align: left;
  color: black;
}
.scrollingtable * {box-sizing: border-box;}
.scrollingtable > div {
  position: relative;
  border-top: 1px solid black;
  height: 100%;
  padding-top: 20px; /* This determines column header height */
}
.scrollingtable > div:before {
  top: 0;
  background: cornflowerblue; /* Header row background color */
}
.scrollingtable > div:before,
.scrollingtable > div > div:after {
  content: "";
  position: absolute;
  z-index: -1;
  width: 100%;
  height: 100%;
  left: 0;
}
.scrollingtable > div > div {
  min-height: 0/*43px*/; /* If using % height, make this large
                            enough to fit scrollbar arrows */
  max-height: 100%;
  overflow: scroll/*auto*/; /* Set to auto if using fixed
                               or % width; else scroll */
  overflow-x: hidden;
  border: 1px solid black; /* Border around table body */
}
.scrollingtable > div > div:after {background: white;} /* Match page background color */
.scrollingtable > div > div > table {
  width: 100%;
  border-spacing: 0;
  margin-top: -20px; /* Inverse of column header height */
  /*margin-right: 17px;*/ /* Uncomment if using % width */
}
.scrollingtable > div > div > table > caption {
  position: absolute;
  top: -20px; /*inverse of caption height*/
  margin-top: -1px; /*inverse of border-width*/
  width: 100%;
  font-weight: bold;
  text-align: center;
}
.scrollingtable > div > div > table > * > tr > * {padding: 0;}
.scrollingtable > div > div > table > thead {
  vertical-align: bottom;
  white-space: nowrap;
  text-align: center;
}
.scrollingtable > div > div > table > thead > tr > * > div {
  display: inline-block;
  padding: 0 6px 0 6px; /*header cell padding*/
}
.scrollingtable > div > div > table > thead > tr > :first-child:before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  height: 20px; /*match column header height*/
  border-left: 1px solid black; /*leftmost header border*/
}
.scrollingtable > div > div > table > thead > tr > * > div[label]:before,
.scrollingtable > div > div > table > thead > tr > * > div > div:first-child,
.scrollingtable > div > div > table > thead > tr > * + :before {
  position: absolute;
  top: 0;
  white-space: pre-wrap;
  color: white; /*header row font color*/
}
.scrollingtable > div > div > table > thead > tr > * > div[label]:before,
.scrollingtable > div > div > table > thead > tr > * > div[label]:after {content: attr(label);}
.scrollingtable > div > div > table > thead > tr > * + :before {
  content: "";
  display: block;
  min-height: 20px; /* Match column header height */
  padding-top: 1px;
  border-left: 1px solid black; /* Borders between header cells */
}
.scrollingtable .scrollbarhead {float: right;}
.scrollingtable .scrollbarhead:before {
  position: absolute;
  width: 100px;
  top: -1px; /* Inverse border-width */
  background: white; /* Match page background color */
}
.scrollingtable > div > div > table > tbody > tr:after {
  content: "";
  display: table-cell;
  position: relative;
  padding: 0;
  border-top: 1px solid black;
  top: -1px; /* Inverse of border width */
}
.scrollingtable > div > div > table > tbody {vertical-align: top;}
.scrollingtable > div > div > table > tbody > tr {background: white;}
.scrollingtable > div > div > table > tbody > tr > * {
  border-bottom: 1px solid black;
  padding: 0 6px 0 6px;
  height: 20px; /* Match column header height */
}
.scrollingtable > div > div > table > tbody:last-of-type > tr:last-child > * {border-bottom: none;}
.scrollingtable > div > div > table > tbody > tr:nth-child(even) {background: gainsboro;} /* Alternate row color */
.scrollingtable > div > div > table > tbody > tr > * + * {border-left: 1px solid black;} /* Borders between body cells */
<div class="scrollingtable">
  <div>
    <div>
      <table>
        <caption>Top Caption</caption>
        <thead>
          <tr>
            <th><div label="Column 1"/></th>
            <th><div label="Column 2"/></th>
            <th><div label="Column 3"/></th>
            <th>
              <!-- More versatile way of doing column label; requires two identical copies of label -->
              <div><div>Column 4</div><div>Column 4</div></div>
            </th>
            <th class="scrollbarhead"/> <!-- ALWAYS ADD THIS EXTRA CELL AT END OF HEADER ROW -->
          </tr>
        </thead>
        <tbody>
          <tr><td>Lorem ipsum</td><td>Dolor</td><td>Sit</td><td>Amet consectetur</td></tr>
          <tr><td>Lorem ipsum</td><td>Dolor</td><td>Sit</td><td>Amet consectetur</td></tr>
          <tr><td>Lorem ipsum</td><td>Dolor</td><td>Sit</td><td>Amet consectetur</td></tr>
          <tr><td>Lorem ipsum</td><td>Dolor</td><td>Sit</td><td>Amet consectetur</td></tr>
          <tr><td>Lorem ipsum</td><td>Dolor</td><td>Sit</td><td>Amet consectetur</td></tr>
          <tr><td>Lorem ipsum</td><td>Dolor</td><td>Sit</td><td>Amet consectetur</td></tr>
          <tr><td>Lorem ipsum</td><td>Dolor</td><td>Sit</td><td>Amet consectetur</td></tr>
          <tr><td>Lorem ipsum</td><td>Dolor</td><td>Sit</td><td>Amet consectetur</td></tr>
          <tr><td>Lorem ipsum</td><td>Dolor</td><td>Sit</td><td>Amet consectetur</td></tr>
          <tr><td>Lorem ipsum</td><td>Dolor</td><td>Sit</td><td>Amet consectetur</td></tr>
          <tr><td>Lorem ipsum</td><td>Dolor</td><td>Sit</td><td>Amet consectetur</td></tr>
          <tr><td>Lorem ipsum</td><td>Dolor</td><td>Sit</td><td>Amet consectetur</td></tr>
        </tbody>
      </table>
    </div>
    Faux bottom caption
  </div>
</div>

<!--[if lte IE 9]><style>.scrollingtable > div > div > table {margin-right: 17px;}</style><![endif]-->

আমি শিরোনাম সারিটি জমাট বাঁধার জন্য যে পদ্ধতিটি ব্যবহার করেছি তা ডি-পিক্সির মতো, সুতরাং ব্যাখ্যাটির জন্য তার পোস্টটি দেখুন। সেই কৌশলটির সাথে অনেকগুলি বাগ এবং সীমাবদ্ধতা রয়েছে যা কেবলমাত্র অতিরিক্ত সিএসএস এবং একটি অতিরিক্ত ডিভ ধারক বা দুটি দিয়েই ঠিক করা যেতে পারে।


এই উত্তরটি উপায়হীন! আমার বিশেষত বিরক্তিকর মামলার জন্য অন্যান্য সমাধানগুলি পাওয়ার চেষ্টা করার জন্য আমি দিনগুলি কাটিয়েছি। তাদের প্রত্যেকেই একরকম বা অন্যভাবে একত্রিত হতে ব্যর্থ হয়েছিল। এই অবশেষে এটি করেছে! প্রথমে অত্যধিক জটিল বলে মনে হচ্ছে তবে একবার এটির হ্যাংটি পেয়ে গেলে দুর্দান্ত। তরল প্রস্থ ইত্যাদি ব্যবহার না করে আপনি শেষ পর্যায়ে কিছুটা জিনিস অপসারণ করতে পারেন
জাস্টিন সানে

1
@ জাস্টিনসনে আপনার পছন্দ হয়েছে! আমি অনুমান করি যে প্রশংসা না হওয়ায় এটি ম্যাক্সিমিলিয়ান হিলসের আশ্চর্য সমাধানের সাথে পৃষ্ঠাটি ভাগ করে দেয় । আপনি যদি খুব সামান্য জেএস ব্যবহারের বিরোধী না হন তবে অবশ্যই আপনার এটি পরীক্ষা করা উচিত।
ডক্টরডেস্ট্রাকো

অভিশাপ, এটি সত্যিই একটি প্রায় নিখুঁত সমাধান। আমি যাইহোক jQuery ব্যবহার করছিলাম, আমি আপনার খুঁজে পাওয়ার আগে এটির সাথে এটি কাজ করার চেষ্টা করলাম (অন্য প্রশ্নের জন্য আপনার মন্তব্যের মাধ্যমে)। কোনও স্ক্রোল-শ্রোতার কথা ভাবছেন না এবং অনুবাদ করেছেন ... ঠিক আছে, তারা বলেছে যে সহজ সমাধান নিয়ে আসতে একটি প্রতিভা লাগে takes ভবিষ্যতের জন্য মন। তবুও, দুর্দান্ত আপনার জন্য টুপি!
জাস্টিন সানে

একটি ছোট সমস্যা তবে আপনি যদি বিভিন্ন সিস্টেমের রঙগুলি ব্যবহার করেন তবে দেখতে পারেন যে শিরোনাম ব্যতীত অন্য কোনও কিছুর জন্য পাঠ্যের রঙ সেট করা হয়নি তবে টেবিলের পটভূমিতে একটি সুস্পষ্ট ব্যাকগ্রাউন্ডের রঙ রয়েছে। এই টেবিলটির জন্য আমার একটি সাদা এবং ধূসর ব্যাকগ্রাউন্ডে হলুদ পাঠ্য রয়েছে।
ম্যাট আর্নল্ড

1
@ ম্যাটআরনল্ড ফিক্সড টিপস জন্য Thx!
ডক্টরডেস্ট্রাকো

5

একটি সহজ jQuery প্লাগইন

এটি ম্যাশের সমাধানের একটি বৈচিত্র। আপনি এটি পছন্দ করতে পারেন$('table#foo').scrollableTable();

ধারণাটি হ'ল:

  • theadএবং tbodyপৃথক tableউপাদানগুলিতে বিভক্ত করুন
  • তাদের ঘরের প্রশস্ততা আবার মিলিয়ে দিন
  • tableএকটি দ্বিতীয় মধ্যে মোড়ানোdiv.scrollable
  • div.scrollableআসলে স্ক্রোল তৈরি করতে CSS ব্যবহার করুন

সিএসএস হতে পারে:

div.scrollable { height: 300px; overflow-y: scroll;}

আদেশ সহকারে

  • স্পষ্টতই, এই টেবিলগুলি বিভক্ত করা মার্কআপটিকে কম শব্দার্থক করে তোলে। অ্যাক্সেসযোগ্যতায় এর কী প্রভাব রয়েছে তা আমি নিশ্চিত নই।
  • এই প্লাগইনটি পাদলেখ, একাধিক শিরোলেখ ইত্যাদির সাথে ডিল করে না
  • আমি এটি কেবলমাত্র Chrome সংস্করণ 20 এ পরীক্ষা করেছি।

এটি বলেছিল, এটি আমার উদ্দেশ্যগুলির জন্য কাজ করে এবং আপনি এটি গ্রহণ ও পরিবর্তন করতে পারেন।

এখানে প্লাগইনটি রয়েছে:

jQuery.fn.scrollableTable = function () {
  var $newTable, $oldTable, $scrollableDiv, originalWidths;
  $oldTable = $(this);

  // Once the tables are split, their cell widths may change. 
  // Grab these so we can make the two tables match again.
  originalWidths = $oldTable.find('tr:first td').map(function() {
    return $(this).width();
  });

  $newTable = $oldTable.clone();
  $oldTable.find('tbody').remove();
  $newTable.find('thead').remove();

  $.each([$oldTable, $newTable], function(index, $table) {
    $table.find('tr:first td').each(function(i) {
      $(this).width(originalWidths[i]);
    });
  });

  $scrollableDiv = $('<div/>').addClass('scrollable');
  $newTable.insertAfter($oldTable).wrap($scrollableDiv);
};

1
চমৎকার স্ক্রিপ্ট, এটি আমার পরিবেশে সবচেয়ে ভাল কাজ করেছে। আমি স্থির পাদলেখ সমর্থন সহ আপনার স্ক্রিপ্ট প্রসারিত, নীচে আমার পোস্ট চেক করুন।
গীতারিক

4

:)

পরিষ্কার-পরিচ্ছন্ন নয়, তবে খাঁটি এইচটিএমএল / সিএসএস সমাধান।

table {
    overflow-x:scroll;
}

tbody {
    max-height: /*your desired max height*/
    overflow-y:scroll;
    display:block;
}

আইই 8 + জেএসফিডেলের উদাহরণের জন্য আপডেট হয়েছে


2
ভাল সমাধান, কেবল উল্লেখ করার জন্য, এই কক্ষগুলি ভাসমান এবং তাই সামগ্রী অনুসারে পৃথক উচ্চতা থাকতে পারে, আপনি যদি তাদের সীমানা নির্ধারণ করেন তবে এটি দৃশ্যমান: jsfiddle.net/ZdeEH/15
স্টানো

3

স্থির পাদলেখ জন্য সমর্থন

আমি স্থির পাদলেখ এবং সর্বোচ্চ উচ্চতা সমর্থন করার জন্য নাথানের ফাংশন প্রসারিত করেছি। এছাড়াও, ফাংশনটি সিএসএস নিজেই সেট করবে এবং আপনাকে কেবল একটি প্রস্থকে সমর্থন করতে হবে।

ব্যবহার:

স্থির উচ্চতা:

$('table').scrollableTable({ height: 100 });

সর্বাধিক উচ্চতা (যদি ব্রাউজার CSS এর 'সর্বোচ্চ-উচ্চতা' বিকল্পটি সমর্থন করে):

$('table').scrollableTable({ maxHeight: 100 });

লিপি:

jQuery.fn.scrollableTable = function(options) {

    var $originalTable, $headTable, $bodyTable, $footTable, $scrollableDiv, originalWidths;

    // Prepare the separate parts of the table
    $originalTable = $(this);
    $headTable = $originalTable.clone();

    $headTable.find('tbody').remove();
    $headTable.find('tfoot').remove();

    $bodyTable = $originalTable.clone();
    $bodyTable.find('thead').remove();
    $bodyTable.find('tfoot').remove();

    $footTable = $originalTable.clone();
    $footTable.find('thead').remove();
    $footTable.find('tbody').remove();

    // Grab the original column widths and set them in the separate tables
    originalWidths = $originalTable.find('tr:first td').map(function() {
        return $(this).width();
    });

    $.each([$headTable, $bodyTable, $footTable], function(index, $table) {
        $table.find('tr:first td').each(function(i) {
            $(this).width(originalWidths[i]);
        });
    });

    // The div that makes the body table scroll
    $scrollableDiv = $('<div/>').css({
        'overflow-y': 'scroll'
    });

    if(options.height) {
        $scrollableDiv.css({'height': options.height});
    }
    else if(options.maxHeight) {
        $scrollableDiv.css({'max-height': options.maxHeight});
    }

    // Add the new separate tables and remove the original one
    $headTable.insertAfter($originalTable);
    $bodyTable.insertAfter($headTable);
    $footTable.insertAfter($bodyTable);
    $bodyTable.wrap($scrollableDiv);
    $originalTable.remove();
};

3

কোনওভাবে আমি Position:Stickyআমার মামলায় জরিমানা কাজ করে শেষ করেছি:

table{
  width: 100%;
  border: collapse;
}

th{
    position: sticky;
    top: 0px;
    border: 1px solid black;
    background: #ff5722;
    color: #f5f5f5;
    font-weight: 600;
}
td{
    background: #d3d3d3;
    border: 1px solid black;
    color: #f5f5f5;
    font-weight: 600;
}

div{
  height: 150px
  overflow: auto;
  width: 100%
}
<div>
    <table>
        <thead>
            <tr>
                <th>header 1</th>
                <th>header 2</th>
                <th>header 3</th>
                <th>header 4</th>
                <th>header 5</th>
                <th>header 6</th>
                <th>header 7</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
            <tr>
                <td>data 1</td>
                <td>data 2</td>
                <td>data 3</td>
                <td>data 4</td>
                <td>data 5</td>
                <td>data 6</td>
                <td>data 7</td>
            </tr>
        </tbody>
    </table>
</div>


1
এটি আমি এখনও অবধি দেখা সবচেয়ে পরিষ্কার সমাধান। ক্যানিউজ দেখায় যে 5/2/2020 অবধি, অপ্রত্যক্ষিত অবস্থান: স্টিকি 90% গ্লোবাল সমর্থন উপভোগ করে। সুতরাং এই সমাধানটি সমস্ত আধুনিক ব্রাউজারে ভাল কাজ করে।
এলিয়েনকিভিন

2

দুটি ডিভ, একটি শিরোনামের জন্য, একটি ডেটার জন্য। ডেটা ডিভ স্ক্রোলযোগ্য করুন এবং শিরোনামে কলামগুলির প্রস্থ ডেটার প্রস্থের মতো হতে সেট করতে জাভাস্ক্রিপ্ট ব্যবহার করুন। আমি মনে করি ডেটা কলামগুলির প্রস্থগুলি গতিশীলের পরিবর্তে স্থির করা দরকার।


3
আপনি যদি অ্যাক্সেসযোগ্যতার বিষয়ে চিন্তা করেন তবে এটি ব্যর্থ।
এপাসকারেলো

1
পুনরায় অ্যাক্সেসযোগ্যতা, সম্ভবত আমরা <thead> এবং <tbody> ?? স্টাইলিংয়ের সাথে ডিভসের ব্যবহার প্রতিস্থাপন করতে পারি ??
চেকিসফ্ট

1

আমি বুঝতে পারছি যে প্রশ্নটি জাভাস্ক্রিপ্টের অনুমতি দেয়, তবে এখানে একটি শুদ্ধ সিএসএস সমাধান আমি কাজ করেছি যা টেবিলটিকে অনুভূমিকভাবে প্রসারিত করতে দেয় allows এটি ইন্টারনেট এক্সপ্লোরার 10 এবং সর্বশেষতম ক্রোম এবং ফায়ারফক্স ব্রাউজারগুলির সাথে পরীক্ষা করা হয়েছিল। JsFizz এর একটি লিঙ্ক নীচে রয়েছে।

এইচটিএমএল:

Putting some text here to differentiate between the header
aligning with the top of the screen and the header aligning
with the top of one of its ancestor containers.

<div id="positioning-container">
<div id="scroll-container">
    <table>
        <colgroup>
            <col class="col1"></col>
            <col class="col2"></col>
        </colgroup>
        <thead>
            <th class="header-col1"><div>Header 1</div></th>
            <th class="header-col2"><div>Header 2</div></th>
        </thead>
        <tbody>
            <tr><td>Cell 1.1</td><td>Cell 1.2</td></tr>
            <tr><td>Cell 2.1</td><td>Cell 2.2</td></tr>
            <tr><td>Cell 3.1</td><td>Cell 3.2</td></tr>
            <tr><td>Cell 4.1</td><td>Cell 4.2</td></tr>
            <tr><td>Cell 5.1</td><td>Cell 5.2</td></tr>
            <tr><td>Cell 6.1</td><td>Cell 6.2</td></tr>
            <tr><td>Cell 7.1</td><td>Cell 7.2</td></tr>

        </tbody>
    </table>
</div>
</div>

এবং সিএসএস:

table{
    border-collapse: collapse;
    table-layout: fixed;
    width: 100%;
}
/* Not required, just helps with alignment for this example */
td, th{
    padding: 0;
    margin: 0;
}

tbody{
    background-color: #ddf;
}

thead {
    /* Keeps the header in place. Don't forget top: 0 */
    position: absolute;
    top: 0;
    background-color: #ddd;

    /* The 17px is to adjust for the scrollbar width.
     * This is a new css value that makes this pure
     * css example possible */
    width: calc(100% - 17px);
    height: 20px;
}

/* Positioning container. Required to position the
 * header since the header uses position:absolute
 * (otherwise it would position at the top of the screen) */
#positioning-container{
    position: relative;
}

/* A container to set the scroll-bar and
 * includes padding to move the table contents
 * down below the header (padding = header height) */
#scroll-container{
    overflow-y: auto;
    padding-top: 20px;
    height: 100px;
}
.header-col1{
    background-color: red;
}

/* Fixed-width header columns need a div to set their width */
.header-col1 div{
    width: 100px;
}

/* Expandable columns need a width set on the th tag */
.header-col2{
    width: 100%;
}
.col1 {
    width: 100px;
}
.col2{
    width: 100%;
}

http://jsfiddle.net/HNHRv/3/


1

যারা ম্যাক্সিমিলিয়ান হিলস দ্বারা প্রদত্ত দুর্দান্ত সমাধানটি চেষ্টা করেছিল এবং এটি ইন্টারনেট এক্সপ্লোরার এর সাথে কাজ করতে সফল হয়নি, তাদের জন্য আমারও একই সমস্যা ছিল (ইন্টারনেট এক্সপ্লোরার 11) এবং সমস্যাটি কী তা খুঁজে পেয়েছিলাম।

ইন্টারনেট এক্সপ্লোরার 11 এ স্টাইল ট্রান্সফর্ম (কমপক্ষে অনুবাদ সহ) কাজ করে না <THEAD>। আমি <TH>লুপের মধ্যে সমস্ত স্টাইল প্রয়োগ করে এটি সমাধান করেছি । কাজ করেছে। আমার জাভাস্ক্রিপ্ট কোডটি দেখতে এমন দেখাচ্ছে:

document.getElementById('pnlGridWrap').addEventListener("scroll", function () {
  var translate = "translate(0," + this.scrollTop + "px)";
  var myElements = this.querySelectorAll("th");
  for (var i = 0; i < myElements.length; i++) {
    myElements[i].style.transform=translate;
  }
});

আমার ক্ষেত্রে টেবিলটি ASP.NET এ গ্রিডভিউ ছিল। প্রথমে আমি ভেবেছিলাম এটি ছিল কারণ এটি ছিল না <THEAD>, তবে আমি যখন এটির জন্য বাধ্য করেছিলাম তখনও এটি কার্যকর হয়নি। তারপরে আমি উপরে কি লিখেছি তা খুঁজে বের করেছিলাম।

এটি একটি খুব সুন্দর এবং সহজ সমাধান। Chrome এ এটি নিখুঁত, ফায়ারফক্সে কিছুটা বিড়ম্বনা, এবং ইন্টারনেট এক্সপ্লোরারে আরও বিড়ম্বনাযুক্ত। সব মিলিয়ে একটি ভাল সমাধান।


0

আমি আশা করি @ মার্কের সমাধানটি আগে খুঁজে পেয়েছি, তবে এই SO প্রশ্নটি দেখার আগে আমি গিয়ে নিজের লেখা লিখেছি ...

খনি হ'ল একটি খুব লাইটওয়েট jQuery প্লাগইন যা স্থির শিরোনাম, পাদলেখ, কলাম স্প্যানিং (কলস্প্যান), আকার পরিবর্তন, অনুভূমিক স্ক্রোলিং এবং স্ক্রোলিং শুরুর আগে প্রদর্শন করার জন্য optionচ্ছিক সংখ্যক সারি সমর্থন করে।

jQuery.scrolTableBody (গিটহাব)

যতদিন আপনার সাথে একটি টেবিল আছে সঠিক <thead>, <tbody>এবং (ঐচ্ছিক) <tfoot>, সমস্ত আপনাকে যা করতে হবে, তা হল:

$('table').scrollTableBody();

0

আমি এই কার্যনির্বাহীটি পেয়েছি - উপাত্তের টেবিলের উপরে একটি সারণীতে শিরোনাম সারিটি সরিয়ে নিয়েছি:

<html>
<head>
	<title>Fixed header</title>
	<style>
		table td {width:75px;}
	</style>
</head>

<body>
<div style="height:auto; width:350px; overflow:auto">
<table border="1">
<tr>
	<td>header 1</td>
	<td>header 2</td>
	<td>header 3</td>
</tr>
</table>
</div>

<div style="height:50px; width:350px; overflow:auto">
<table border="1">
<tr>
	<td>row 1 col 1</td>
	<td>row 1 col 2</td>
	<td>row 1 col 3</td>		
</tr>
<tr>
	<td>row 2 col 1</td>
	<td>row 2 col 2</td>
	<td>row 2 col 3</td>		
</tr>
<tr>
	<td>row 3 col 1</td>
	<td>row 3 col 2</td>
	<td>row 3 col 3</td>		
</tr>
<tr>
	<td>row 4 col 1</td>
	<td>row 4 col 2</td>
	<td>row 4 col 3</td>		
</tr>
<tr>
	<td>row 5 col 1</td>
	<td>row 5 col 2</td>
	<td>row 5 col 3</td>		
</tr>
<tr>
	<td>row 6 col 1</td>
	<td>row 6 col 2</td>
	<td>row 6 col 3</td>		
</tr>
</table>
</div>


</body>
</html>


ছোট টেবিলের জন্য কাজ করে, তবে আপনার যদি অনুভূমিক স্ক্রোলিং করেন তবে এই সমাধানটি কাজ করবে না।
crh225

এটি সঠিকভাবে কাজ করবে না যেহেতু টেবিল কলামগুলি সারিবদ্ধ হবে না। এখানে আপনি টিডির জন্য প্রস্থকে চাপ দিচ্ছেন তবে আমাদের অবশ্যই করা উচিত নয় ...
জিগ্লার 4:58

0

টেবিলটিতে স্টিকিবেলহাইডার্স jQuery প্লাগইন প্রয়োগ করে , কলামের শিরোনামগুলি নীচে স্ক্রোল করার সাথে সাথে ভিউপোর্টের শীর্ষে আটকে থাকবে।

উদাহরণ:

$(function () {
    $("table").stickyTableHeaders();
});

/*! Copyright (c) 2011 by Jonas Mosbech - https://github.com/jmosbech/StickyTableHeaders
	MIT license info: https://github.com/jmosbech/StickyTableHeaders/blob/master/license.txt */

;
(function ($, window, undefined) {
    'use strict';

    var name = 'stickyTableHeaders',
        id = 0,
        defaults = {
            fixedOffset: 0,
            leftOffset: 0,
            marginTop: 0,
            scrollableArea: window
        };

    function Plugin(el, options) {
        // To avoid scope issues, use 'base' instead of 'this'
        // to reference this class from internal events and functions.
        var base = this;

        // Access to jQuery and DOM versions of element
        base.$el = $(el);
        base.el = el;
        base.id = id++;
        base.$window = $(window);
        base.$document = $(document);

        // Listen for destroyed, call teardown
        base.$el.bind('destroyed',
        $.proxy(base.teardown, base));

        // Cache DOM refs for performance reasons
        base.$clonedHeader = null;
        base.$originalHeader = null;

        // Keep track of state
        base.isSticky = false;
        base.hasBeenSticky = false;
        base.leftOffset = null;
        base.topOffset = null;

        base.init = function () {
            base.$el.each(function () {
                var $this = $(this);

                // remove padding on <table> to fix issue #7
                $this.css('padding', 0);

                base.$originalHeader = $('thead:first', this);
                base.$clonedHeader = base.$originalHeader.clone();
                $this.trigger('clonedHeader.' + name, [base.$clonedHeader]);

                base.$clonedHeader.addClass('tableFloatingHeader');
                base.$clonedHeader.css('display', 'none');

                base.$originalHeader.addClass('tableFloatingHeaderOriginal');

                base.$originalHeader.after(base.$clonedHeader);

                base.$printStyle = $('<style type="text/css" media="print">' +
                    '.tableFloatingHeader{display:none !important;}' +
                    '.tableFloatingHeaderOriginal{position:static !important;}' +
                    '</style>');
                $('head').append(base.$printStyle);
            });

            base.setOptions(options);
            base.updateWidth();
            base.toggleHeaders();
            base.bind();
        };

        base.destroy = function () {
            base.$el.unbind('destroyed', base.teardown);
            base.teardown();
        };

        base.teardown = function () {
            if (base.isSticky) {
                base.$originalHeader.css('position', 'static');
            }
            $.removeData(base.el, 'plugin_' + name);
            base.unbind();

            base.$clonedHeader.remove();
            base.$originalHeader.removeClass('tableFloatingHeaderOriginal');
            base.$originalHeader.css('visibility', 'visible');
            base.$printStyle.remove();

            base.el = null;
            base.$el = null;
        };

        base.bind = function () {
            base.$scrollableArea.on('scroll.' + name, base.toggleHeaders);
            if (!base.isWindowScrolling) {
                base.$window.on('scroll.' + name + base.id, base.setPositionValues);
                base.$window.on('resize.' + name + base.id, base.toggleHeaders);
            }
            base.$scrollableArea.on('resize.' + name, base.toggleHeaders);
            base.$scrollableArea.on('resize.' + name, base.updateWidth);
        };

        base.unbind = function () {
            // unbind window events by specifying handle so we don't remove too much
            base.$scrollableArea.off('.' + name, base.toggleHeaders);
            if (!base.isWindowScrolling) {
                base.$window.off('.' + name + base.id, base.setPositionValues);
                base.$window.off('.' + name + base.id, base.toggleHeaders);
            }
            base.$scrollableArea.off('.' + name, base.updateWidth);
        };

        base.toggleHeaders = function () {
            if (base.$el) {
                base.$el.each(function () {
                    var $this = $(this),
                        newLeft,
                        newTopOffset = base.isWindowScrolling ? (
                        isNaN(base.options.fixedOffset) ? base.options.fixedOffset.outerHeight() : base.options.fixedOffset) : base.$scrollableArea.offset().top + (!isNaN(base.options.fixedOffset) ? base.options.fixedOffset : 0),
                        offset = $this.offset(),

                        scrollTop = base.$scrollableArea.scrollTop() + newTopOffset,
                        scrollLeft = base.$scrollableArea.scrollLeft(),

                        scrolledPastTop = base.isWindowScrolling ? scrollTop > offset.top : newTopOffset > offset.top,
                        notScrolledPastBottom = (base.isWindowScrolling ? scrollTop : 0) < (offset.top + $this.height() - base.$clonedHeader.height() - (base.isWindowScrolling ? 0 : newTopOffset));

                    if (scrolledPastTop && notScrolledPastBottom) {
                        newLeft = offset.left - scrollLeft + base.options.leftOffset;
                        base.$originalHeader.css({
                            'position': 'fixed',
                                'margin-top': base.options.marginTop,
                                'left': newLeft,
                                'z-index': 3 // #18: opacity bug
                        });
                        base.leftOffset = newLeft;
                        base.topOffset = newTopOffset;
                        base.$clonedHeader.css('display', '');
                        if (!base.isSticky) {
                            base.isSticky = true;
                            // make sure the width is correct: the user might have resized the browser while in static mode
                            base.updateWidth();
                        }
                        base.setPositionValues();
                    } else if (base.isSticky) {
                        base.$originalHeader.css('position', 'static');
                        base.$clonedHeader.css('display', 'none');
                        base.isSticky = false;
                        base.resetWidth($('td,th', base.$clonedHeader), $('td,th', base.$originalHeader));
                    }
                });
            }
        };

        base.setPositionValues = function () {
            var winScrollTop = base.$window.scrollTop(),
                winScrollLeft = base.$window.scrollLeft();
            if (!base.isSticky || winScrollTop < 0 || winScrollTop + base.$window.height() > base.$document.height() || winScrollLeft < 0 || winScrollLeft + base.$window.width() > base.$document.width()) {
                return;
            }
            base.$originalHeader.css({
                'top': base.topOffset - (base.isWindowScrolling ? 0 : winScrollTop),
                    'left': base.leftOffset - (base.isWindowScrolling ? 0 : winScrollLeft)
            });
        };

        base.updateWidth = function () {
            if (!base.isSticky) {
                return;
            }
            // Copy cell widths from clone
            if (!base.$originalHeaderCells) {
                base.$originalHeaderCells = $('th,td', base.$originalHeader);
            }
            if (!base.$clonedHeaderCells) {
                base.$clonedHeaderCells = $('th,td', base.$clonedHeader);
            }
            var cellWidths = base.getWidth(base.$clonedHeaderCells);
            base.setWidth(cellWidths, base.$clonedHeaderCells, base.$originalHeaderCells);

            // Copy row width from whole table
            base.$originalHeader.css('width', base.$clonedHeader.width());
        };

        base.getWidth = function ($clonedHeaders) {
            var widths = [];
            $clonedHeaders.each(function (index) {
                var width, $this = $(this);

                if ($this.css('box-sizing') === 'border-box') {
                    width = $this[0].getBoundingClientRect().width; // #39: border-box bug
                } else {
                    var $origTh = $('th', base.$originalHeader);
                    if ($origTh.css('border-collapse') === 'collapse') {
                        if (window.getComputedStyle) {
                            width = parseFloat(window.getComputedStyle(this, null).width);
                        } else {
                            // ie8 only
                            var leftPadding = parseFloat($this.css('padding-left'));
                            var rightPadding = parseFloat($this.css('padding-right'));
                            // Needs more investigation - this is assuming constant border around this cell and it's neighbours.
                            var border = parseFloat($this.css('border-width'));
                            width = $this.outerWidth() - leftPadding - rightPadding - border;
                        }
                    } else {
                        width = $this.width();
                    }
                }

                widths[index] = width;
            });
            return widths;
        };

        base.setWidth = function (widths, $clonedHeaders, $origHeaders) {
            $clonedHeaders.each(function (index) {
                var width = widths[index];
                $origHeaders.eq(index).css({
                    'min-width': width,
                        'max-width': width
                });
            });
        };

        base.resetWidth = function ($clonedHeaders, $origHeaders) {
            $clonedHeaders.each(function (index) {
                var $this = $(this);
                $origHeaders.eq(index).css({
                    'min-width': $this.css('min-width'),
                        'max-width': $this.css('max-width')
                });
            });
        };

        base.setOptions = function (options) {
            base.options = $.extend({}, defaults, options);
            base.$scrollableArea = $(base.options.scrollableArea);
            base.isWindowScrolling = base.$scrollableArea[0] === window;
        };

        base.updateOptions = function (options) {
            base.setOptions(options);
            // scrollableArea might have changed
            base.unbind();
            base.bind();
            base.updateWidth();
            base.toggleHeaders();
        };

        // Run initializer
        base.init();
    }

    // A plugin wrapper around the constructor,
    // preventing against multiple instantiations
    $.fn[name] = function (options) {
        return this.each(function () {
            var instance = $.data(this, 'plugin_' + name);
            if (instance) {
                if (typeof options === 'string') {
                    instance[options].apply(instance);
                } else {
                    instance.updateOptions(options);
                }
            } else if (options !== 'destroy') {
                $.data(this, 'plugin_' + name, new Plugin(this, options));
            }
        });
    };

})(jQuery, window);
body {
    margin: 0 auto;
    padding: 0 20px;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 11px;
    color: #555;
}
table {
    border: 0;
    padding: 0;
    margin: 0 0 20px 0;
    border-collapse: collapse;
}
th {
    padding: 5px;
    /* NOTE: th padding must be set explicitly in order to support IE */
    text-align: right;
    font-weight:bold;
    line-height: 2em;
    color: #FFF;
    background-color: #555;
}
tbody td {
    padding: 10px;
    line-height: 18px;
    border-top: 1px solid #E0E0E0;
}
tbody tr:nth-child(2n) {
    background-color: #F7F7F7;
}
tbody tr:hover {
    background-color: #EEEEEE;
}
td {
    text-align: right;
}
td:first-child, th:first-child {
    text-align: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div style="width:3000px">some really really wide content goes here</div>
<table>
    <thead>
        <tr>
            <th colspan="9">Companies listed on NASDAQ OMX Copenhagen.</th>
        </tr>
        <tr>
            <th>Full name</th>
            <th>CCY</th>
            <th>Last</th>
            <th>+/-</th>
            <th>%</th>
            <th>Bid</th>
            <th>Ask</th>
            <th>Volume</th>
            <th>Turnover</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>A.P. Møller...</td>
            <td>DKK</td>
            <td>33,220.00</td>
            <td>760</td>
            <td>2.34</td>
            <td>33,140.00</td>
            <td>33,220.00</td>
            <td>594</td>
            <td>19,791,910</td>
        </tr>
        <tr>
            <td>A.P. Møller...</td>
            <td>DKK</td>
            <td>34,620.00</td>
            <td>640</td>
            <td>1.88</td>
            <td>34,620.00</td>
            <td>34,700.00</td>
            <td>9,954</td>
            <td>346,530,246</td>
        </tr>
        <tr>
            <td>Carlsberg A</td>
            <td>DKK</td>
            <td>380</td>
            <td>0</td>
            <td>0</td>
            <td>371</td>
            <td>391.5</td>
            <td>6</td>
            <td>2,280</td>
        </tr>
        <tr>
            <td>Carlsberg B</td>
            <td>DKK</td>
            <td>364.4</td>
            <td>8.6</td>
            <td>2.42</td>
            <td>363</td>
            <td>364.4</td>
            <td>636,267</td>
            <td>228,530,601</td>
        </tr>
        <tr>
            <td>Chr. Hansen...</td>
            <td>DKK</td>
            <td>114.5</td>
            <td>-1.6</td>
            <td>-1.38</td>
            <td>114.2</td>
            <td>114.5</td>
            <td>141,822</td>
            <td>16,311,454</td>
        </tr>
        <tr>
            <td>Coloplast B</td>
            <td>DKK</td>
            <td>809.5</td>
            <td>11</td>
            <td>1.38</td>
            <td>809</td>
            <td>809.5</td>
            <td>85,840</td>
            <td>69,363,301</td>
        </tr>
        <tr>
            <td>D/S Norden</td>
            <td>DKK</td>
            <td>155</td>
            <td>-1.5</td>
            <td>-0.96</td>
            <td>155</td>
            <td>155.1</td>
            <td>51,681</td>
            <td>8,037,225</td>
        </tr>
        <tr>
            <td>Danske Bank</td>
            <td>DKK</td>
            <td>69.05</td>
            <td>2.55</td>
            <td>3.83</td>
            <td>69.05</td>
            <td>69.2</td>
            <td>1,723,719</td>
            <td>115,348,068</td>
        </tr>
        <tr>
            <td>DSV</td>
            <td>DKK</td>
            <td>105.4</td>
            <td>0.2</td>
            <td>0.19</td>
            <td>105.2</td>
            <td>105.4</td>
            <td>674,873</td>
            <td>71,575,035</td>
        </tr>
        <tr>
            <td>FLSmidth &amp; Co.</td>
            <td>DKK</td>
            <td>295.8</td>
            <td>-1.8</td>
            <td>-0.6</td>
            <td>295.1</td>
            <td>295.8</td>
            <td>341,263</td>
            <td>100,301,032</td>
        </tr>
        <tr>
            <td>G4S plc</td>
            <td>DKK</td>
            <td>22.53</td>
            <td>0.05</td>
            <td>0.22</td>
            <td>22.53</td>
            <td>22.57</td>
            <td>190,920</td>
            <td>4,338,150</td>
        </tr>
        <tr>
            <td>Jyske Bank</td>
            <td>DKK</td>
            <td>144.2</td>
            <td>1.4</td>
            <td>0.98</td>
            <td>142.8</td>
            <td>144.2</td>
            <td>78,163</td>
            <td>11,104,874</td>
        </tr>
        <tr>
            <td>Københavns ...</td>
            <td>DKK</td>
            <td>1,580.00</td>
            <td>-12</td>
            <td>-0.75</td>
            <td>1,590.00</td>
            <td>1,620.00</td>
            <td>82</td>
            <td>131,110</td>
        </tr>
        <tr>
            <td>Lundbeck</td>
            <td>DKK</td>
            <td>103.4</td>
            <td>-2.5</td>
            <td>-2.36</td>
            <td>103.4</td>
            <td>103.8</td>
            <td>157,162</td>
            <td>16,462,282</td>
        </tr>
        <tr>
            <td>Nordea Bank</td>
            <td>DKK</td>
            <td>43.22</td>
            <td>-0.06</td>
            <td>-0.14</td>
            <td>43.22</td>
            <td>43.25</td>
            <td>167,520</td>
            <td>7,310,143</td>
        </tr>
        <tr>
            <td>Novo Nordisk B</td>
            <td>DKK</td>
            <td>552.5</td>
            <td>-3.5</td>
            <td>-0.63</td>
            <td>550.5</td>
            <td>552.5</td>
            <td>843,533</td>
            <td>463,962,375</td>
        </tr>
        <tr>
            <td>Novozymes B</td>
            <td>DKK</td>
            <td>805.5</td>
            <td>5.5</td>
            <td>0.69</td>
            <td>805</td>
            <td>805.5</td>
            <td>152,188</td>
            <td>121,746,199</td>
        </tr>
        <tr>
            <td>Pandora</td>
            <td>DKK</td>
            <td>39.04</td>
            <td>0.94</td>
            <td>2.47</td>
            <td>38.8</td>
            <td>39.04</td>
            <td>350,965</td>
            <td>13,611,838</td>
        </tr>
        <tr>
            <td>Rockwool In...</td>
            <td>DKK</td>
            <td>492</td>
            <td>0</td>
            <td>0</td>
            <td>482</td>
            <td>492</td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>Rockwool In...</td>
            <td>DKK</td>
            <td>468</td>
            <td>12</td>
            <td>2.63</td>
            <td>465.2</td>
            <td>468</td>
            <td>9,885</td>
            <td>4,623,850</td>
        </tr>
        <tr>
            <td>Sydbank</td>
            <td>DKK</td>
            <td>95</td>
            <td>0.05</td>
            <td>0.05</td>
            <td>94.7</td>
            <td>95</td>
            <td>103,438</td>
            <td>9,802,899</td>
        </tr>
        <tr>
            <td>TDC</td>
            <td>DKK</td>
            <td>43.6</td>
            <td>0.13</td>
            <td>0.3</td>
            <td>43.5</td>
            <td>43.6</td>
            <td>845,110</td>
            <td>36,785,339</td>
        </tr>
        <tr>
            <td>Topdanmark</td>
            <td>DKK</td>
            <td>854</td>
            <td>13.5</td>
            <td>1.61</td>
            <td>854</td>
            <td>855</td>
            <td>38,679</td>
            <td>32,737,678</td>
        </tr>
        <tr>
            <td>Tryg</td>
            <td>DKK</td>
            <td>290.4</td>
            <td>0.3</td>
            <td>0.1</td>
            <td>290</td>
            <td>290.4</td>
            <td>94,587</td>
            <td>27,537,247</td>
        </tr>
        <tr>
            <td>Vestas Wind...</td>
            <td>DKK</td>
            <td>90.15</td>
            <td>-4.2</td>
            <td>-4.45</td>
            <td>90.1</td>
            <td>90.15</td>
            <td>1,317,313</td>
            <td>121,064,314</td>
        </tr>
        <tr>
            <td>William Dem...</td>
            <td>DKK</td>
            <td>417.6</td>
            <td>0.1</td>
            <td>0.02</td>
            <td>417</td>
            <td>417.6</td>
            <td>64,242</td>
            <td>26,859,554</td>
        </tr>
    </tbody>
</table>
<div style="height: 4000px">lots of content down here...</div>


0

আমি ম্যাক্সিমিলিয়ান হিলসের উত্তর পছন্দ করি তবে আমার কিছু সমস্যা ছিল:

  1. আপনি যদি এটি প্রয়োগ না করেন তবে রূপান্তরটি এজ বা আইই তে কাজ করে না
  2. এজ এবং আই-তে স্ক্রোল করার সময় শিরোনামের ফ্লিকারগুলি
  3. আমার টেবিলটি এজ্যাক্স ব্যবহার করে লোড করা হয়েছে, তাই আমি মোড়কের স্ক্রোল ইভেন্টের চেয়ে উইন্ডো স্ক্রোল ইভেন্টের সাথে সংযুক্ত করতে চেয়েছিলাম

ঝাঁকুনি থেকে মুক্তি পাওয়ার জন্য, ব্যবহারকারী স্ক্রোলিং শেষ না হওয়া পর্যন্ত অপেক্ষা করার জন্য আমি একটি টাইমআউট ব্যবহার করি, তারপরে আমি রূপান্তরটি প্রয়োগ করি - যাতে স্ক্রোলিংয়ের সময় শিরোনামটি দৃশ্যমান হয় না।

আমি jQuery ব্যবহার করে এটিও লিখেছি, এর একটি সুবিধা যে jQuery আপনার জন্য বিক্রেতা-উপসর্গ পরিচালনা করতে হবে

    var isScrolling, lastTop, lastLeft, isLeftHidden, isTopHidden;

    //Scroll events don't bubble https://stackoverflow.com/a/19375645/150342
    //so can't use $(document).on("scroll", ".table-container-fixed", function (e) {
    document.addEventListener('scroll', function (event) {
        var $container = $(event.target);
        if (!$container.hasClass("table-container-fixed"))
            return;    

        //transform needs to be applied to th for Edge and IE
        //in this example I am also fixing the leftmost column
        var $topLeftCell = $container.find('table:first > thead > tr > th:first');
        var $headerCells = $topLeftCell.siblings();
        var $columnCells = $container
           .find('table:first > tbody > tr > td:first-child, ' +
                 'table:first > tfoot > tr > td:first-child');

        //hide the cells while returning otherwise they show on top of the data
        if (!isLeftHidden) {
            var currentLeft = $container.scrollLeft();
            if (currentLeft < lastLeft) {
                //scrolling left
                isLeftHidden = true;
                $topLeftCell.css('visibility', 'hidden');
                $columnCells.css('visibility', 'hidden');
            }
            lastLeft = currentLeft;
        }

        if (!isTopHidden) {
            var currentTop = $container.scrollTop();
            if (currentTop < lastTop) {
                //scrolling up
                isTopHidden = true;
                $topLeftCell.css('visibility', 'hidden');
                $headerCells.css('visibility', 'hidden');
            }
            lastTop = currentTop;
        }

        // Using timeout to delay transform until user stops scrolling
        // Clear timeout while scrolling
        window.clearTimeout(isScrolling);

        // Set a timeout to run after scrolling ends
        isScrolling = setTimeout(function () {
            //move the table cells. 
            var x = $container.scrollLeft();
            var y = $container.scrollTop();

            $topLeftCell.css('transform', 'translate(' + x + 'px, ' + y + 'px)');
            $headerCells.css('transform', 'translateY(' + y + 'px)');
            $columnCells.css('transform', 'translateX(' + x + 'px)');

            isTopHidden = isLeftHidden = false;
            $topLeftCell.css('visibility', 'inherit');
            $headerCells.css('visibility', 'inherit');
            $columnCells.css('visibility', 'inherit');
        }, 100);

    }, true);

টেবিলটি ক্লাসের সাথে একটি ডিভের মধ্যে আবৃত table-container-fixed

.table-container-fixed{
    overflow: auto;
    height: 400px;
}

আমি সীমানা-পতনকে পৃথক করে দিয়েছি কারণ অন্যথায় আমরা অনুবাদকালে সীমানা হারাব এবং আমি টেবিলে সীমানাটি সরিয়ে দিচ্ছি যেখানে কক্ষের উপরে স্ক্রল করার সময় কক্ষের ঠিক উপরে কন্টেন্ট প্রদর্শিত হবে না।

.table-container-fixed > table {
   border-collapse: separate;
   border:none;
}

আমি thনীচের কক্ষগুলি কভার করতে ব্যাকগ্রাউন্ডকে সাদা করি এবং আমি একটি বর্ডার যুক্ত করি যা টেবিলের সীমানার সাথে মেলে - যা বুটস্ট্র্যাপ ব্যবহার করে স্টাইল করা হয় এবং দেখার বাইরে স্ক্রল করা হয়।

 .table-container-fixed > table > thead > tr > th {
        border-top: 1px solid #ddd !important;
        background-color: white;        
        z-index: 10;
        position: relative;/*to make z-index work*/
    }

            .table-container-fixed > table > thead > tr > th:first-child {
                z-index: 20;
            }

.table-container-fixed > table > tbody > tr > td:first-child,
.table-container-fixed > table > tfoot > tr > td:first-child {
    background-color: white;        
    z-index: 10;
    position: relative;
}

0

JQuery এর সর্বশেষতম সংস্করণ ব্যবহার করুন এবং নিম্নলিখিত জাভাস্ক্রিপ্ট কোড অন্তর্ভুক্ত করুন।

$(window).scroll(function(){
  $("id of the div element").offset({top:$(window).scrollTop()});
});

1
এটি কাজ করে না বলে মনে হচ্ছে। আপনি আমাদের যা করতে চান তা আপনি পরিষ্কার করতে পারেন?
ক্রিস

1
কি ডিভ? আমরা এখানে টেবিল সম্পর্কে কথা বলছি
isapir

0

এটি স্থির শিরোনামের সারিটির সঠিক সমাধান নয়, তবে আমি দীর্ঘ টেবিল জুড়ে শিরোনাম সারিটি পুনরাবৃত্তি করার একটি বরং উদ্ভাবনী পদ্ধতি তৈরি করেছি, তবুও বাছাইয়ের ক্ষমতা রাখছি keeping

এই ঝরঝরে সামান্য বিকল্পের জন্য jQuery tablesorterপ্লাগইন প্রয়োজন । এখানে কিভাবে এটা কাজ করে:

এইচটিএমএল

<table class="tablesorter boxlist" id="pmtable">
    <thead class="fixedheader">
        <tr class="boxheadrow">
            <th width="70px" class="header">Job Number</th>
            <th width="10px" class="header">Pri</th>
            <th width="70px" class="header">CLLI</th>
            <th width="35px" class="header">Market</th>
            <th width="35px" class="header">Job Status</th>
            <th width="65px" class="header">Technology</th>
            <th width="95px;" class="header headerSortDown">MEI</th>
            <th width="95px" class="header">TEO Writer</th>
            <th width="75px" class="header">Quote Due</th>
            <th width="100px" class="header">Engineer</th>
            <th width="75px" class="header">ML Due</th>
            <th width="75px" class="header">ML Complete</th>
            <th width="75px" class="header">SPEC Due</th>
            <th width="75px" class="header">SPEC Complete</th>
            <th width="100px" class="header">Install Supervisor</th>
            <th width="75px" class="header">MasTec OJD</th>
            <th width="75px" class="header">Install Start</th>
            <th width="30px" class="header">Install Hours</th>
            <th width="75px" class="header">Revised CRCD</th>
            <th width="75px" class="header">Latest Ship-To-Site</th>
            <th width="30px" class="header">Total Parts</th>
            <th width="30px" class="header">OEM Rcvd</th>
            <th width="30px" class="header">Minor Rcvd</th>
            <th width="30px" class="header">Total Received</th>
            <th width="30px" class="header">% On Site</th>
            <th width="60px" class="header">Actions</th>
        </tr>
    </thead>
        <tbody class="scrollable">
            <tr data-job_id="3548" data-ml_id="" class="odd">
                <td class="c black">FL-8-RG9UP</td>
                <td data-pri="2" class="priority c yellow">M</td>
                <td class="c">FTLDFLOV</td>
                <td class="c">SFL</td>
                <td class="c">NOI</td>
                <td class="c">TRANSPORT</td>
                <td class="c"></td>
                <td class="c">Chris Byrd</td>
                <td class="c">Apr 13, 2013</td>
                <td class="c">Kris Hall</td>
                <td class="c">May 20, 2013</td>
                <td class="c">May 20, 2013</td>
                <td class="c">Jun 5, 2013</td>
                <td class="c">Jun 7, 2013</td>
                <td class="c">Joseph Fitz</td>
                <td class="c">Jun 10, 2013</td>
                <td class="c">TBD</td>
                <td class="c">123</td>
                <td class="c revised_crcd"><input readonly="true" name="revised_crcd" value="Jul 26, 2013" type="text" size="12" class="smInput r_crcd c hasDatepicker" id="dp1377194058616"></td>
                <td class="c">TBD</td>
                <td class="c">N/A</td>
                <td class="c">N/A</td>
                <td class="c">N/A</td>
                <td class="c">N/A</td>
                <td class="c">N/A</td>
                <td class="actions"><span style="float:left;" class="ui-icon ui-icon-folder-open editJob" title="View this job" s="" details'=""></span></td>
            </tr>
            <tr data-job_id="4264" data-ml_id="2959" class="even">
                <td class="c black">MTS13009SF</td>
                <td data-pri="2" class="priority c yellow">M</td>
                <td class="c">OJUSFLTL</td>
                <td class="c">SFL</td>
                <td class="c">NOI</td>
                <td class="c">TRANSPORT</td>
                <td class="c"></td>
                <td class="c">DeMarcus Stewart</td>
                <td class="c">May 22, 2013</td>
                <td class="c">Ryan Alsobrook</td>
                <td class="c">Jun 19, 2013</td>
                <td class="c">Jun 27, 2013</td>
                <td class="c">Jun 19, 2013</td>
                <td class="c">Jul 4, 2013</td>
                <td class="c">Randy Williams</td>
                <td class="c">Jun 21, 2013</td>
                <td class="c">TBD</td>
                <td class="c">95</td>
                <td class="c revised_crcd"><input readonly="true" name="revised_crcd" value="Aug 9, 2013" type="text" size="12" class="smInput r_crcd c hasDatepicker" id="dp1377194058632"></td><td class="c">TBD</td>
                <td class="c">0</td>
                <td class="c">0.00%</td>
                <td class="c">0.00%</td>
                <td class="c">0.00%</td>
                <td class="c">0.00%</td>
                <td class="actions"><span style="float:left;" class="ui-icon ui-icon-folder-open editJob" title="View this job" s="" details'=""></span><input style="float:left;" type="hidden" name="req_ship" class="reqShip hasDatepicker" id="dp1377194058464"><span style="float:left;" class="ui-icon ui-icon-calendar requestShip" title="Schedule this job for shipping"></span><span class="ui-icon ui-icon-info viewOrderInfo" style="float:left;" title="Show material details for this order"></span></td>
            </tr>
            .
            .
            .
            .
            <tr class="boxheadrow repeated-header">
                <th width="70px" class="header">Job Number</th>
                <th width="10px" class="header">Pri</th>
                <th width="70px" class="header">CLLI</th>
                <th width="35px" class="header">Market</th>
                <th width="35px" class="header">Job Status</th>
                <th width="65px" class="header">Technology</th>
                <th width="95px;" class="header">MEI</th>
                <th width="95px" class="header">TEO Writer</th>
                <th width="75px" class="header">Quote Due</th>
                <th width="100px" class="header">Engineer</th>
                <th width="75px" class="header">ML Due</th>
                <th width="75px" class="header">ML Complete</th>
                <th width="75px" class="header">SPEC Due</th>
                <th width="75px" class="header">SPEC Complete</th>
                <th width="100px" class="header">Install Supervisor</th>
                <th width="75px" class="header">MasTec OJD</th>
                <th width="75px" class="header">Install Start</th>
                <th width="30px" class="header">Install Hours</th>
                <th width="75px" class="header">Revised CRCD</th>
                <th width="75px" class="header">Latest Ship-To-Site</th>
                <th width="30px" class="header">Total Parts</th>
                <th width="30px" class="header">OEM Rcvd</th>
                <th width="30px" class="header">Minor Rcvd</th>
                <th width="30px" class="header">Total Received</th>
                <th width="30px" class="header">% On Site</th>
                <th width="60px" class="header">Actions</th>
            </tr>

স্পষ্টতই, আমার টেবিলে এর চেয়ে আরও অনেকগুলি সারি রয়েছে। যথাযথ 193, তবে আপনি দেখতে পাচ্ছেন শিরোনাম সারিটি কোথায় পুনরাবৃত্তি করে। পুনরাবৃত্তি শিরোনাম সারিটি এই ফাংশনটি দ্বারা সেট আপ করা হয়েছে:

jQuery এর

// Clone the original header row and add the "repeated-header" class
var tblHeader = $('tr.boxheadrow').clone().addClass('repeated-header');

// Add the cloned header with the new class every 34th row (or as you see fit)
$('tbody tr:odd:nth-of-type(17n)').after(tblHeader);

// On the 'sortStart' routine, remove all the inserted header rows
$('#pmtable').bind('sortStart', function() {
    $('.repeated-header').remove();
    // On the 'sortEnd' routine, add back all the header row lines.
}).bind('sortEnd', function() {
    $('tbody tr:odd:nth-of-type(17n)').after(tblHeader);
});

0

অনেক লোক এই উত্তরটির সন্ধান করছে বলে মনে হচ্ছে। আমি এটি এখানে অন্য প্রশ্নের উত্তরে সমাহিত করেছি: টেবিলের মধ্যে কলামের প্রস্থ দুটি পৃথক ফ্রেমে ইত্যাদির মধ্যে সিঙ্ক করছি

আমি যে ডজন ডজন পদ্ধতি ব্যবহার করে দেখেছি তার মধ্যে কেবলমাত্র আমি খুঁজে পেয়েছি যে নির্ভরযোগ্যতার সাথে কাজ করে আপনাকে শিরোনাম টেবিলের সাথে একই প্রস্থের স্ক্রলিং বটম টেবিল রাখতে দেয়।

আমি এখানে এটি কীভাবে করেছি, প্রথমে আমি এই ফাংশনটি তৈরি করতে উপরের jsfizz এর উপর উন্নতি করেছি, যা উভয় ক্ষেত্রেই কাজ করে tdএবং th(যদি thতাদের শিরোনাম সারিগুলির স্টাইলিংয়ের জন্য ব্যবহার করা অন্যদের ট্রিপ করে তোলে )।

var setHeaderTableWidth= function (headertableid,basetableid) {
            $("#"+headertableid).width($("#"+basetableid).width());
            $("#"+headertableid+" tr th").each(function (i) {
                $(this).width($($("#"+basetableid+" tr:first td")[i]).width());
            });
            $("#" + headertableid + " tr td").each(function (i) {
                $(this).width($($("#" + basetableid + " tr:first td")[i]).width());
            });
        }

এর পরে, আপনাকে দুটি টেবিল তৈরি করতে হবে, নোট শিরোনাম টেবিলের TDস্ক্রোলবারের জন্য উপরের টেবিলের জন্য আরও একটি ঘর থাকতে হবে, যেমন:

 <table id="headertable1" class="input-cells table-striped">
        <thead>
            <tr style="background-color:darkgray;color:white;"><th>header1</th><th>header2</th><th>header3</th><th>header4</th><th>header5</th><th>header6</th><th></th></tr>
        </thead>
     </table>
    <div id="resizeToBottom" style="overflow-y:scroll;overflow-x:hidden;">
        <table id="basetable1" class="input-cells table-striped">
            <tbody >
                <tr>
                    <td>testdata</td>
                    <td>2</td>
                    <td>3</td>
                    <td>4</span></td>
                    <td>55555555555555</td>
                    <td>test</td></tr>
            </tbody>
        </table>
    </div>

তারপরে এমন কিছু করুন:

        setHeaderTableWidth('headertable1', 'basetable1');
        $(window).resize(function () {
            setHeaderTableWidth('headertable1', 'basetable1');
        });

স্ট্যাক ওভারফ্লোতে এটিই আমি একমাত্র সমাধান পেয়েছি যা পোস্ট করা অনেক অনুরূপ প্রশ্নের বাইরে কাজ করে, যা আমার সমস্ত ক্ষেত্রে কাজ করে।

উদাহরণস্বরূপ, আমি jQuery স্টিকিটিবেবল প্লাগইন চেষ্টা করেছি যা ডুরান্ডাল নিয়ে কাজ করে না এবং গুগল কোড প্রকল্পটি এখানে https://code.google.com/p/js-scrol-table-header/issues/detail?id=2

সারণীগুলির ক্লোনিং জড়িত অন্যান্য সমাধানগুলির মধ্যে খারাপ পারফরম্যান্স রয়েছে, বা স্তন্যপান করা এবং সব ক্ষেত্রেই কাজ করে না।

এই অত্যধিক জটিল সমাধানের প্রয়োজন নেই। কেবল নীচের উদাহরণগুলির মতো দুটি টেবিল তৈরি করুন এবং সেট হেইডারটেবলভিড্থ ফাংশনটি এখানে বর্ণিত এবং বুম হিসাবে কল করুন , আপনি হয়ে গেছেন ।

যদি এটি আপনার পক্ষে কাজ করে না, আপনি সম্ভবত আপনার সিএসএস বক্স আকারের সম্পত্তি নিয়ে খেলছেন এবং আপনাকে এটি সঠিকভাবে সেট করা দরকার। দুর্ঘটনাক্রমে আপনার সিএসএস বিষয়বস্তু আঁকানো সহজ। এমন অনেকগুলি বিষয় রয়েছে যা ভুল হতে পারে, তাই সে সম্পর্কে সচেতন / সাবধান থাকুন। এই পদ্ধতির আমার জন্য কাজ করে


0

এখানে এমন একটি সমাধান রয়েছে যা আমরা শেষ করে দিয়েছি (ইন্টারনেট এক্সপ্লোরারের কিছু প্রান্তের কেস এবং পুরানো সংস্করণগুলি মোকাবেলা করার জন্য, আমরা শেষ পর্যন্ত স্ক্রোলের শিরোনাম বারটিও বিবর্ণ করেছি এবং স্ক্রোলিং শেষ হয়ে গেলে এটি আবার ফিকে হয়ে গেলাম, তবে ফায়ারফক্স এবং ওয়েবকিট ব্রাউজারগুলিতে এই সমাধানটি কেবল কাজ করে It এটি ধরে নেয় সীমান্ত-পতন: পতন।

এই সমাধানের মূলটি হ'ল একবার আপনি সীমান্ত-পতন প্রয়োগ করলে , সিএসএস শিরোনামে কাজকে রূপান্তরিত করে, তাই এটি স্ক্রোল ইভেন্টগুলিকে বিরত রাখা এবং রূপান্তরটি সঠিকভাবে সেট করার বিষয় মাত্র। আপনার কোনও কিছুর নকল করার দরকার নেই। ব্রাউজারে এই আচরণটি যথাযথভাবে প্রয়োগ করা হচ্ছে, এর চেয়ে কম হালকা ওজনের সমাধান কল্পনা করা শক্ত।

জেএসফিডাল: http://jsfiddle.net/podPress/tH9VU/2/

এটি একটি সাধারণ জিকুয়েরি প্লাগইন হিসাবে প্রয়োগ করা হয়েছে। আপনি কেবল the ('থাড') এর মতো কল দিয়ে আপনার থ্যাডকে স্টিকি করেন stick স্টিকি (), এবং তারা চারদিকে ঝুলবে। এটি কোনও পৃষ্ঠায় একাধিক টেবিলের জন্য এবং বড় বড় টেবিলগুলির অর্ধেক নীচে মাথা বিভাগের জন্য কাজ করে।

$.fn.sticky = function(){
    $(this).each( function(){
        var thead = $(this),
            tbody = thead.next('tbody');

        updateHeaderPosition();

        function updateHeaderPosition(){
            if(
                thead.offset().top < $(document).scrollTop()
                && tbody.offset().top + tbody.height() > $(document).scrollTop()
            ){
                var tr = tbody.find('tr').last(),
                    y = tr.offset().top - thead.height() < $(document).scrollTop()
                        ? tr.offset().top - thead.height() - thead.offset().top
                        : $(document).scrollTop() - thead.offset().top;

                thead.find('th').css({
                    'z-index': 100,
                    'transform': 'translateY(' + y + 'px)',
                    '-webkit-transform': 'translateY(' + y + 'px)'
                });
            } else {
                thead.find('th').css({
                    'transform': 'none',
                    '-webkit-transform': 'none'
                });
            }
        }

        // See http://www.quirksmode.org/dom/events/scroll.html
        $(window).on('scroll', updateHeaderPosition);
    });
}

$('thead').sticky();

ভাল সমাধান তবে আপনি কীভাবে কলামগুলির মধ্যে কলাম সীমানা অন্তর্ভুক্ত করবেন (উভয় স্থির শিরোনামে, টিডি ডেটা অনুসারে)?
ব্যবহারকারী5249203

আমি নিশ্চিত না যে আমি আপনার সমস্যাটি বুঝতে পেরেছি। সীমানা-বিপর্যয় আপনাকে সীমানা, মার্জিন ইত্যাদি ব্যবহার থেকে বিরত রাখে না, এটি কেবল ইয়ারের ভুডু টেবিলের মেট্রিকগুলি সরিয়ে দেয়।
পদ্দপদর

1
যোগ border: 2px solid red;করুন th, স্ক্রোল করুন এবং আপনি সমস্যাটি দেখতে পাবেন। আমি এই আরও বেসিক সমাধানটি নিজেই নিয়ে এসেছি: jsfiddle.net/x6pLcor9/19
calandoa

টিডি তে একই মাত্রিক সীমানা যুক্ত করুন এবং কোনও সমস্যা নেই। আমি আপনার বক্তব্য দেখতে পাচ্ছি না। আপনার সংস্করণটি অনেক ক্লিনার এবং jQuery ব্যবহার করে না তাই আমি অবশ্যই আজকের মতো আরও কিছু নিয়ে যাব। (যদিও, খোলামেলাভাবে, আমি মনে করি না যে আমি আজ কোনও টেবিল ব্যবহার করব))
পডপারসন

0

ম্যাক্সিমিলিয়ান হিলস পোস্ট করা একটিটির উন্নত উত্তর এখানে ।

ইন্টারনেট এক্সপ্লোরার 11 এ কোনও ঝাঁকুনি না দিয়ে কাজ করে:

var headerCells = tableWrap.querySelectorAll("thead td");
for (var i = 0; i < headerCells.length; i++) {
    var headerCell = headerCells[i];
    headerCell.style.backgroundColor = "silver";
}
var lastSTop = tableWrap.scrollTop;
tableWrap.addEventListener("scroll", function () {
    var stop = this.scrollTop;
    if (stop < lastSTop) {
        // Resetting the transform for the scrolling up to hide the headers
        for (var i = 0; i < headerCells.length; i++) {
            headerCells[i].style.transitionDelay = "0s";
            headerCells[i].style.transform = "";
        }
    }
    lastSTop = stop;
    var translate = "translate(0," + stop + "px)";
    for (var i = 0; i < headerCells.length; i++) {
        headerCells[i].style.transitionDelay = "0.25s";
        headerCells[i].style.transform = translate;
    }
});

0

আমি ফিক্সড টেবিল শিরোনাম এবং কলামগুলি সহ একটি ভাল ফর্ম্যাট এইচটিএমএল টেবিলকে স্ক্রোলযোগ্য টেবিলে রূপান্তর করার জন্য একটি সাধারণ হালকা-ওজনের jQuery প্লাগ-ইন তৈরি করেছি।

প্লাগইনটি স্ক্রোলযোগ্য বিভাগের সাথে স্থির অংশে পিক্সেল থেকে পিক্সেল পজিশনের সাথে মেলে ভাল কাজ করে। অতিরিক্তভাবে, আপনি অনুভূমিকভাবে স্ক্রোল করার সময় সবসময় দেখা যাবে এমন কলামগুলির সংখ্যাও হিমায়িত করতে পারেন।

ডেমো এবং ডকুমেন্টেশন: http://meetselva.github.io/fixed-table-rows-cols/

গিটহাবের সংগ্রহশালা: https://github.com/meetselva/fixed-table-rows-cols

নীচে একটি নির্দিষ্ট শিরোনাম সহ একটি সাধারণ টেবিলের ব্যবহার রয়েছে,

$(<table selector>).fxdHdrCol({
    width:     "100%",
    height:    200,
    colModal: [{width: 30, align: 'center'},
               {width: 70, align: 'center'}, 
               {width: 200, align: 'left'}, 
               {width: 100, align: 'center'}, 
               {width: 70, align: 'center'}, 
               {width: 250, align: 'center'}
              ]
});

কি "একটি ভাল এইচটিএমএল সারণী" ?
পিটার মর্টেনসেন

@ পিটারমোরটেনসেন "ভাল ফর্ম্যাট এইচটিএমএল" হওয়া উচিত ছিল। সম্পাদিত, ধন্যবাদ
সেলককুমার আরুমুগাম

0
<html>
<head>
    <script src="//cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js"></script>
    <script>
        function stickyTableHead (tableID) {
            var $tmain = $(tableID);
            var $tScroll = $tmain.children("thead")
                .clone()
                .wrapAll('<table id="tScroll" />')
                .parent()
                .addClass($(tableID).attr("class"))
                .css("position", "fixed")
                .css("top", "0")
                .css("display", "none")
                .prependTo("#tMain");

            var pos = $tmain.offset().top + $tmain.find(">thead").height();


            $(document).scroll(function () {
                var dataScroll = $tScroll.data("scroll");
                dataScroll = dataScroll || false;
                if ($(this).scrollTop() >= pos) {
                    if (!dataScroll) {
                        $tScroll
                            .data("scroll", true)
                            .show()
                            .find("th").each(function () {
                                $(this).width($tmain.find(">thead>tr>th").eq($(this).index()).width());
                            });
                    }
                } else {
                    if (dataScroll) {
                        $tScroll
                            .data("scroll", false)
                            .hide()
                        ;
                    }
                }
            });
        }

        $(document).ready(function () {
            stickyTableHead('#tMain');
        });
    </script>
</head>

<body>
    gfgfdgsfgfdgfds<br/>
    gfgfdgsfgfdgfds<br/>
    gfgfdgsfgfdgfds<br/>
    gfgfdgsfgfdgfds<br/>
    gfgfdgsfgfdgfds<br/>
    gfgfdgsfgfdgfds<br/>

    <table id="tMain" >
        <thead>
        <tr>
            <th>1</th> <th>2</th><th>3</th> <th>4</th><th>5</th> <th>6</th><th>7</th> <th>8</th>

        </tr>
        </thead>
        <tbody>
            <tr><td>11111111111111111111111111111111111111111111111111111111</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
            <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5555555</td><td>66666666666</td><td>77777777777</td><td>8888888888888888</td></tr>
        </tbody>
    </table>
</body>
</html>

0

@ ড্যানিয়েল ওয়াল্ট্রিপ উত্তরের জন্য অতিরিক্ত। টেবিলটির সাথে position: relativeকাজ করার জন্য ডিভের সাথে সংযুক্ত করা দরকারposition:sticky । সুতরাং আমি আমার নমুনা কোড এখানে পোস্ট করতে চাই।

সিএসএস

/* Set table width/height as you want.*/
div.freeze-header {
  position: relative;
  max-height: 150px;
  max-width: 400px;
  overflow:auto;
}

/* Use position:sticky to freeze header on top*/
div.freeze-header > table > thead > tr > th {
  position: sticky;
  top: 0;
  background-color:yellow;
}

/* below is just table style decoration.*/
div.freeze-header > table {
  border-collapse: collapse;
}

div.freeze-header > table td {
  border: 1px solid black;
}

এইচটিএমএল

<html>
<body>
  <div>
   other contents ...
  </div>
  <div>
   other contents ...
  </div>
  <div>
   other contents ...
  </div>

  <div class="freeze-header">
    <table>
       <thead>
         <tr>
           <th> header 1 </th>
           <th> header 2 </th>
           <th> header 3 </th>
           <th> header 4 </th>
           <th> header 5 </th>
           <th> header 6 </th>
           <th> header 7 </th>
           <th> header 8 </th>
           <th> header 9 </th>
           <th> header 10 </th>
           <th> header 11 </th>
           <th> header 12 </th>
           <th> header 13 </th>
           <th> header 14 </th>
           <th> header 15 </th>
          </tr>
       </thead>
       <tbody>
         <tr>
           <td> data 1 </td>
           <td> data 2 </td>
           <td> data 3 </td>
           <td> data 4 </td>
           <td> data 5 </td>
           <td> data 6 </td>
           <td> data 7 </td>
           <td> data 8 </td>
           <td> data 9 </td>
           <td> data 10 </td>
           <td> data 11 </td>
           <td> data 12 </td>
           <td> data 13 </td>
           <td> data 14 </td>
           <td> data 15 </td>
          </tr>         
         <tr>
           <td> data 1 </td>
           <td> data 2 </td>
           <td> data 3 </td>
           <td> data 4 </td>
           <td> data 5 </td>
           <td> data 6 </td>
           <td> data 7 </td>
           <td> data 8 </td>
           <td> data 9 </td>
           <td> data 10 </td>
           <td> data 11 </td>
           <td> data 12 </td>
           <td> data 13 </td>
           <td> data 14 </td>
           <td> data 15 </td>
          </tr>         
         <tr>
           <td> data 1 </td>
           <td> data 2 </td>
           <td> data 3 </td>
           <td> data 4 </td>
           <td> data 5 </td>
           <td> data 6 </td>
           <td> data 7 </td>
           <td> data 8 </td>
           <td> data 9 </td>
           <td> data 10 </td>
           <td> data 11 </td>
           <td> data 12 </td>
           <td> data 13 </td>
           <td> data 14 </td>
           <td> data 15 </td>
          </tr>         
         <tr>
           <td> data 1 </td>
           <td> data 2 </td>
           <td> data 3 </td>
           <td> data 4 </td>
           <td> data 5 </td>
           <td> data 6 </td>
           <td> data 7 </td>
           <td> data 8 </td>
           <td> data 9 </td>
           <td> data 10 </td>
           <td> data 11 </td>
           <td> data 12 </td>
           <td> data 13 </td>
           <td> data 14 </td>
           <td> data 15 </td>
          </tr>         
         <tr>
           <td> data 1 </td>
           <td> data 2 </td>
           <td> data 3 </td>
           <td> data 4 </td>
           <td> data 5 </td>
           <td> data 6 </td>
           <td> data 7 </td>
           <td> data 8 </td>
           <td> data 9 </td>
           <td> data 10 </td>
           <td> data 11 </td>
           <td> data 12 </td>
           <td> data 13 </td>
           <td> data 14 </td>
           <td> data 15 </td>
          </tr>         
         <tr>
           <td> data 1 </td>
           <td> data 2 </td>
           <td> data 3 </td>
           <td> data 4 </td>
           <td> data 5 </td>
           <td> data 6 </td>
           <td> data 7 </td>
           <td> data 8 </td>
           <td> data 9 </td>
           <td> data 10 </td>
           <td> data 11 </td>
           <td> data 12 </td>
           <td> data 13 </td>
           <td> data 14 </td>
           <td> data 15 </td>
          </tr>         
         <tr>
           <td> data 1 </td>
           <td> data 2 </td>
           <td> data 3 </td>
           <td> data 4 </td>
           <td> data 5 </td>
           <td> data 6 </td>
           <td> data 7 </td>
           <td> data 8 </td>
           <td> data 9 </td>
           <td> data 10 </td>
           <td> data 11 </td>
           <td> data 12 </td>
           <td> data 13 </td>
           <td> data 14 </td>
           <td> data 15 </td>
          </tr>         
         <tr>
           <td> data 1 </td>
           <td> data 2 </td>
           <td> data 3 </td>
           <td> data 4 </td>
           <td> data 5 </td>
           <td> data 6 </td>
           <td> data 7 </td>
           <td> data 8 </td>
           <td> data 9 </td>
           <td> data 10 </td>
           <td> data 11 </td>
           <td> data 12 </td>
           <td> data 13 </td>
           <td> data 14 </td>
           <td> data 15 </td>
          </tr>         
       </tbody>
    </table>
  </div>
</body>
</html>

ডেমো

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.