আমি কীভাবে একটি স্থির / হিমায়িত বাম কলাম এবং একটি স্ক্রোলযোগ্য বডি সহ এইচটিএমএল টেবিল তৈরি করব?


266

আমার একটি সহজ সমাধান দরকার। আমি জানি এটি অন্যান্য কয়েকটি প্রশ্নের মতো, যেমন:

তবে আমার জমে থাকা জন্য কেবল একটি একক বাম কলাম দরকার এবং আমি একটি সহজ এবং স্ক্রিপ্ট-কম সমাধান পছন্দ করব।


একটি খুব ভাল বাস্তবায়ন (আমার মতে) এখানে পোস্ট করা হয়েছে: stackoverflow.com/a/57524791
জন সিজে

একাধিক কলাম হিমায়িত করে একাধিক সারি নিথর করার জন্য দেখুন স্ট্যাকওভারফ্লো
সিকিউশনস /

উত্তর:


379

আপনি যদি এমন কোনও টেবিল চান যেখানে কেবল কলামগুলি অনুভূমিকভাবে স্ক্রোল করে, আপনি position: absoluteপ্রথম কলামটি করতে পারেন (এবং এর প্রস্থটি স্পষ্টভাবে নির্দিষ্ট করতে পারেন ), এবং তারপরে একটি overflow-x: scroll ব্লকে পুরো টেবিলটি মোড়ানো করতে পারেন । আই 7 এ চেষ্টা করে বিরক্ত করবেন না ...

প্রাসঙ্গিক এইচটিএমএল এবং সিএসএস:

table {
  border-collapse: separate;
  border-spacing: 0;
  border-top: 1px solid grey;
}

td, th {
  margin: 0;
  border: 1px solid grey;
  white-space: nowrap;
  border-top-width: 0px;
}

div {
  width: 500px;
  overflow-x: scroll;
  margin-left: 5em;
  overflow-y: visible;
  padding: 0;
}

.headcol {
  position: absolute;
  width: 5em;
  left: 0;
  top: auto;
  border-top-width: 1px;
  /*only relevant for first row*/
  margin-top: -1px;
  /*compensate for top border*/
}

.headcol:before {
  content: 'Row ';
}

.long {
  background: yellow;
  letter-spacing: 1em;
}
<div>
<table>
        <tr><th class="headcol">1</th><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td></tr>
        <tr><th class="headcol">2</th><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td></tr>
        <tr><th class="headcol">3</th><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td></tr>
        <tr><th class="headcol">4</th><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td></tr>
        <tr><th class="headcol">5</th><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td></tr>
        <tr><th class="headcol">6</th><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td></tr>
</table>
</div>

বেহালা


31
এটি যথেচ্ছ লেবেলগুলি পরিচালনা করে না। আপনার কাছে খুব সম্ভবত সংক্ষিপ্ত লেবেল না থাকলে আপনি এটি পাবেন: jsfiddle.net/YMvk9/3724
आरोনলএস

8
@ অ্যারোনলএস: হ্যাঁ, আপনাকে প্রথম কলামটির প্রস্থ নির্দিষ্ট করতে হবে। আপনার যদি স্বেচ্ছাসেবী দৈর্ঘ্যের লেবেলগুলির সাথে ডিল করতে হয় তবে আপনি text-overflow: ellipsisসেগুলি পরিষ্কারভাবে প্রদর্শন করতে ব্যবহার করতে পারেন ।
ইমন নের্বোন

14
@ ইমননার্বোন এলিপিসিসটি আমার বিবেচনার একটি ভাল বিকল্প ছিল। আর একটি বিকল্প ছিল এরকম কিছু করা। প্রথম কলামটি লুকানো পাশাপাশি স্থির করা হচ্ছে। দ্বিতীয় লুকানো কলামটি সারিগুলির সিঙ্কের উচ্চতা নিশ্চিত করে। কেবলমাত্র যদি আপনার নির্দিষ্ট প্রস্থের কলাম থাকে তবেই কাজ করে: jsfiddle.net/abkNM/2224
आरोনএলএস

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

4
এখানে অপ্রয়োজনীয় কোডবিহীন
kashesandr

26

এটি একটি আকর্ষণীয় jQuery প্লাগইন যা স্থির শিরোনাম এবং / অথবা কলাম তৈরি করে । ডেমো পৃষ্ঠায় এটি কার্যকর হয় তা দেখার জন্য স্থির কলামটি টোগল করুন।


1
এটি সারিগুলির জন্য, কলামগুলির জন্য নয়
Fortega

4
@ ফোর্তেগা: এটি যদি আপনি স্থির সম্পত্তি কলাম সেট করে থাকেন তবে এটি কলামগুলির জন্যও । আপনি যাচাই করতে পারেন একটি ডেমো আছে।
মার্কোস ফ্রেগাকাকিস

আহ ঠিক আছে, এটা পরিষ্কার ছিল না। গত সপ্তাহে ডেমোটি কাজ করছিল না। তবে তা এখন।
ফোর্টেগা

1
@ থমাস ১70০৩ যদি আপনার প্লাগইনটি jQuery থেকে মাইগ্রেট প্লাগইন ব্যবহার করা উচিত তবে যদি প্লাগইনটি 1.9.x -> jquery.com/download
321X

4
এই প্লাগইনটি বড় টেবিলগুলির সাথে সত্যই ধীর।
আরপুন

26

আপনি stickyঅবস্থান ব্যবহার করতে পারেন । এখানে একটি নমুনা কোড। এটি এইচটিএমএল / সিএসএস সমাধান। কোন জেএস প্রয়োজন হয় না।

.view {
  margin: auto;
  width: 600px;
}

.wrapper {
  position: relative;
  overflow: auto;
  border: 1px solid black;
  white-space: nowrap;
}

.sticky-col {
  position: sticky;
  position: -webkit-sticky;
  background-color: white;
}

.first-col {
  width: 100px;
  min-width: 100px;
  max-width: 100px;
  left: 0px;
}

.second-col {
  width: 150px;
  min-width: 150px;
  max-width: 150px;
  left: 100px;
}
<div class="view">
  <div class="wrapper">
    <table class="table">
      <thead>
        <tr>
          <th class="sticky-col first-col">Number</th>
          <th class="sticky-col second-col">First Name</th>
          <th>Last Name</th>
          <th>Employer</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td class="sticky-col first-col">1</td>
          <td class="sticky-col second-col">Mark</td>
          <td>Ham</td>
          <td>Micro</td>
        </tr>
        <tr>
          <td class="sticky-col first-col">2</td>
          <td class="sticky-col second-col">Jacob</td>
          <td>Smith</td>
          <td>Adob Adob Adob AdobAdob Adob Adob Adob Adob</td>
        </tr>
        <tr>
          <td class="sticky-col first-col">3</td>
          <td class="sticky-col second-col">Larry</td>
          <td>Wen</td>
          <td>Goog Goog Goog GoogGoog Goog Goog Goog Goog Goog</td>
        </tr>
      </tbody>
    </table>
  </div>
</div>

বুটপ্লি কোড: https://www.bootply.com/g8pfBXOcY9


1
অবশ্যই, এটি করার সবচেয়ে সহজ এবং সর্বাধিক যৌক্তিক উপায়, আমি কেবল এটি করেছি: $ ("টেবিল তম: প্রথম")। সিএসএস ("অবস্থান", "স্টিকি")। সিএসএস ("বাম", "0 পিক্স") .css ("ব্যাকগ্রাউন্ড-কালার", $ ("বডি")। সিএসএস ("ব্যাকগ্রাউন্ড-কালার")); এবং প্রতিটি সারির জন্য লুপ এবং এটি ছিল!
দেজন ডোজেট

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। কোনও অবস্থান নেই: পরম হ্যাকিং এবং টেবিল কক্ষের আকারগুলি স্থির নয়।
ফেলিক্স লেমকে

শুধুমাত্র 1 টি কলাম স্টিকি করা সম্ভব? আমি আপনার লিঙ্কটি চেষ্টা করছি কিন্তু আমি এটি তৈরি করতে অক্ষম? আমি যেমন নিয়োগকর্তা কলামকে স্টিকি করতে চাই
মুনিম হাবিব

@MuneemHabib আপনি স্টিকি করা একমাত্র প্রথম কলামটি চান, দেখতে এই
সার্কিট ব্রেকার

19

স্থির প্রস্থের বাম কলামের ক্ষেত্রে ইমন নের্বোনই সেরা সমাধান সরবরাহ করে ।

পরিবর্তনশীল প্রস্থের বাম কলামের ক্ষেত্রে আমি যে সেরা সমাধানটি পেয়েছি তা হ'ল দুটি অভিন্ন টেবিল তৈরি করা এবং একে অপরের উপরে চাপানো। ডেমো: http://jsfiddle.net/xG5QH/6/

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
/* important styles */

.container {
   /* Attach fixed-th-table to this container,
      in order to layout fixed-th-table
      in the same way as scolled-td-table" */
   position: relative;

   /* Truncate fixed-th-table */
   overflow: hidden;
}

.fixed-th-table-wrapper td,
.fixed-th-table-wrapper th,
.scrolled-td-table-wrapper td,
.scrolled-td-table-wrapper th {
   /* Set background to non-transparent color
      because two tables are one above another.
    */
   background: white;
}
.fixed-th-table-wrapper {
   /* Make table out of flow */
   position: absolute;
}
.fixed-th-table-wrapper th {
    /* Place fixed-th-table th-cells above 
       scrolled-td-table td-cells.
     */
    position: relative;
    z-index: 1;
}
.scrolled-td-table-wrapper td {
    /* Place scrolled-td-table td-cells
       above fixed-th-table.
     */
    position: relative;
}
.scrolled-td-table-wrapper {
   /* Make horizonal scrollbar if needed */
   overflow-x: auto;
}


/* Simulating border-collapse: collapse,
   because fixed-th-table borders
   are below ".scrolling-td-wrapper table" borders
*/

table {
    border-spacing: 0;
}
td, th {
   border-style: solid;
   border-color: black;
   border-width: 1px 1px 0 0;
}
th:first-child {
   border-left-width: 1px;
}
tr:last-child td,
tr:last-child th {
   border-bottom-width: 1px;
}

/* Unimportant styles */

.container {
    width: 250px;
}
td, th {
   padding: 5px;
}
</style>
</head>

<body>
<div class="container">

<div class="fixed-th-table-wrapper">
<!-- fixed-th-table -->
<table>
    <tr>
         <th>aaaaaaa</th>
         <td>ccccccccccc asdsad asd as</td>
         <td>ccccccccccc asdsad asd as</td>
    </tr>
    <tr>
         <th>cccccccc</th>
         <td>xxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyy zzzzzzzzzzzzz</td>
         <td>xxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyy zzzzzzzzzzzzz</td>
    </tr>
</table>
</div>

<div class="scrolled-td-table-wrapper">
<!-- scrolled-td-table
     - same as fixed-th-table -->
<table>
    <tr>
         <th>aaaaaaa</th>
         <td>ccccccccccc asdsad asd as</td>
         <td>ccccccccccc asdsad asd as</td>
    </tr>
    <tr>
         <th>cccccccc</th>
         <td>xxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyy zzzzzzzzzzzzz</td>
         <td>xxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyy zzzzzzzzzzzzz</td>
    </tr>
</table>
</div>

</div>
</body>
</html>

1
+10 খুব চালাক। seperateবুটস্ট্যাপের নীচে সীমানা-পতন সেট করতে হয়েছিল, অন্য কোনও বুদ্ধিমান সীমানা ঘরগুলির সাথে ভাসমান নয়। এর পরে সীমান্ত পরিষ্কারের বিট প্রয়োজন।
প্যাট্রিক

খুব সুন্দর! ধন্যবাদ! আমি নিজের কারণে <<> ব্যবহার করিনি, কোন স্তম্ভটি ঠিক করা হবে তা নির্দেশ করার জন্য আমি একটি শ্রেণি ব্যবহার করেছি এবং ভাল পরিমাপের জন্য visibility: collapse; স্থির টেবিলটি থেকে আড়াল করার জন্য কলামগুলিতে একটি যুক্ত করেছি ( :not()সিএসএস নির্বাচককে পছন্দ করতে হবে ! )। আমি .clone()টেবিলে jQuery ব্যবহার করেছি , এটি একবার পিএইচপি + মাইএসকিউএল + এজ্যাক্স দ্বারা উত্পাদিত হয়ে, এবং এটি একটি পরিষ্কার আউট
পিটার

17

এফডব্লিউআইডাব্লু, এখানে একটি টেবিল যা মাথা এবং পাশের সাথে স্থির করে স্ক্রোলযোগ্য।

http://codepen.io/ajkochanowicz/pen/KHdih


1
শিরোনামের নীচে থাকা কোনও একটির শিরোনামের চেয়ে প্রশস্ত থাকলে এটি ভাল কাজ করে না। এরপরে শিরোনাম এবং কক্ষগুলির মধ্যে প্রান্তিককরণটি হারিয়ে যায়।

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

1
@ অ্যাডামগ্রান্ট এটি ভাল। সমস্ত কেস কভার করার জন্য কক্ষগুলির প্রস্থ অবশ্যই স্থির করতে হবে তবে আমি এটি
দিয়েই

@ ফ্লিপবেড: আপনার যাইহোক সেগুলির প্রস্থ ঠিক করা উচিত। আসল সমস্যাটি হ'ল উচ্চতাও স্থির। খুব খারাপ। পরিবর্তনশীল উচ্চতা সহ আমার একটি সমাধান দরকার।
স্টিফান স্টেইগার

14

একটু দেরি হলেও নিজের জন্য সমাধানের চেষ্টা করার সময় আমি এই থ্রেডটি পেরিয়ে গিয়েছিলাম। ধরে নিই যে আপনি আজকাল আধুনিক ব্রাউজারগুলি ব্যবহার করছেন, আমি প্রশস্ততা পূরণের গ্যারান্টি সাহায্য করতে সিএসএস ক্যালক () ব্যবহার করে একটি সমাধান নিয়ে এসেছি।

.table-fixed-left table,
.table-fixed-right table {
  border-collapse: collapse;
}
.table-fixed-right td,
.table-fixed-right th,
.table-fixed-left td,
.table-fixed-left th {
  border: 1px solid #ddd;
  padding: 5px 5px;
}
.table-fixed-left {
  width: 120px;
  float: left;
  position: fixed;
  overflow-x: scroll;
  white-space: nowrap;
  text-align: left;
  border: 1px solid #ddd;
  z-index: 2;
}
.table-fixed-right {
  width: calc(100% - 145px);
  right: 15px;
  position: fixed;
  overflow-x: scroll;
  border: 1px solid #ddd;
  white-space: nowrap;
}
.table-fixed-right td,
.table-fixed-right th {
  padding: 5px 10px;
}
<div class="table-fixed-left">
  <table>
    <tr>
      <th>Normal Header</th>
    </tr>
    <tr>
      <th>Header with extra line
        <br/>&nbsp;</th>
    </tr>
    <tr>
      <th>Normal Header</th>
    </tr>
    <tr>
      <th>Normal with extra line
        <br/>&nbsp;</th>
    </tr>
    <tr>
      <th>Normal Header</th>
    </tr>
    <tr>
      <th>Normal Header</th>
    </tr>
  </table>
</div>
<div class="table-fixed-right">
  <table>
    <tr>
      <th>Header</th>
      <th>Another header</th>
      <th>Header</th>
      <th>Header really really really really long</th>
    </tr>
    <tr>
      <td>Info Long</td>
      <td>Info
        <br/>with second line</td>
      <td>Info
        <br/>with second line</td>
      <td>Info Long</td>
    </tr>
    <tr>
      <td>Info Long</td>
      <td>Info Long</td>
      <td>Info Long</td>
      <td>Info Long</td>
    </tr>
    <tr>
      <td>Info
        <br/>with second line</td>
      <td>Info
        <br/>with second line</td>
      <td>Info
        <br/>with second line</td>
      <td>Info</td>
    </tr>
    <tr>
      <td>Info</td>
      <td>Info</td>
      <td>Info</td>
      <td>Info</td>
    </tr>
    <tr>
      <td>Info</td>
      <td>Info</td>
      <td>Info</td>
      <td>Info</td>
    </tr>
  </table>
</div>

আশা করি এটি কাউকে সাহায্য করবে!


হাই, উপরের কোডে কীভাবে টেবিলের প্রথম (স্থির / হিমায়িত) কলামটির প্রস্থ বাড়ানো যায়।
সিভা

সঙ্গে ধারণা কি <br/>&nbsp;মধ্যে <th>উপাদান?
সেরজিও

গৃহীত উত্তরের সাথে অনেকগুলি CSS সমস্যা ছড়িয়ে দেওয়ার পরে, দুটি টেবিলকে পৃথক করার এই সমাধানটি আরও ভাল সমাধান বলে মনে হচ্ছে
আয়শা

11

বাম কলামটি দিয়ে স্টাইল করুন position: fixed। (আপনি সম্ভবত এটি ব্যবহার করতে চান topএবং leftস্টাইলগুলি ঠিক কোথায় ঘটে তা নিয়ন্ত্রণ করতে চান ))


2
এটি তার সরলতায় উজ্জ্বল। পুরো পৃষ্ঠার যথাযথ উল্লম্ব স্ক্রোলিংয়ের অনুমতি দেওয়া কি সম্ভব?
অগসেমেক

হ্যাঁ; আপনার পুরো "টেবিল" অংশটি এড়ানো উচিত এবং কেবল দুটি ডিভ ব্যবহার করা উচিত, একটি বাম কলামের জন্য এবং একটি বাকী সামগ্রীর জন্য। বাম কলাম ডিভিও পায় position: fixedএবং স্থির থাকে, বাকী বিষয়বস্তু স্বাভাবিকভাবে কাজ করে (সম্ভবত একটি বাম মার্জিন সেট সহ এটি বাম কলামটি ওভারল্যাপ না করে)।
বিশৃঙ্খলা

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

11

2017 এর পরে প্রকাশিত বেশিরভাগ ব্রাউজারের জন্য:

আপনি ব্যবহার করতে পারেন position: stickyHttps://caniuse.com/#feat=css-sticky দেখুন ।

নির্দিষ্ট প্রস্থের কলামের প্রয়োজন নেই।

এটি কীভাবে কাজ করে তা দেখতে নীচের কোড স্নিপেটটি চালান।

.tscroll {
  width: 400px;
  overflow-x: scroll;
  margin-bottom: 10px;
  border: solid black 1px;
}

.tscroll table td:first-child {
  position: sticky;
  left: 0;
  background-color: #ddd;
}

.tscroll td, .tscroll th {
  border-bottom: dashed #888 1px;
}
<html>
<div class="tscroll">
  <table>
    <thead>
      <tr>
        <th></th>
        <th colspan="5">Heading 1</th>
        <th colspan="8">Heading 2</th>
        <th colspan="4">Heading 3</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>9:00</td>
        <td>AAA</td>
        <td>BBB</td>
        <td>CCC</td>
        <td>DDD</td>
        <td>EEE</td>
        <td>FFF</td>
        <td>GGG</td>
        <td>HHH</td>
        <td>III</td>
        <td>JJJ</td>
        <td>KKK</td>
        <td>LLL</td>
        <td>MMM</td>
        <td>NNN</td>
        <td>OOO</td>
        <td>PPP</td>
        <td>QQQ</td>
      </tr>
      <tr>
        <td>10:00</td>
        <td>AAA</td>
        <td>BBB</td>
        <td>CCC</td>
        <td>DDD</td>
        <td>EEE</td>
        <td>FFF</td>
        <td>GGG</td>
        <td>HHH</td>
        <td>III</td>
        <td>JJJ</td>
        <td>KKK</td>
        <td>LLL</td>
        <td>MMM</td>
        <td>NNN</td>
        <td>OOO</td>
        <td>PPP</td>
        <td>QQQ</td>
      </tr>
      <tr>
        <td>11:00</td>
        <td>AAA</td>
        <td>BBB</td>
        <td>CCC</td>
        <td>DDD</td>
        <td>EEE</td>
        <td>FFF</td>
        <td>GGG</td>
        <td>HHH</td>
        <td>III</td>
        <td>JJJ</td>
        <td>KKK</td>
        <td>LLL</td>
        <td>MMM</td>
        <td>NNN</td>
        <td>OOO</td>
        <td>PPP</td>
        <td>QQQ</td>
      </tr>
      <tr>
        <td>12:00</td>
        <td>AAA</td>
        <td>BBB</td>
        <td>CCC</td>
        <td>DDD</td>
        <td>EEE</td>
        <td>FFF</td>
        <td>GGG</td>
        <td>HHH</td>
        <td>III</td>
        <td>JJJ</td>
        <td>KKK</td>
        <td>LLL</td>
        <td>MMM</td>
        <td>NNN</td>
        <td>OOO</td>
        <td>PPP</td>
        <td>QQQ</td>
      </tr>
      <tr>
        <td>13:00</td>
        <td>AAA</td>
        <td>BBB</td>
        <td>CCC</td>
        <td>DDD</td>
        <td>EEE</td>
        <td>FFF</td>
        <td>GGG</td>
        <td>HHH</td>
        <td>III</td>
        <td>JJJ</td>
        <td>KKK</td>
        <td>LLL</td>
        <td>MMM</td>
        <td>NNN</td>
        <td>OOO</td>
        <td>PPP</td>
        <td>QQQ</td>
      </tr>
      <tr>
        <td>14:00</td>
        <td>AAA</td>
        <td>BBB</td>
        <td>CCC</td>
        <td>DDD</td>
        <td>EEE</td>
        <td>FFF</td>
        <td>GGG</td>
        <td>HHH</td>
        <td>III</td>
        <td>JJJ</td>
        <td>KKK</td>
        <td>LLL</td>
        <td>MMM</td>
        <td>NNN</td>
        <td>OOO</td>
        <td>PPP</td>
        <td>QQQ</td>
      </tr>
      <tr>
        <td>15:00</td>
        <td>AAA</td>
        <td>BBB</td>
        <td>CCC</td>
        <td>DDD</td>
        <td>EEE</td>
        <td>FFF</td>
        <td>GGG</td>
        <td>HHH</td>
        <td>III</td>
        <td>JJJ</td>
        <td>KKK</td>
        <td>LLL</td>
        <td>MMM</td>
        <td>NNN</td>
        <td>OOO</td>
        <td>PPP</td>
        <td>QQQ</td>
      </tr>
      <tr>
        <td>16:00</td>
        <td>AAA</td>
        <td>BBB</td>
        <td>CCC</td>
        <td>DDD</td>
        <td>EEE</td>
        <td>FFF</td>
        <td>GGG</td>
        <td>HHH</td>
        <td>III</td>
        <td>JJJ</td>
        <td>KKK</td>
        <td>LLL</td>
        <td>MMM</td>
        <td>NNN</td>
        <td>OOO</td>
        <td>PPP</td>
        <td>QQQ</td>
      </tr>
      <tr>
        <td>17:00</td>
        <td>AAA</td>
        <td>BBB</td>
        <td>CCC</td>
        <td>DDD</td>
        <td>EEE</td>
        <td>FFF</td>
        <td>GGG</td>
        <td>HHH</td>
        <td>III</td>
        <td>JJJ</td>
        <td>KKK</td>
        <td>LLL</td>
        <td>MMM</td>
        <td>NNN</td>
        <td>OOO</td>
        <td>PPP</td>
        <td>QQQ</td>
      </tr>
    </tbody>
    </table>
</div>


2
ইতিমধ্যে একটি উত্তর প্রস্তাব বিদ্যমান sticky, সুতরাং আর একটি প্রয়োজন নেই
Ason

1
@ এলজিসন আমি একমত নই, স্টিকি ব্যবহার করে আরও দুটি উত্তর ছিল were স্টিকি প্রয়োগের জন্য একজন বুটস্ট্র্যাপ সিএসএস ব্যবহার করছে। অন্য উত্তরটি প্রশ্নের সাথে সরাসরি সম্পর্কিত নয় এমন কোড সরবরাহ করে, ভুল, এবং স্টিকি কলামের জন্য একটি নির্দিষ্ট প্রস্থ ব্যবহার করে।
kojow7

1
একটি বুটস্ট্র্যাপ ব্যবহার করে এবং একটির ব্যবহারের স্থির প্রস্থ, position: stickyতার ব্যবহারে কোনও পরিবর্তন আনবে না, তাই এটি ব্যবহার করে ইতিমধ্যে প্রদর্শিত হয়েছে।
আসন

8

আমি আরমন নারবোন এর উত্তর নিয়েছি এবং এটি পুরো টুকরো টেবিলগুলির সাথে কাজ করার জন্য সম্পাদনা করেছি।

http://jsfiddle.net/DYgD6/6/

<!DOCTYPE html>
<html><head><title>testdoc</title>
<style type="text/css">
            body {
        font:16px Calibri;
    }
    table {
        border-collapse:separate;
        border-top: 3px solid grey;
    }
    td {
        margin:0;
        border:3px solid grey;
        border-top-width:0px;
        white-space:nowrap;
    }
    #outerdiv {
        position: absolute;
        top: 0;
        left: 0;
        right: 5em;
    }
    #innerdiv {
        width: 100%;
        overflow-x:scroll;
        margin-left: 5em;
        overflow-y:visible;
        padding-bottom:1px;
    }
    .headcol {
        position:absolute;
        width:5em;
        left:0;
        top:auto;
        border-right: 0px none black;
        border-top-width:3px;
        /*only relevant for first row*/
        margin-top:-3px;
        /*compensate for top border*/
    }
    .headcol:before {
        content:'Row ';
    }
    .long {
        background:yellow;
        letter-spacing:1em;
    }
</style></head><body>
  <div id="outerdiv">
   <div id="innerdiv">
    <table>
        <tr>
            <td class="headcol">1</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
        </tr>
        <tr>
            <td class="headcol">2</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
        </tr>
        <tr>
            <td class="headcol">3</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
        </tr>
        <tr>
            <td class="headcol">4</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
        </tr>
        <tr>
            <td class="headcol">5</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
        </tr>
        <tr>
            <td class="headcol">6</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
        </tr>
        <tr>
            <td class="headcol">7</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
        </tr>
        <tr>
            <td class="headcol">8</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
        </tr>
        <tr>
            <td class="headcol">9</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
            <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
        </tr>
    </table>
</div></div>
</body></html>

স্থির কলামের প্রস্থের এখনও একটি সেট মান হওয়া দরকার।


7

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

.wrapper {
    overflow-x: scroll;
}

td {
    min-width: 50px;
}

.fixed {
    position: absolute;
    background: #aaa;
}
<div class="content" style="width: 400px">

  <div class="wrapper" style="margin-left: 100px">

      <table>
        <thead>
          <tr>
            <th class="fixed" style="left: 0px">aaa</th>
            <th class="fixed" style="left: 50px">aaa2</th>
            <th>a</th>
            <th>b</th>
            <th>c</th>
            <th>d</th>
            <th>e</th>
            <th>f</th>
            <th>a</th>
            <th>b</th>
            <th>c</th>
            <th>d</th>
            <th>e</th>
            <th>f</th>
            <th>a</th>
            <th>b</th>
            <th>c</th>
            <th>d</th>
            <th>e</th>
            <th>f</th>
            <th>a</th>
            <th>b</th>
            <th>c</th>
            <th>d</th>
            <th>e</th>
            <th>f</th>        
          </tr>
        </thead>
        <tbody>
          <tr>
            <td class="fixed" style="left: 0px">aaa</td>
            <td class="fixed" style="left: 50px">aaa2</td>
            <td>a</td>
            <td>b</td>
            <td>c</td>
            <td>d</td>
            <td>e</td>
            <td>f</td>
            <td>a</td>
            <td>b</td>
            <td>c</td>
            <td>d</td>
            <td>e</td>
            <td>f</td>
            <td>a</td>
            <td>b</td>
            <td>c</td>
            <td>d</td>
            <td>e</td>
            <td>f</td>
            <td>a</td>
            <td>b</td>
            <td>c</td>
            <td>d</td>
            <td>e</td>
            <td>f</td>
          </tr>
          <tr>
            <td class="fixed" style="left: 0">bbb</td>
            <td class="fixed" style="left: 50px">bbb2</td>
            <td>a</td>
            <td>b</td>
            <td>c</td>
            <td>d</td>
            <td>e</td>
            <td>f</td>
            <td>a</td>
            <td>b</td>
            <td>c</td>
            <td>d</td>
            <td>e</td>
            <td>f</td>
            <td>a</td>
            <td>b</td>
            <td>c</td>
            <td>d</td>
            <td>e</td>
            <td>f</td>
            <td>a</td>
            <td>b</td>
            <td>c</td>
            <td>d</td>
            <td>e</td>
            <td>f</td>
          </tr>
        </tbody>
      </table>

  </div>

</div>


2
এটি দুর্দান্ত কাজ করে তবে আমি কীভাবে টেবিলের জন্য একটি স্থির উচ্চতা নির্ধারণ করতে পারি?
জুয়ান ক্যামিলো মেজিয়া

3

আপনি যদি ওয়েবডিপপার নরকে থাকেন এবং আই 6-র জন্য এই কাজটি করা প্রয়োজন, আমি এখানে ব্যবহার করেছি একটি নমুনা কোড:

<html>
<head>
<style type="text/css">
.fixme {
    position: relative;
    left: expression( ( 20 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
    background-color: #FFFFFF;
}
</style>
</head>
<body>
<table width="1500px" border="2">
    <tr>
        <td class="fixme" style="width: 200px;">loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet</td>
        <td>loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
        <td>loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
        <td>loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
    </tr>
    <tr>
        <td class="fixme" style="width: 200px;">loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
        <td>loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
        <td>loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
        <td>loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
    </tr>
    <tr>
        <td class="fixme" style="width: 200px;">loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
        <td>loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
        <td>loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
        <td>loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
    </tr>
    <tr>
        <td class="fixme" style="width: 200px;">loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
        <td>loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
        <td>loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
        <td>loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet loremp ispum dolor sit amet </td>
    </tr>
</table>
</body>
</html>

এটি সম্ভবত কেবলমাত্র আইআই 6 এর জন্য কাজ করবে, সুতরাং সিএসএসের জন্য শর্তসাপেক্ষ মন্তব্য ব্যবহার করুন।


2

কোনও প্লাগইন যুক্ত করার দরকার নেই, সিএসএস এই কাজটি করতে পারে !!!

ধারণাটি হ'ল প্রতিটি কলামের সমস্ত প্রথম কক্ষের অবস্থানকে পরম করুন এবং প্রস্থকে স্থির করে দেওয়া উচিত। উদা:

max-width: 125px;
min-width: 125px;
position: absolute;

এটি প্রথম কলামের অধীনে কিছু কলামের কিছু অংশ আড়াল করে, তাই প্রথম কলামের মতো প্রস্থের সাথে একটি খালি দ্বিতীয় কলাম (দ্বিতীয় খালি টিডি যুক্ত করুন) যুক্ত করুন।

আমি পরীক্ষা করেছি এবং এটি ক্রোম এবং ফায়ারফক্সে কাজ করে।


আমি এটি চেষ্টা করেছি এবং এটি আইই 8 তেও কাজ করে। তবে এটি থাকার পরে আমি কীভাবে প্রথম সারিতে স্থির করতে পারি। আমি এটি চেষ্টা করেছিলাম তবে আমি বাম কলামটি হিমায়িত করার জন্য নিখুঁত সেট করেছি, প্রথম সারিটি হিমায়িত করার সময় এটি প্রভাবিত করে। দয়া করে সহায়তা করুন ..... আমি যেমন লক্ষ্য করেছি, হয় আমরা প্রথম সারিকে হিমায়িত করি বা প্রথম কলাম হিমায়িত করি, তবে উভয়কে হিমায়িত করা কার্যকর হয় না .....
আইজাক

আপনি একটি উদাহরণ প্রদান করতে পারেন?
কাশেমান্ডার

2

ইমন নের্বোন, আমি আপনার কোডে কিছু সিএসএস পরিবর্তন করেছি এবং এটি এখন আরও ভাল (প্রথম সারিতে স্ক্রোল বার শুরু হয়)

http://jsfiddle.net/At8L8/

আমি কেবল দুটি লাইন যুক্ত করছি:

.div : padding-left:5em;
.headcol : background-color : #fff;

আপনি কি দয়া করে বলতে পারেন কীভাবে আপনি হিমায়িত কলাম থেকে স্ক্রোল বারটি শুরু করেছিলেন ?? <<> <d>> এ পরিবর্তন করার কি কোনও প্রভাব আছে?
সেবু ইলিয়াস

2

আপনি কেবল প্রথম কলামটি তৈরি করতে পারেন position: sticky; z-index: 9। এটি কলাম / সারিটিকে তার বর্তমান অবস্থানে স্থির করে তুলবে। আমার উদাহরণ কোডেপেন এখানে দেখুন https://codepen.io/swastikmishra/pen/zYYdKBQ

এইচটিএমএল উদাহরণ

<style type="text/css">
            table{ text-align: center; }
            .table-container{ width: 500px; height: 300px; overflow: scroll;}
            table th, table td {
                white-space: nowrap;
                padding: 10px 20px;
                font-family: Arial;
            }
            table tr th:first-child, table td:first-child{
                position: sticky;
                width: 100px;
                left: 0;
                z-index: 10;
                background: #fff;
            }
            table tr th:first-child{
                z-index: 11;
            }
            table tr th{
                position: sticky;
                top: 0;
                z-index: 9;
                background: #fff;
            }
        </style>
        <div class="table-container">
            <table>
                <tr><th>Hello World</th><th>Hello World</th><th>Hello World</th><th>Hello World</th><th>Hello World</th><th>Hello World</th><th>Hello World</th></tr>
                <tr><td>H11</td><td>H12</td><td>H13</td><td>H14</td><td>H15</td><td>H16</td><td>H17</td></tr>
                <tr><td>H21</td><td>H22</td><td>H23</td><td>H24</td><td>H25</td><td>H26</td><td>H27</td></tr>
                <tr><td>H31</td><td>H32</td><td>H33</td><td>H34</td><td>H35</td><td>H36</td><td>H37</td></tr>
                <tr><td>H41</td><td>H42</td><td>H44</td><td>H44</td><td>H45</td><td>H46</td><td>H47</td></tr>
                <tr><td>H51</td><td>H52</td><td>H54</td><td>H54</td><td>H55</td><td>H56</td><td>H57</td></tr>
                <tr><td>H61</td><td>H62</td><td>H64</td><td>H64</td><td>H65</td><td>H66</td><td>H67</td></tr>
                <tr><td>H71</td><td>H72</td><td>H74</td><td>H74</td><td>H75</td><td>H76</td><td>H77</td></tr>
                <tr><td>H81</td><td>H82</td><td>H84</td><td>H84</td><td>H85</td><td>H86</td><td>H87</td></tr>
            </table>
        </div>

1

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

কেবল এটি মনে রাখবেন যে আপনি যদি একটি টেবিলের মধ্যে সারিগুলি বাদ দিতে চান এবং অন্যটি নয় বা সারিগুলির উচ্চতা পরিবর্তন করেন তবে আপনার এই কোডটি সামঞ্জস্য করতে হবে।

<table class = "fixedColumns">
    <tr><td> row 1 </td></tr>
    <tr><td> row 2 </td></tr>
</table>
<table class = "scrollableTable">
    <tr><td> col 1 </td> <td> col 2 </td><td> col 3 </td><td> col 4 </td></tr>
    <tr><td> col 1 </td> <td> col 2 </td><td> col 3 </td><td> col 4 </td></tr>
</table>

<style type = "text/css" >
    .fixedColumns
    {
        vertical-align:top;
        display: inline-block;
    }
    .scrollableTable
    {
        display: inline-block;
        width:50px;
        white-space: nowrap;
        overflow-x: scroll;
    }
</style>

1

এখানে সর্বাধিক জনপ্রিয় উত্তরের আর একটি পরিবর্তন রয়েছে, তবে প্রথম কলাম লেবেলে লেখার দৈর্ঘ্যের দৈর্ঘ্য পরিচালনা সহ: http://jsfiddle.net/ozx56n41/

মূলত, আমি সারি উচ্চতা তৈরির জন্য দ্বিতীয় কলামটি ব্যবহার করছি, যেমন উল্লেখ করা হয়েছিল। তবে আমার ফ্রিডলটি উপরে উল্লিখিত সর্বাধিক উল্লিখিত থেকে ভিন্ন।

এইচটিএমএল:

<div id="outerdiv">
    <div id="innerdiv">
        <table>
            <tr>
                <td class="headcol"><div>This is a long label</div></td>
                <td class="hiddenheadcol"><div>This is a long label</div></td>
                <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
                <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
            </tr>
            <tr>
                <td class="headcol"><div>Short label</div></td>
                <td class="hiddenheadcol"><div>Short label</div></td>
                <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
                <td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td>
            </tr>
        </table>
    </div>
</div>

সিএসএস:

body {
    font: 16px Calibri;
}
#outerdiv {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    width: 100%;
    border-top: 1px solid grey;
}
#innerdiv {
    overflow-x: scroll;
    margin-left: 100px;
    overflow-y: visible;
    padding-bottom: 1px;
}
table {
    border-collapse:separate;
}
td {
    margin: 0;
    border: 1px solid grey;
    border-top-width: 0;
    border-left-width: 0px;
    padding: 10px;
}
td.headcol {
    /* Frozen 1st column */
    position: absolute;
    left: 0;
    top: auto;
    border-bottom-width: 1px;
    padding: 0;
    border-left-width: 1px;
}
td.hiddenheadcol {
    /* Hidden 2nd column to create height */
    max-width: 0;
    visibility: hidden;
    padding: 0;
}
td.headcol div {
    /* Text container in the 1st column */
    width: 100px;
    max-width: 100px;
    background: lightblue;
    padding: 10px;
    box-sizing: border-box;
}
td.hiddenheadcol div {
    /* Text container in the 2nd column */
    width: 100px;
    max-width: 100px;
    background: red;
    padding: 10px;
}
td.long {
    background:yellow;
    letter-spacing:1em;
}

1

আমার জন্য একমাত্র এটিই পুরোপুরি কাজ করেছিল (পল ওব্রায়েনকে ধন্যবাদ!): Https://codepen.io/paulobrien/pen/gWoVzN

এখানে স্নিপেট:

// requires jquery library
jQuery(document).ready(function() {
  jQuery(".main-table").clone(true).appendTo('#table-scroll').addClass('clone');   
 });
  .table-scroll {
    position:relative;
    max-width:600px;
    margin:auto;
    overflow:hidden;
    border:1px solid #000;
  }
.table-wrap {
	width:100%;
	overflow:auto;
}
.table-scroll table {
	width:100%;
	margin:auto;
	border-collapse:separate;
	border-spacing:0;
}
.table-scroll th, .table-scroll td {
	padding:5px 10px;
	border:1px solid #000;
	background:#fff;
	white-space:nowrap;
	vertical-align:top;
}
.table-scroll thead, .table-scroll tfoot {
	background:#f9f9f9;
}
.clone {
	position:absolute;
	top:0;
	left:0;
	pointer-events:none;
}
.clone th, .clone td {
	visibility:hidden
}
.clone td, .clone th {
	border-color:transparent
}
.clone tbody th {
	visibility:visible;
	color:red;
}
.clone .fixed-side {
	border:1px solid #000;
	background:#eee;
	visibility:visible;
}
.clone thead, .clone tfoot{background:transparent;}
<div id="table-scroll" class="table-scroll">
  <div class="table-wrap">
    <table class="main-table">
      <thead>
        <tr>
          <th class="fixed-side" scope="col">&nbsp;</th>
          <th scope="col">Header 2</th>
          <th scope="col">Header 3</th>
          <th scope="col">Header 4</th>
          <th scope="col">Header 5</th>
          <th scope="col">Header 6</th>
          <th scope="col">Header 7</th>
          <th scope="col">Header 8</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th class="fixed-side">Left Column</th>
          <td>Cell content<br>
            test</td>
          <td><a href="#">Cell content longer</a></td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
        </tr>
        <tr>
          <th class="fixed-side">Left Column</th>
          <td>Cell content</td>
          <td>Cell content longer</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
        </tr>
        <tr>
          <th class="fixed-side">Left Column</th>
          <td>Cell content</td>
          <td>Cell content longer</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
        </tr>
        <tr>
          <th class="fixed-side">Left Column</th>
          <td>Cell content</td>
          <td>Cell content longer</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
        </tr>
        <tr>
          <th class="fixed-side">Left Column</th>
          <td>Cell content</td>
          <td>Cell content longer</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
        </tr>
        <tr>
          <th class="fixed-side">Left Column</th>
          <td>Cell content</td>
          <td>Cell content longer</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
          <td>Cell content</td>
        </tr>
      </tbody>
      <tfoot>
        <tr>
          <th class="fixed-side">&nbsp;</th>
          <td>Footer 2</td>
          <td>Footer 3</td>
          <td>Footer 4</td>
          <td>Footer 5</td>
          <td>Footer 6</td>
          <td>Footer 7</td>
          <td>Footer 8</td>
        </tr>
      </tfoot>
    </table>
  </div>
</div>

<p>See <a href="https://codepen.io/paulobrien/pen/LBrMxa" target="blank">position Sticky version </a>with no JS</p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js" type="text/javascript"></script>


0

বিকল্পভাবে, পূর্বনির্ধারিত আকারের (মাধ্যমে) শিরোনামের শৈলী height:20em উদাহরণস্বরূপ, ) এবং ব্যবহার করুনoverflow-y:scroll;

তারপরে, আপনার কাছে একটি বিশাল টোডি থাকতে পারে, যা বাকী পৃষ্ঠাটির চেয়ে আলাদাভাবে স্ক্রোল করবে।


টেবিলের বডিটি স্ক্রোলযোগ্য হওয়ার জন্য, এটি নিজেকে একটি ব্লক হিসাবে প্রদর্শন করা উচিত
ড্যানিয়েলভার্ট

0
//If the table has tbody and thead, make them the relative container in which we can fix td and th as absolute

table tbody {
    position: relative;
}

table thead {
    position: relative;
}

//Make both the first header and first data cells (First column) absolute so that it sticks to the left

table td:first-of-type {
    position: absolute;
}

table th:first-of-type {
    position: absolute;
}

//Move Second column according to the width of column 1 

table td:nth-of-type(2) {
    padding-left: <Width of column 1>;
}

table th:nth-of-type(2) {
    padding-left: <Width of column 1>;
}

0

$(document).ready(function() {
    var table = $('#example').DataTable( {
        scrollY:        "400px",
        scrollX:        true,
        scrollCollapse: true,
        paging:         true,
        fixedColumns:   {
            leftColumns: 3
        }
    } );
} );
<head>
	<title>table</title>
	
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/fixedcolumns/3.2.4/css/fixedColumns.dataTables.min.css">
<script type="text/javascript" src="http://cdn.datatables.net/1.10.2/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/fixedcolumns/3.2.4/js/dataTables.fixedColumns.min.js"></script>


<style>
       th, td { white-space: nowrap; }
    div.dataTables_wrapper {
        width: 900px;
        margin: 0 auto;
    }
</style>

</head>
<table id="example" class="stripe row-border order-column" style="width:100%">
        <thead>
            <tr>
                <th>First name</th>
                <th>Last name</th>
                <th>Position</th>
                <th>Office</th>
                <th>Age</th>
                <th>Start date</th>
                <th>Salary</th>
                <th>Extn.</th>
                <th>E-mail</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Tiger</td>
                <td>Nixon</td>
                <td>System Architect</td>
                <td>Edinburgh</td>
                <td>61</td>
                <td>2011/04/25</td>
                <td>$320,800</td>
                <td>5421</td>
                <td>t.nixon@datatables.net</td>
            </tr>
            <tr>
                <td>Garrett</td>
                <td>Winters</td>
                <td>Accountant</td>
                <td>Tokyo</td>
                <td>63</td>
                <td>2011/07/25</td>
                <td>$170,750</td>
                <td>8422</td>
                <td>g.winters@datatables.net</td>
            </tr>
            <tr>
                <td>Ashton</td>
                <td>Cox</td>
                <td>Junior Technical Author</td>
                <td>San Francisco</td>
                <td>66</td>
                <td>2009/01/12</td>
                <td>$86,000</td>
                <td>1562</td>
                <td>a.cox@datatables.net</td>
            </tr>
            <tr>
                <td>Cedric</td>
                <td>Kelly</td>
                <td>Senior Javascript Developer</td>
                <td>Edinburgh</td>
                <td>22</td>
                <td>2012/03/29</td>
                <td>$433,060</td>
                <td>6224</td>
                <td>c.kelly@datatables.net</td>
            </tr>
            <tr>
                <td>Airi</td>
                <td>Satou</td>
                <td>Accountant</td>
                <td>Tokyo</td>
                <td>33</td>
                <td>2008/11/28</td>
                <td>$162,700</td>
                <td>5407</td>
                <td>a.satou@datatables.net</td>
            </tr>
            <tr>
                <td>Brielle</td>
                <td>Williamson</td>
                <td>Integration Specialist</td>
                <td>New York</td>
                <td>61</td>
                <td>2012/12/02</td>
                <td>$372,000</td>
                <td>4804</td>
                <td>b.williamson@datatables.net</td>
            </tr>
            <tr>
                <td>Herrod</td>
                <td>Chandler</td>
                <td>Sales Assistant</td>
                <td>San Francisco</td>
                <td>59</td>
                <td>2012/08/06</td>
                <td>$137,500</td>
                <td>9608</td>
                <td>h.chandler@datatables.net</td>
            </tr>
            <tr>
                <td>Rhona</td>
                <td>Davidson</td>
                <td>Integration Specialist</td>
                <td>Tokyo</td>
                <td>55</td>
                <td>2010/10/14</td>
                <td>$327,900</td>
                <td>6200</td>
                <td>r.davidson@datatables.net</td>
            </tr>
            <tr>
                <td>Colleen</td>
                <td>Hurst</td>
                <td>Javascript Developer</td>
                <td>San Francisco</td>
                <td>39</td>
                <td>2009/09/15</td>
                <td>$205,500</td>
                <td>2360</td>
                <td>c.hurst@datatables.net</td>
            </tr>
            <tr>
                <td>Sonya</td>
                <td>Frost</td>
                <td>Software Engineer</td>
                <td>Edinburgh</td>
                <td>23</td>
                <td>2008/12/13</td>
                <td>$103,600</td>
                <td>1667</td>
                <td>s.frost@datatables.net</td>
            </tr>
            <tr>
                <td>Jena</td>
                <td>Gaines</td>
                <td>Office Manager</td>
                <td>London</td>
                <td>30</td>
                <td>2008/12/19</td>
                <td>$90,560</td>
                <td>3814</td>
                <td>j.gaines@datatables.net</td>
            </tr>
             <tr>
                <td>Sakura</td>
                <td>Yamamoto</td>
                <td>Support Engineer</td>
                <td>Tokyo</td>
                <td>37</td>
                <td>2009/08/19</td>
                <td>$139,575</td>
                <td>9383</td>
                <td>s.yamamoto@datatables.net</td>
            </tr>
            <tr>
                <td>Thor</td>
                <td>Walton</td>
                <td>Developer</td>
                <td>New York</td>
                <td>61</td>
                <td>2013/08/11</td>
                <td>$98,540</td>
                <td>8327</td>
                <td>t.walton@datatables.net</td>
            </tr>
            <tr>
                <td>Finn</td>
                <td>Camacho</td>
                <td>Support Engineer</td>
                <td>San Francisco</td>
                <td>47</td>
                <td>2009/07/07</td>
                <td>$87,500</td>
                <td>2927</td>
                <td>f.camacho@datatables.net</td>
            </tr>
            <tr>
                <td>Serge</td>
                <td>Baldwin</td>
                <td>Data Coordinator</td>
                <td>Singapore</td>
                <td>64</td>
                <td>2012/04/09</td>
                <td>$138,575</td>
                <td>8352</td>
                <td>s.baldwin@datatables.net</td>
            </tr>
            <tr>
                <td>Zenaida</td>
                <td>Frank</td>
                <td>Software Engineer</td>
                <td>New York</td>
                <td>63</td>
                <td>2010/01/04</td>
                <td>$125,250</td>
                <td>7439</td>
                <td>z.frank@datatables.net</td>
            </tr>
            <tr>
                <td>Zorita</td>
                <td>Serrano</td>
                <td>Software Engineer</td>
                <td>San Francisco</td>
                <td>56</td>
                <td>2012/06/01</td>
                <td>$115,000</td>
                <td>4389</td>
                <td>z.serrano@datatables.net</td>
            </tr>
            <tr>
                <td>Jennifer</td>
                <td>Acosta</td>
                <td>Junior Javascript Developer</td>
                <td>Edinburgh</td>
                <td>43</td>
                <td>2013/02/01</td>
                <td>$75,650</td>
                <td>3431</td>
                <td>j.acosta@datatables.net</td>
            </tr>
            <tr>
                <td>Cara</td>
                <td>Stevens</td>
                <td>Sales Assistant</td>
                <td>New York</td>
                <td>46</td>
                <td>2011/12/06</td>
                <td>$145,600</td>
                <td>3990</td>
                <td>c.stevens@datatables.net</td>
            </tr>
            <tr>
                <td>Hermione</td>
                <td>Butler</td>
                <td>Regional Director</td>
                <td>London</td>
                <td>47</td>
                <td>2011/03/21</td>
                <td>$356,250</td>
                <td>1016</td>
                <td>h.butler@datatables.net</td>
            </tr>
            <tr>
                <td>Lael</td>
                <td>Greer</td>
                <td>Systems Administrator</td>
                <td>London</td>
                <td>21</td>
                <td>2009/02/27</td>
                <td>$103,500</td>
                <td>6733</td>
                <td>l.greer@datatables.net</td>
            </tr>
            <tr>
                <td>Jonas</td>
                <td>Alexander</td>
                <td>Developer</td>
                <td>San Francisco</td>
                <td>30</td>
                <td>2010/07/14</td>
                <td>$86,500</td>
                <td>8196</td>
                <td>j.alexander@datatables.net</td>
            </tr>
            <tr>
                <td>Shad</td>
                <td>Decker</td>
                <td>Regional Director</td>
                <td>Edinburgh</td>
                <td>51</td>
                <td>2008/11/13</td>
                <td>$183,000</td>
                <td>6373</td>
                <td>s.decker@datatables.net</td>
            </tr>
            <tr>
                <td>Michael</td>
                <td>Bruce</td>
                <td>Javascript Developer</td>
                <td>Singapore</td>
                <td>29</td>
                <td>2011/06/27</td>
                <td>$183,000</td>
                <td>5384</td>
                <td>m.bruce@datatables.net</td>
            </tr>
            <tr>
                <td>Donna</td>
                <td>Snider</td>
                <td>Customer Support</td>
                <td>New York</td>
                <td>27</td>
                <td>2011/01/25</td>
                <td>$112,000</td>
                <td>4226</td>
                <td>d.snider@datatables.net</td>
            </tr>
        </tbody>
    </table>

এটি সহজে ডেটাটেবলের সাহায্যে করা যেতে পারে। যে সকল ব্যক্তি ডেটা সারণীগুলির নতুন, পড়ুন দয়া https://datatables.net/ .Its একটি প্লাগইন এবং অফার কোড দেওয়া হেডার সংশোধন করা হয়েছে, প্রথম 3 কলাম ঠিক করা হয়েছে features.In অনেকটা এবং একাধিক অন্যান্য বৈশিষ্ট্য সেখানেও.


আপনার যদি একই সময়ে একটি স্থির কলাম এবং একটি স্থির শিরোনাম উভয়ের প্রয়োজন হয় না
পাইরেটএপ

0

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

https://codepen.io/kushagrarora/pen/zeYaoY

var freezeTables = document.getElementsByClassName("freeze-pane");

[].forEach.call(freezeTables, ftable => {
  var wrapper = document.createElement("div");
  wrapper.className = "freeze-pane-wrapper";
  var scroll = document.createElement("div");
  scroll.className = "freeze-pane-scroll";

  wrapper.appendChild(scroll);

  ftable.parentNode.replaceChild(wrapper, ftable);

  scroll.appendChild(ftable);

  var heads = ftable.querySelectorAll("th:first-child");

  let maxWidth = 0;

  [].forEach.call(heads, head => {
    var w = window
      .getComputedStyle(head)
      .getPropertyValue("width")
      .split("px")[0];
    if (Number(w) > Number(maxWidth)) maxWidth = w;
  });

  ftable.parentElement.style.marginLeft = maxWidth + "px";
  ftable.parentElement.style.width = "calc(100% - " + maxWidth + "px)";
  [].forEach.call(heads, head => {
    head.style.width = maxWidth + "px";
    var restRowHeight = window
      .getComputedStyle(head.nextElementSibling)
      .getPropertyValue("height");
    var headHeight = window.getComputedStyle(head).getPropertyValue("height");
    if (headHeight > restRowHeight)
      head.nextElementSibling.style.height = headHeight;
    else head.style.height = restRowHeight;
  });
});
@import url("https://fonts.googleapis.com/css?family=Open+Sans");
* {
  font-family: "Open Sans", sans-serif;
}

.container {
  width: 400px;
  height: 90vh;
  border: 1px solid black;
  overflow: hidden;
}

table,
th,
td {
  border: 1px solid #eee;
}

.table {
  width: 100%;
  margin-bottom: 1rem;
  table-layout: fixed;
  border-collapse: collapse;
}

.freeze-pane-wrapper {
  position: relative;
}

.freeze-pane-scroll {
  overflow-x: scroll;
  overflow-y: visible;
}

.freeze-pane th:first-child {
  position: absolute;
  background-color: pink;
  left: 0;
  top: auto;
  max-width: 40%;
}
<div class="container">
  <table class="freeze-pane">
    <tbody>
      <tr>
        <th>
          <p>Model</p>
        </th>
        <th>
          <p>Mercedes Benz AMG C43 4dr</p>
        </th>
        <th>
          <p>Audi S4 Premium 4dr</p>
        </th>
        <th>
          <p>BMW 440i 4dr sedan</p>
        </th>
      </tr>
      <tr>
        <th>
          <p>Passenger capacity</p>
        </th>
        <td>
          <p>5</p>
        </td>
        <td>
          <p>5</p>
        </td>
        <td>
          <p>5</p>
        </td>
      </tr>
      <tr>
        <th>
          <p>Front (Head/Shoulder/Leg) (In.)</p>
        </th>
        <td>
          <p>37.1/55.3/41.7</p>
        </td>
        <td>
          <p>38.9/55.9/41.3</p>
        </td>
        <td>
          <p>39.9/54.8/42.2</p>
        </td>
      </tr>
      <tr>
        <th>
          <p>Second (Head/Shoulder/Leg) (In.)</p>
        </th>
        <td>
          <p>37.1/55.5/35.2</p>
        </td>
        <td>
          <p>37.4/54.5/35.7</p>
        </td>
        <td>
          <p>36.9/54.3/33.7</p>
        </td>
      </tr>
    </tbody>
  </table>
</div>

দ্রষ্টব্য: "ধারক" ডিভটি কেবল সেই কোডটি মোবাইল-ভিউয়ের সাথে সামঞ্জস্যপূর্ণ দেখানোর জন্য।


0

আমি কেবল একটি টেবিলের ডানদিকের সবচেয়ে চটচটে স্তম্ভটি স্টিকি করেছি।

th:last-of-type {
 position: sticky;
 right: 0;
 width: 120px;
 background: #f7f7f7;
}


td:last-of-type {
 position: sticky;
 right: 0;
 background: #f7f7f7;
 width: 120px;
}

আমি বিশ্বাস করি আপনি যদি এটি করেন তবে আপনি {position: sticky; left: 0;}পছন্দসই ফলাফল পাবেন।


দুর্ভাগ্যক্রমে stickyআইই সমর্থন করে না।
gtu

0

আপনি যদি আপনার বর্তমান টেবিলটি খুব বেশি স্পর্শ করতে না চান তবে আপনি টেবিলের সামনে একটি নকল পিনযুক্ত কলাম তৈরি করতে পারেন।

উদাহরণটি জেএস ছাড়াই এটি করার একটি উপায় দেখায়

table {
  border-collapse: collapse;
  border-spacing: 0;
  border: 1px solid #ddd;
  min-width: 600px;
}

.labels {
  display:flex;
  flex-direction: column
}

.overflow {
  overflow-x: scroll;
  min width: 400px;
  flex: 1;
}

.label {
  display: flex;
  align-items: center;
  white-space:nowrap;
  padding: 10px;
  flex: 1;
  border-bottom: 1px solid #ddd;
  border-right: 2px solid #ddd;
}

.label:last-of-type {
  overflow-x: scroll;
  border-bottom: 0;
}

td {
  border: 1px solid #ddd;
  padding: 10px;
}

.flex {
  display:flex;
  max-width: 600px;
  padding: 0;
  border: 5px solid #ddd;
}
<div class="flex">
  <div class="labels">
    <span class="label">Label 1</span>
    <span class="label">Lorem ipsum dolor sit amet.</span>
    <span class="label">Lorem ipsum dolor.</span>
  </div>
  <div class="overflow">
    <table>
      <tr>
        <td class="long">Lorem ipsum dolor sit amet consectetur adipisicing</td>
        <td class="long">Lorem ipsum dolor sit amet consectetur adipisicing</td>
      </tr>
      <tr>
        <td class="long">Lorem ipsum dolor sit amet consectetur adipisicing</td>
        <td class="long">Lorem ipsum dolor sit amet consectetur adipisicing</td>
      </tr>
      <tr>
        <td class="long">Lorem ipsum dolor sit amet consectetur adipisicing</td>
        <td class="long">Lorem ipsum dolor sit amet consectetur adipisicing</td>
      </tr>
  </table>
  </div>
</div>


-1

এইচটিএমএল 5 এ আপনি সিএসএস ব্যবহার করতে পারেন style.transform
যাইহোক, আমি আপনাকে "পৃষ্ঠাগুলির মধ্যে সোয়াইপ করুন" বন্ধ করে দিচ্ছি যদি আপনি ম্যাকটিতে প্রয়োগ করেন।

নমুনা কোডপেন দেখুন

let l  = 0;
let t  = 0;

const MouseWheelHandler = (e) => {
  // vertical scroll
  if (e.deltaX == -0) {
    // t = t - e.deltaY

  // horizonal scroll
  } else if (e.deltaY == -0) {
    l = l - e.deltaX
    if (l >= 0) {
      l = 0;
      document.getElementById("gantt_task").style.transform = "translateX(1px)"
      document.getElementById("gantt_task_header").style.transform = "translateX(1px)"
      return false
    } 
    document.getElementById("gantt_task").style.transform = "translateX(" + l.toString() + "px)"
    document.getElementById("gantt_task_header").style.transform = "translateX(" + l.toString() + "px)"
  }
  return false;
}

window.addEventListener("wheel", MouseWheelHandler, false);
.row {
  border-bottom: 1px solid #979A9A
}
#gantt_grid_header {
  height:   30px;
  width:    100px;
  position: fixed;
  z-index:  3;
  top:      0px;
  left:     0px;
  border:   1px solid #cecece;
  background-color: #F08080;
}     

#gantt_task_header {
  height:   30px;
  width:    400px;
  position: fixed;
  z-index:  2;
  top:      0px;
  left:     100px;
  border:   1px solid #cecece;
  background-color: #FFC300;
}

#gantt_grid {
  width:    100px; 
  height:   400px;
  position: absolute;
  left:     0px;
  top:      0px;
  z-index:  1;
  border:   1px solid #cecece;
  background-color: #DAF7A6;
}

#gantt_task {
  width:    400px; 
  height:   400px;
  position: absolute;
  left:     100px;
  top:      0px;
  border:   1px solid #cecece;
  background-color: #FF5733;
}
<html>
    <div id="gantt_grid_header">
      HEADER
    </div>
    <div id="gantt_grid">
      <div class="row">V Scroll OK</div>
      <div class="row">V Scroll OK</div>
      <div class="row">V Scroll OK</div>
      <div class="row">V Scroll OK</div>
      <div class="row">V Scroll OK</div>
      <div class="row">V Scroll OK</div>
      <div class="row">V Scroll OK</div>
      <div class="row">V Scroll OK</div>
      <div class="row">V Scroll OK</div>
    </div>
    <div id="gantt_task_header">
      DATA HEADER
    </div>
    <div id="gantt_task">
      <div class="row">Vertical,Horizenal Scroll OK</div>
      <div class="row">Vertical,Horizenal Scroll OK</div>
      <div class="row">Vertical,Horizenal Scroll OK</div>
      <div class="row">Vertical,Horizenal Scroll OK</div>
      <div class="row">Vertical,Horizenal Scroll OK</div>
      <div class="row">Vertical,Horizenal Scroll OK</div>
      <div class="row">Vertical,Horizenal Scroll OK</div>
      <div class="row">Vertical,Horizenal Scroll OK</div>
      <div class="row">Vertical,Horizenal Scroll OK</div>
    </div>
</html>


2
এটি এমন বিরল পরিস্থিতি হবে যেখানে আপনি আপনার ব্যবহারকারীরা আপনার ওয়েবসাইটটি ব্যবহারের জন্য কোনও OS বৈশিষ্ট্যটি বন্ধ করার আশা করতে পারেন।
নাথন আর্থার

-2

এটি মাথায় যুক্ত করুন:

<link rel="stylesheet" type="text/css" href="/path/to/easyscrolltable.css">
<script src="/path/to/easyscrolltable.js"></script>

javascript:

$('table.ytable').EasyScrollableTable({
    'top'  : 1,  
    'left' : 1,  
    'class': '',
    'width': '100%',
    'height': 'auto',
    'footer': false,
    'hover': true
});

1
আমি আপনার লাইব্রেরিটি চেষ্টা করেছি এবং থ পৃষ্ঠাটি আর প্রদর্শিত হবে না, ডিবাগারটি "মেমরি শেষ হওয়ার আগেই থামিয়ে দিয়েছিল" সমস্যা বলে।
পিয়েরে-অ্যাড্রিয়েন মাইসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.