100% প্রস্থ সহ এইচটিএমএল টেবিল, টিডির অভ্যন্তরে উল্লম্ব স্ক্রোল সহ


423

আমি কীভাবে <table>100% প্রস্থের জন্য সেট করতে পারি এবং <tbody>কিছু উচ্চতার জন্য কেবল উল্লম্ব স্ক্রোলের ভিতরে রাখতে পারি?

কারো ভিতরে উল্লম্ব স্ক্রোল

table {
    width: 100%;
    display:block;
}
thead {
    display: inline-block;
    width: 100%;
    height: 20px;
}
tbody {
    height: 200px;
    display: inline-block;
    width: 100%;
    overflow: auto;
}
  
<table>
  <thead>
    <tr>
    	<th>Head 1</th>
    	<th>Head 2</th>
    	<th>Head 3</th>
    	<th>Head 4</th>
    	<th>Head 5</th>
    </tr>
  </thead>
  <tbody>
    <tr>
    	<td>Content 1</td>
    	<td>Content 2</td>
    	<td>Content 3</td>
    	<td>Content 4</td>
    	<td>Content 5</td>
    </tr>
  </tbody>
</table>

আমি কিছু অতিরিক্ত DIV আছে যোগ এড়াতে চান, সব আমি চাই ভালো সহজ টেবিল এবং আমি, পরিবর্তন প্রদর্শন বের করার চেষ্টা table-layout, positionএবং CSS টেবিলে আরো অনেক কিছু জিনিষ শুধুমাত্র px আকারে সংশোধন প্রস্থ 100% প্রস্থ সঙ্গে ভাল কাজ করছে না।


আপনি কি অর্জন করতে চান তা সত্যিই নিশ্চিত নয়। এটি দেখুন: jsfiddle.net/CrSpu এবং আপনি এটি কীভাবে আচরণ করতে চান তা বলুন
x4rf41

2
আমি জানি তবে দেখুন .. তম এবং টিডি
মার্কো এস


উত্তর:


674

<tbody>উপাদানটিকে স্ক্রোলযোগ্য করার জন্য , পৃষ্ঠাতে এটি ব্যবহার করার পদ্ধতি যেমন ব্যবহার করে আমাদের পরিবর্তন করতে হবেdisplay: block; এটি একটি ব্লক স্তর উপাদান হিসাবে প্রদর্শন করতে ।

যেহেতু আমরা এর displayসম্পত্তি পরিবর্তন করি tbody, আমাদের সেই সম্পত্তিটির জন্য পরিবর্তন করা উচিতthead উপাদান হিসাবে পাশাপাশি টেবিলের বিন্যাসটি ভাঙ্গতে রোধ করা উচিত।

তাহলে আমাদের আছে:

thead, tbody { display: block; }

tbody {
    height: 100px;       /* Just for the demo          */
    overflow-y: auto;    /* Trigger vertical scroll    */
    overflow-x: hidden;  /* Hide the horizontal scroll */
}

ওয়েব ব্রাউজারগুলি সারি-গ্রুপ হিসাবে theadএবং tbodyউপাদানগুলি প্রদর্শন করে ( এবংtable-header-grouptable-row-group ডিফল্টরূপে ) ।

একবার আমরা এটি পরিবর্তন করি, ভিতরে tr উপাদানগুলি তাদের ধারকটির পুরো স্থানটি পূরণ করে না।

এটি ঠিক করতে, আমাদের tbodyকলামগুলির প্রস্থ গণনা করতে হবে এবং সংশ্লিষ্ট মানটি প্রয়োগ করতে হবেthead জাভাস্ক্রিপ্টের মাধ্যমে কলামগুলির ।

অটো প্রস্থ কলাম

এখানে উপরের যুক্তির jQuery সংস্করণটি রয়েছে:

// Change the selector if needed
var $table = $('table'),
    $bodyCells = $table.find('tbody tr:first').children(),
    colWidth;

// Get the tbody columns width array
colWidth = $bodyCells.map(function() {
    return $(this).width();
}).get();

// Set the width of thead columns
$table.find('thead tr').children().each(function(i, v) {
    $(v).width(colWidth[i]);
});    

এবং এখানে আউটপুট (উইন্ডোজ 7 ক্রোম 32 এ) রয়েছে :

কারো ভিতরে উল্লম্ব স্ক্রোল

কাজ ডেমো

পূর্ণ প্রস্থ সারণী, আপেক্ষিক প্রস্থ কলাম

অরিজিনাল পোস্টারের প্রয়োজন অনুসারে, আমরা এর ধারকটির table100% পর্যন্ত প্রসারিত করতে পারি widthএবং তারপরে সারণীর প্রতিটি কলামের জন্য একটি আপেক্ষিক ( শতাংশ ) widthব্যবহার করতে পারি।

table {
    width: 100%; /* Optional */
}

tbody td, thead th {
    width: 20%;  /* Optional */
}

যেহেতু টেবিলটির একটি (সাজানোর) তরল বিন্যাস রয়েছে , theadতাই ধারকটির আকার পরিবর্তন হয়ে গেলে আমাদের কলামগুলির প্রস্থ সামঞ্জস্য করা উচিত ।

উইন্ডোটি পুনরায় আকার দেওয়ার পরে আমাদের কলামগুলির প্রস্থগুলি সেট করা উচিত:

// Adjust the width of thead cells when *window* resizes
$(window).resize(function() {
    /* Same as before */ 
}).resize(); // Trigger the resize handler once the script runs

আউটপুটটি হবে:

টিবিটির ভিতরে উল্লম্ব স্ক্রোল সহ তরল সারণী

কাজ ডেমো


ব্রাউজার সমর্থন এবং বিকল্প

আমি উইন্ডোজ 7 এ বড় ওয়েব ব্রাউজারগুলির নতুন সংস্করণগুলি (IE10 + সহ) এর মাধ্যমে দুটি পরীক্ষা করেছি এবং এটি কার্যকর হয়েছে।

তবে এটি আই 9 এবং নীচে সঠিকভাবে কাজ করে না

এটি কারণ একটি টেবিল বিন্যাসে , সমস্ত উপাদান একই কাঠামোগত বৈশিষ্ট্য অনুসরণ করা উচিত।

এবং display: block;জন্য ব্যবহার করে<thead><tbody> উপাদানগুলির আমরা টেবিলের কাঠামোটি ভেঙে ফেলেছি।

জাভাস্ক্রিপ্ট মাধ্যমে লেআউট পুনরায় নকশা

একটি পদ্ধতি হ'ল (সম্পূর্ণ) সারণী বিন্যাসটি পুনরায় নকশা করা। ফ্লাই এবং হ্যান্ডেলটিতে নতুন লেআউট তৈরি করতে জাভাস্ক্রিপ্ট ব্যবহার করে এবং / অথবা ঘরের প্রস্থ / উচ্চতা গতিশীলভাবে সামঞ্জস্য করতে।

উদাহরণস্বরূপ, নিম্নলিখিত উদাহরণগুলি একবার দেখুন:

নীড় টেবিল

এই পদ্ধতির সাথে দুটি ডিভযুক্ত টেবিল রয়েছে যাতে একটি ডিভ থাকে। প্রথমটির tableএকটি মাত্র সেল রয়েছে যার একটি রয়েছে divএবং দ্বিতীয় টেবিলটি সেই divউপাদানটির ভিতরে রাখা হয়েছে ।

পরীক্ষা করে দেখুন উল্লম্ব স্ক্রোল টেবিলসিএসএস প্লে

এটি বেশিরভাগ ওয়েব ব্রাউজারে কাজ করে। আমরা জাভাস্ক্রিপ্টের মাধ্যমে উপরের যুক্তিটিকে গতিশীলভাবে করতে পারি।

স্ক্রোলে স্থির শিরোনাম সহ টেবিল

যেহেতু করতে উল্লম্ব স্ক্রোল দন্ড যোগ করার উদ্দেশ্যে <tbody>টেবিল প্রদর্শন করার করা হয় হেডার প্রতিটি সারির উপরের, আমরা পারে অবস্থানthead থাকার উপাদানfixed পরিবর্তে স্ক্রীনের উপরের অংশে।

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

আর এখানে একটি বিশুদ্ধ সিএসএস দ্বারা বাস্তবায়ন উইলেম ভ্যান Bockstal


খাঁটি সিএসএস সলিউশন

এখানে পুরানো উত্তর। অবশ্যই আমি একটি নতুন পদ্ধতি যুক্ত করেছি এবং সিএসএসের ঘোষণাগুলি পরিমার্জন করেছি।

স্থির প্রস্থ সঙ্গে সারণী

এই ক্ষেত্রে, এর tableএকটি স্থির হওয়া উচিত width (কলামগুলির প্রশস্ততা এবং উল্লম্ব স্ক্রোল-বারের প্রস্থ সহ)

প্রতিটি কলামের একটি নির্দিষ্ট থাকা উচিত প্রস্থ এবং শেষ কলামটি এর theadউপাদান অধিক প্রয়োজন প্রস্থ যা অন্যদের 'থেকে সমান প্রস্থ + + প্রস্থ উল্লম্ব স্ক্রোল-বারের।

সুতরাং, সিএসএস হতে হবে:

table {
    width: 716px; /* 140px * 5 column + 16px scrollbar width */
    border-spacing: 0;
}

tbody, thead tr { display: block; }

tbody {
    height: 100px;
    overflow-y: auto;
    overflow-x: hidden;
}

tbody td, thead th {
    width: 140px;
}

thead th:last-child {
    width: 156px; /* 140px + 16px scrollbar width */
}

এখানে ফলাফল:

স্থির প্রস্থ সঙ্গে সারণী

কাজ ডেমো

100% প্রস্থ সহ সারণী

এই পদ্ধতির সালে tableএকটি প্রস্থ হয়েছে 100%এবং প্রতিটি জন্য thএবং td, এর মান widthসম্পত্তি চেয়ে কম হওয়া উচিত 100% / number of cols

এছাড়াও, আমরা কমাতে প্রয়োজন প্রস্থ এর theadমান হিসাবে প্রস্থ উল্লম্ব স্ক্রোল-বারের।

এটি করার জন্য, আমাদের সিএসএস 3 calc()ফাংশনটি ব্যবহার করা দরকার , যা নিম্নলিখিত:

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

thead, tbody, tr, th, td { display: block; }

thead tr {
    /* fallback */
    width: 97%;
    /* minus scroll bar width */
    width: -webkit-calc(100% - 16px);
    width:    -moz-calc(100% - 16px);
    width:         calc(100% - 16px);
}

tr:after {  /* clearing float */
    content: ' ';
    display: block;
    visibility: hidden;
    clear: both;
}

tbody {
    height: 100px;
    overflow-y: auto;
    overflow-x: hidden;
}

tbody td, thead th {
    width: 19%;  /* 19% is less than (100% / 5 cols) = 20% */
    float: left;
}

এখানে অনলাইন ডেমো রয়েছে

দ্রষ্টব্য: প্রতিটি কলামের সামগ্রীর লাইনটি ভাঙলে এই পদ্ধতির ব্যর্থতা হবে , অর্থাত প্রতিটি কক্ষের বিষয়বস্তু পর্যাপ্ত পরিমাণে কম হওয়া উচিত


নিম্নলিখিতটিতে, খাঁটি সিএসএস সমাধানের দুটি সহজ উদাহরণ রয়েছে যা আমি এই প্রশ্নের উত্তর দেওয়ার সময় তৈরি করেছি।

এখানে jsFiddle ডেমো ভি 2

পুরানো সংস্করণ: jsFiddle ডেমো ভি 1


17
আপনার সাথে display: blockটেবিলের বৈশিষ্ট্যগুলি কলামের প্রস্থ হিসাবে অ্যাড এবং টবির মধ্যে ভাগ করে দেওয়া হয়েছে loose আমি জানি আপনি সেট করে এটি ঠিক করেছেন width: 19.2%তবে আমরা প্রতিটি কলামের প্রস্থ আগেই জানি না, এটি কাজ করবে না।
samb

10
এই কোডটি মনে হয় শরীরের কোষগুলি সর্বদা শিরোলেখের ঘরগুলির চেয়ে বিস্তৃত হবে।
অ্যাডাম ডোনাহু

2
কখন কাজ করবেন না height: 100%(যখন আপনি পৃষ্ঠার নীচে টেবিলটি প্রসারিত করতে চান)।
অ্যালিকেলজিন-কিলাকা

2
এটি AngularJS ng-repeatটেবিলগুলির সাথেও দুর্দান্তভাবে কাজ করে। স্থির টেবিল শিরোনামযুক্ত সমস্ত লাইব্রেরি কেন রয়েছে তা নিশ্চিত নন এবং যখন এই সমাধান রয়েছে তখন কী নয়।
চেকদা

2
box-sizingসম্পত্তি সহ আপনি এটি আরও কিছুটা উন্নত করতে পারেন যাতে দুটি পৃথক বেধের সীমানা থাকা কলাম প্রান্তিককরণ বন্ধ না করে।
রিকা

89

নিম্নলিখিত সমাধানে, টেবিল পিতামাত্রে 100% দখল করে, কোনও পরম আকারের প্রয়োজন নেই। এটি খাঁটি সিএসএস, ফ্লেক্স লেআউট ব্যবহৃত হয়।

এটি কেমন দেখাচ্ছে তা এখানে: এখানে চিত্র বর্ণনা লিখুন

সম্ভাব্য অসুবিধাগুলি:

  • উল্লম্ব স্ক্রোলবার সর্বদা দৃশ্যমান হয়, এটি প্রয়োজনীয় কিনা তা বিবেচনা না করে;
  • সারণী বিন্যাস স্থির করা হয়েছে - কলামগুলি সামগ্রীর প্রস্থ অনুসারে আকার পরিবর্তন করবে না (আপনি যে কলামের প্রস্থটি স্পষ্টভাবে চান তা সেট করতে পারেন);
  • একটি পরম আকার আছে - স্ক্রোলবারের প্রস্থ, যা আমি যে ব্রাউজারগুলিতে চেক করতে পেরেছিলাম তার প্রায় 0.9 মিমি is

এইচটিএমএল (সংক্ষিপ্ত):

<div class="table-container">
    <table>
        <thead>
            <tr>
                <th>head1</th>
                <th>head2</th>
                <th>head3</th>
                <th>head4</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>content1</td>
                <td>content2</td>
                <td>content3</td>
                <td>content4</td>
            </tr>
            <tr>
                <td>content1</td>
                <td>content2</td>
                <td>content3</td>
                <td>content4</td>
            </tr>
            ...
        </tbody>
    </table>
</div>

সিএসএস, কিছু সজ্জা সহ পরিষ্কারতার জন্য বাদ দেওয়া:

.table-container {
    height: 10em;
}
table {
    display: flex;
    flex-flow: column;
    height: 100%;
    width: 100%;
}
table thead {
    /* head takes the height it requires, 
    and it's not scaled when table is resized */
    flex: 0 0 auto;
    width: calc(100% - 0.9em);
}
table tbody {
    /* body takes all the remaining available space */
    flex: 1 1 auto;
    display: block;
    overflow-y: scroll;
}
table tbody tr {
    width: 100%;
}
table thead, table tbody tr {
    display: table;
    table-layout: fixed;
}

jsfiddle উপর সম্পূর্ণ কোড

কম কোডে একই কোড যাতে আপনি এতে মিশ্রিত করতে পারেন:

.table-scrollable() {
  @scrollbar-width: 0.9em;
  display: flex;
  flex-flow: column;

  thead,
  tbody tr {
    display: table;
    table-layout: fixed;
  }

  thead {
    flex: 0 0 auto;
    width: ~"calc(100% - @{scrollbar-width})";
  }

  tbody {
    display: block;
    flex: 1 1 auto;
    overflow-y: scroll;

    tr {
      width: 100%;
    }
  }
}

2
সমাধানের জন্য ধন্যবাদ! সেখানে সামান্য বাগ ছিল .... আপনি thead জন্য প্রস্থ দুইবার সেট, এবং আমি দেখা গেছে যে একটি বিট আপ প্রস্থ লাইন থেকে 1.05em বিয়োগ ভাল: jsfiddle.net/xuvsncr2/170
TigerBear

1
চরিত্রের বিষয়বস্তু সংখ্যা সম্পর্কে কী? ডি সারি কোষের ভিতরে আরও অক্ষর বা শব্দ যুক্ত করার সময় এটি বিচলিত হয়
লিমন

আমি কিছু উপযুক্ত মোড়ানো নীতি সেটিং মনে tdসাহায্য করা উচিত
tsayen

এর মতো কোনও সমাধান কিন্তু 100% প্রস্থের প্রয়োজনটি বাদ দিচ্ছে?
আলেকজান্দ্রে পেরেইরা নুনস

2
@tsayen আপনি উইন্ডোটি পুনরায় আকার দেওয়ার সময় কীভাবে এটি স্ক্রঞ্চিং এবং ওভারল্যাপিং থেকে আটকাবেন?
ক্লিয়ারশট 66

31

আধুনিক ব্রাউজারগুলিতে আপনি কেবল CSS ব্যবহার করতে পারেন:

th {
  position: sticky;
  top: 0;
  z-index: 2;
}

8
এই প্রসারণটি অসম্পূর্ণ ... একটি উদাহরণ পোস্ট করার জন্য যত্ন নিই, বা কমপক্ষে বিস্তৃত?
লিয়াম

ভাল কাজ করা, তবে কেবলমাত্র থের ক্ষেত্রে প্রযোজ্য। যদি আমরা থিয়েডে অবস্থানটি স্টিকি স্থির করে রাখি তবে এটি কার্যকর হয় না।
বিশাল

ফিক্সড থ্যাডে ডাব্লু 3 সি যুক্ত করা উচিত!
সনিচি

2
এই উত্তরটি কাজ করে যখন আপনি মোড়ানো আপনার <table>সঙ্গে <div>যা হয়েছে overflow-y: auto;এবং কিছু max-height। উদাহরণস্বরূপ:<div style="overflow-y: auto; max-height: 400px;"><table>...</table></div>
Minwork

2020 পর্যন্ত, এটি নির্বাচিত উত্তর হবে (@ মাইনওয়ার্কের আপডেটের পাশাপাশি)
ক্রিস্টোফ ভিদাল

18

আমি এবং এর display:blockজন্য ব্যবহার করছি । যে কারণে কলামগুলির প্রস্থটি কলামগুলির প্রস্থের চেয়ে পৃথক ।theadtbodytheadtbody

table {
    margin:0 auto; 
    border-collapse:collapse;
}
thead {
    background:#CCCCCC;
    display:block
}
tbody {
    height:10em;overflow-y:scroll;
    display:block
}

এটি ঠিক করার জন্য আমি ছোট jQueryকোড ব্যবহার করি তবে এটি JavaScriptকেবলমাত্র করা যায়।

var colNumber=3 //number of table columns    

for (var i=0; i<colNumber; i++) {
  var thWidth=$("#myTable").find("th:eq("+i+")").width();
  var tdWidth=$("#myTable").find("td:eq("+i+")").width();      
  if (thWidth<tdWidth)                    
      $("#myTable").find("th:eq("+i+")").width(tdWidth);
  else
      $("#myTable").find("td:eq("+i+")").width(thWidth);           
}  

এখানে আমার কাজের ডেমো: http://jsfiddle.net/gavroche/N7LEF/

আইই 8 তে কাজ করে না


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

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

হ্যাঁ শিরোনাম এবং সেলগুলি আর মেলে না যদি আপনি টেবিলের প্রস্থটি কোনও সেট প্রস্থে সীমাবদ্ধ থাকে
ক্রেগ

এখানে সেরা উত্তর, খুব সহজ
চার্লস Okwuagwu

18

সিএসএস শুধুমাত্র

জন্য ক্রোম, ফায়ারফক্স, এজ (এবং অন্যান্য চিরহরিৎ ব্রাউজার)

কেবল position: sticky; top: 0;আপনার thউপাদান:

/* Fix table head */
.tableFixHead    { overflow-y: auto; height: 100px; }
.tableFixHead th { position: sticky; top: 0; }

/* Just common table stuff. */
table  { border-collapse: collapse; width: 100%; }
th, td { padding: 8px 16px; }
th     { background:#eee; }
<div class="tableFixHead">
  <table>
    <thead>
      <tr><th>TH 1</th><th>TH 2</th></tr>
    </thead>
    <tbody>
      <tr><td>A1</td><td>A2</td></tr>
      <tr><td>B1</td><td>B2</td></tr>
      <tr><td>C1</td><td>C2</td></tr>
      <tr><td>D1</td><td>D2</td></tr>
      <tr><td>E1</td><td>E2</td></tr>
    </tbody>
  </table>
</div>

PS: আপনার যদি TH উপাদানগুলির জন্য সীমানা দরকার হয় তবে th {box-shadow: 1px 1px 0 #000; border-top: 0;}সাহায্য করবে (যেহেতু ডিফল্ট সীমানাগুলি স্ক্রলে সঠিকভাবে আঁকা হয়নি) are

উপরের বৈকল্পিকের জন্য যা আইই ১১ এর জন্য সামঞ্জস্য রাখতে কেবল কিছুটা জেএস ব্যবহার করে এই উত্তরটি দেখুন https://stackoverflow.com/a/47923622/383904


আপনার যদি "সীমান্ত-পতন: পতন" ব্যবহার করে সীমা থাকে তবে শিরোনামের পরিবর্তে শরীরে সীমানা আটকে থাকবে। এই সমস্যাটি এড়াতে আপনার "সীমান্ত-পতন: পৃথক" ব্যবহার করা উচিত। দেখুন stackoverflow.com/a/53559396
mrod

separateআগুনে তেল যোগ করার সময় @ এমড্রড করুন । jsfiddle.net/RokoCB/o0zL4xyw এবং একটি সমাধান দেখুন এখানে: নির্দিষ্ট TH- তে সীমানা যুক্ত করুন - আমি যদি কিছু মিস করি তবে OFC এর পরামর্শের জন্য আমি স্বাগত।
রোকো সি বুলজান

11

একের পর এক দুটি টেবিল তৈরি করুন, স্থির উচ্চতার ডিভের মধ্যে দ্বিতীয় টেবিল রাখুন এবং ওভারফ্লো সম্পত্তিটি অটোতে সেট করুন। দ্বিতীয় টেবিলে থ্যাডের ভিতরে থাকা সমস্ত টিডিও খালি রাখুন।

<div>
    <table>
        <thead>
            <tr>
                <th>Head 1</th>
                <th>Head 2</th>
                <th>Head 3</th>
                <th>Head 4</th>
                <th>Head 5</th>
            </tr>
        </thead>
    </table>
</div>

<div style="max-height:500px;overflow:auto;">
    <table>
        <thead>
            <tr>
                <th></th>
                <th></th>
                <th></th>
                <th></th>
                <th></th>
            </tr>
        </thead>
        <tbody>
        <tr>
            <td>Content 1</td>
            <td>Content 2</td>
            <td>Content 3</td>
            <td>Content 4</td>
            <td>Content 5</td>
        </tr>
        </tbody>
    </table>    
</div>

8
এই ক্ষেত্রে, দ্বিতীয় সারণী কলামগুলি প্রথম টেবিলের প্রস্থ অনুসরণ করতে পারে না।
kat1330

2
ভাল না! আপনি দুটি টেবিলের কলামগুলির জন্য প্রস্থের সমন্বয়টি হারাবেন।
জাফর

1
এই সমাধানটি সম্পূর্ণ করার জন্য আমাদের শিরোনাম কলামগুলির প্রশস্ততা সিঙ্ক্রিনাইজ করার জন্য @ হাশেম কুলামি লিপি ( উপরে বর্ণিত ) যুক্ত করতে হবে
এলাহে আভিচজার

6

আমি এই নির্দেশাবলী অনুসরণ করে খাঁটি সিএসএসের সাথে শেষ পর্যন্ত পেয়েছি:

http://tjvantoll.com/2012/11/10/creating-cross-browser-scrollable-tbody/

প্রথম পদক্ষেপটি <tbody>প্রদর্শন করতে সেট করা হয় : ব্লক করুন যাতে একটি ওভারফ্লো এবং উচ্চতা প্রয়োগ করা যায়। সেখান থেকে সারিগুলি <thead>অবস্থানে সেট করতে হবে: আপেক্ষিক এবং প্রদর্শন: ব্লক করুন যাতে তারা এখন স্ক্রোলযোগ্যের শীর্ষে বসবে <tbody>

tbody, thead { display: block; overflow-y: auto; }

কারণ <thead>তুলনামূলকভাবে প্রতিটি টেবিল ঘরের একটি নির্দিষ্ট প্রস্থের প্রয়োজন হয়

td:nth-child(1), th:nth-child(1) { width: 100px; }
td:nth-child(2), th:nth-child(2) { width: 100px; }
td:nth-child(3), th:nth-child(3) { width: 100px; }

কিন্তু দুর্ভাগ্যক্রমে এটি যথেষ্ট নয়। যখন একটি স্ক্রোলবার উপস্থিত থাকে ব্রাউজারগুলি এর জন্য স্থান বরাদ্দ করে, সুতরাং, <tbody>প্রান্তগুলির চেয়ে কম জায়গা উপলব্ধ থাকে <thead>। এটি তৈরি করে এমন সামান্য বিভ্রান্তি লক্ষ্য করুন ...

আমি যে একমাত্র কাজটি করতে পেরেছি তা হ'ল শেষটি ব্যতীত সমস্ত কলামে একটি ন্যূনতম প্রস্থ স্থাপন করা।

td:nth-child(1), th:nth-child(1) { min-width: 100px; }
td:nth-child(2), th:nth-child(2) { min-width: 100px; }
td:nth-child(3), th:nth-child(3) { width: 100px; }

নীচে পুরো কোডেন উদাহরণ:

সিএসএস:

.fixed_headers {
  width: 750px;
  table-layout: fixed;
  border-collapse: collapse;
}
.fixed_headers th {
  text-decoration: underline;
}
.fixed_headers th,
.fixed_headers td {
  padding: 5px;
  text-align: left;
}
.fixed_headers td:nth-child(1),
.fixed_headers th:nth-child(1) {
  min-width: 200px;
}
.fixed_headers td:nth-child(2),
.fixed_headers th:nth-child(2) {
  min-width: 200px;
}
.fixed_headers td:nth-child(3),
.fixed_headers th:nth-child(3) {
  width: 350px;
}
.fixed_headers thead {
  background-color: #333333;
  color: #fdfdfd;
}
.fixed_headers thead tr {
  display: block;
  position: relative;
}
.fixed_headers tbody {
  display: block;
  overflow: auto;
  width: 100%;
  height: 300px;
}
.fixed_headers tbody tr:nth-child(even) {
  background-color: #dddddd;
}
.old_ie_wrapper {
  height: 300px;
  width: 750px;
  overflow-x: hidden;
  overflow-y: auto;
}
.old_ie_wrapper tbody {
  height: auto;
}

এইচটিএমএল:

<!-- IE < 10 does not like giving a tbody a height.  The workaround here applies the scrolling to a wrapped <div>. -->
<!--[if lte IE 9]>
<div class="old_ie_wrapper">
<!--<![endif]-->

<table class="fixed_headers">
  <thead>
    <tr>
      <th>Name</th>
      <th>Color</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Apple</td>
      <td>Red</td>
      <td>These are red.</td>
    </tr>
    <tr>
      <td>Pear</td>
      <td>Green</td>
      <td>These are green.</td>
    </tr>
    <tr>
      <td>Grape</td>
      <td>Purple / Green</td>
      <td>These are purple and green.</td>
    </tr>
    <tr>
      <td>Orange</td>
      <td>Orange</td>
      <td>These are orange.</td>
    </tr>
    <tr>
      <td>Banana</td>
      <td>Yellow</td>
      <td>These are yellow.</td>
    </tr>
    <tr>
      <td>Kiwi</td>
      <td>Green</td>
      <td>These are green.</td>
    </tr>
    <tr>
      <td>Plum</td>
      <td>Purple</td>
      <td>These are Purple</td>
    </tr>
    <tr>
      <td>Watermelon</td>
      <td>Red</td>
      <td>These are red.</td>
    </tr>
    <tr>
      <td>Tomato</td>
      <td>Red</td>
      <td>These are red.</td>
    </tr>
    <tr>
      <td>Cherry</td>
      <td>Red</td>
      <td>These are red.</td>
    </tr>
    <tr>
      <td>Cantelope</td>
      <td>Orange</td>
      <td>These are orange inside.</td>
    </tr>
    <tr>
      <td>Honeydew</td>
      <td>Green</td>
      <td>These are green inside.</td>
    </tr>
    <tr>
      <td>Papaya</td>
      <td>Green</td>
      <td>These are green.</td>
    </tr>
    <tr>
      <td>Raspberry</td>
      <td>Red</td>
      <td>These are red.</td>
    </tr>
    <tr>
      <td>Blueberry</td>
      <td>Blue</td>
      <td>These are blue.</td>
    </tr>
    <tr>
      <td>Mango</td>
      <td>Orange</td>
      <td>These are orange.</td>
    </tr>
    <tr>
      <td>Passion Fruit</td>
      <td>Green</td>
      <td>These are green.</td>
    </tr>
  </tbody>
</table>

<!--[if lte IE 9]>
</div>
<!--<![endif]-->

সম্পাদনা: টেবিল প্রস্থ 100% জন্য বিকল্প সমাধান (উপরে আসলে নির্দিষ্ট প্রস্থের জন্য এবং প্রশ্নের উত্তর দেয় না):

এইচটিএমএল:

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Color</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Apple</td>
      <td>Red</td>
      <td>These are red.</td>
    </tr>
    <tr>
      <td>Pear</td>
      <td>Green</td>
      <td>These are green.</td>
    </tr>
    <tr>
      <td>Grape</td>
      <td>Purple / Green</td>
      <td>These are purple and green.</td>
    </tr>
    <tr>
      <td>Orange</td>
      <td>Orange</td>
      <td>These are orange.</td>
    </tr>
    <tr>
      <td>Banana</td>
      <td>Yellow</td>
      <td>These are yellow.</td>
    </tr>
    <tr>
      <td>Kiwi</td>
      <td>Green</td>
      <td>These are green.</td>
    </tr>
  </tbody>
</table>

সিএসএস:

table {
  width: 100%;
  text-align: left;
  min-width: 610px;
}
tr {
  height: 30px;
  padding-top: 10px
}
tbody { 
  height: 150px; 
  overflow-y: auto;
  overflow-x: hidden;
}
th,td,tr,thead,tbody { display: block; }
td,th { float: left; }
td:nth-child(1),
th:nth-child(1) {
  width: 20%;
}
td:nth-child(2),
th:nth-child(2) {
  width: 20%;
  float: left;
}
td:nth-child(3),
th:nth-child(3) {
  width: 59%;
  float: left;
}
/* some colors */
thead {
  background-color: #333333;
  color: #fdfdfd;
}
table tbody tr:nth-child(even) {
  background-color: #dddddd;
}

ডেমো: http://codepen.io/anon/pen/bNJeLO


1
প্রশ্নটি বিশেষত একটি 100% প্রস্থের সারণী চেয়েছিল, যা আপনি যা উদাহরণ হিসাবে উল্লেখ করেছেন তা না করে।
31:38

@ ট্র্রু ব্লুআউসি ভাল ক্যাচ: ডি 100% প্রস্থের জন্য বিকল্প সমাধান যুক্ত করা হয়েছে।
মিকেল লেপিস্টö

আপনি ঘর সারির সামগ্রী দ্রাঘিমাংশ বিবেচনা করবেন না
লিমন

2

কোনও 'ব্লক' টিডি সহ কলামগুলি সঠিকভাবে প্রদর্শন করতে বাধ্য করার জন্য সিএসএস ওয়ার্কারআউন্ড

এই সমাধানটির এখনও thপ্রস্থগুলি গণনা করা এবং jQuery দ্বারা সেট করা প্রয়োজন

table.scroll tbody,
table.scroll thead { display: block; }

table.scroll tbody {
    overflow-y: auto;
    overflow-x: hidden;
    max-height: 300px;
}

table.scroll tr {
    display: flex;
}

table.scroll tr > td {
    flex-grow: 1;
    flex-basis: 0;
}

এবং Jquery / জাভাস্ক্রিপ্ট

var $table = $('#the_table_element'),
    $bodyCells = $table.find('tbody tr:first').children(),
    colWidth;

$table.addClass('scroll');

// Adjust the width of thead cells when window resizes
$(window).resize(function () {

    // Get the tbody columns width array
    colWidth = $bodyCells.map(function () {
        return $(this).width();
    }).get();

    // Set the width of thead columns
    $table.find('thead tr').children().each(function (i, v) {
        $(v).width(colWidth[i]);
    });

}).resize(); // Trigger resize handler

2019 সালে ক্রেইগ, আইই সম্পর্কে মোটেই চিন্তা না করা পুরোপুরি ঠিক।
অটোমাজিচ

2

প্রয়োগের নীচে চেষ্টা করুন, প্রয়োগ করা খুব সহজ

নীচে jsfiddle লিঙ্ক দেওয়া আছে

http://jsfiddle.net/v2t2k8ke/2/

এইচটিএমএল:

<table border='1' id='tbl_cnt'>
<thead><tr></tr></thead><tbody></tbody>

সিএসএস:

 #tbl_cnt{
 border-collapse: collapse; width: 100%;word-break:break-all;
 }
 #tbl_cnt thead, #tbl_cnt tbody{
 display: block;
 }
 #tbl_cnt thead tr{
 background-color: #8C8787; text-align: center;width:100%;display:block;
 }
 #tbl_cnt tbody {
 height: 100px;overflow-y: auto;overflow-x: hidden;
 }

jQuery:

 var data = [
    {
    "status":"moving","vehno":"tr544","loc":"bng","dri":"ttt"
    }, {
    "status":"stop","vehno":"tr54","loc":"che", "dri":"ttt"
    },{    "status":"idle","vehno":"yy5499999999999994","loc":"bng","dri":"ttt"
    },{
    "status":"moving","vehno":"tr544","loc":"bng", "dri":"ttt"
    }, {
    "status":"stop","vehno":"tr54","loc":"che","dri":"ttt"
    },{
    "status":"idle","vehno":"yy544","loc":"bng","dri":"ttt"
    }
    ];
   var sth = '';
   $.each(data[0], function (key, value) {
     sth += '<td>' + key + '</td>';
   });
   var stb = '';        
   $.each(data, function (key, value) {
       stb += '<tr>';
       $.each(value, function (key, value) {
       stb += '<td>' + value + '</td>';
       });
       stb += '</tr>';
    });
      $('#tbl_cnt thead tr').append(sth);
      $('#tbl_cnt tbody').append(stb);
      setTimeout(function () {
      var col_cnt=0 
      $.each(data[0], function (key, value) {col_cnt++;});    
      $('#tbl_cnt thead tr').css('width', ($("#tbl_cnt tbody") [0].scrollWidth)+ 'px');
      $('#tbl_cnt thead tr td,#tbl_cnt tbody tr td').css('width',  ($('#tbl_cnt thead tr ').width()/Number(col_cnt)) + 'px');}, 100)

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

আজকাল এটি কাজ করে না
MrHIDEn

2

একটি নির্দিষ্ট প্রস্থ যোগ করা হচ্ছে , ম TD করার পর tbody & thead প্রদর্শন ব্লক পুরোপুরি কাজ করে এবং আমরা ব্যবহার করতে পারেন slimscroll প্লাগইন স্ক্রল বার সুন্দর করা।

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

<!DOCTYPE html>
<html>

<head>
    <title> Scrollable table </title>
    <style>
        body {
            font-family: sans-serif;
            font-size: 0.9em;
        }
        table {
            border-collapse: collapse;
            border-bottom: 1px solid #ddd;
        }
        thead {
            background-color: #333;
            color: #fff;
        }
        thead,tbody {
            display: block;
        }
        th,td {
            padding: 8px 10px;
            border: 1px solid #ddd;
            width: 117px;
            box-sizing: border-box;
        }
        tbody {
            height: 160px;
            overflow-y: scroll
        }
    </style>
</head>

<body>

    <table class="example-table">
        <thead>
            <tr>
                <th> Header 1 </th>
                <th> Header 2 </th>
                <th> Header 3 </th>
                <th> Header 4 </th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td> Row 1- Col 1 </td>
                <td> Row 1- Col 2 </td>
                <td> Row 1- Col 3 </td>
                <td> Row 1- Col 4 </td>
            </tr>
            <tr>
                <td> Row 2- Col 1 </td>
                <td> Row 2- Col 2 </td>
                <td> Row 2- Col 3 </td>
                <td> Row 2- Col 4 </td>
            </tr>
            <tr>
                <td> Row 3- Col 1 </td>
                <td> Row 3- Col 2 </td>
                <td> Row 3- Col 3 </td>
                <td> Row 3- Col 4 </td>
            </tr>
            <tr>
                <td> Row 4- Col 1 </td>
                <td> Row 4- Col 2 </td>
                <td> Row 4- Col 3 </td>
                <td> Row 4- Col 4 </td>
            </tr>
            <tr>
                <td> Row 5- Col 1 </td>
                <td> Row 5- Col 2 </td>
                <td> Row 5- Col 3 </td>
                <td> Row 5- Col 4 </td>
            </tr>
            <tr>
                <td> Row 6- Col 1 </td>
                <td> Row 6- Col 2 </td>
                <td> Row 6- Col 3 </td>
                <td> Row 6- Col 4 </td>
            </tr>
            <tr>
                <td> Row 7- Col 1 </td>
                <td> Row 7- Col 2 </td>
                <td> Row 7- Col 3 </td>
                <td> Row 7- Col 4 </td>
            </tr>
            <tr>
                <td> Row 8- Col 1 </td>
                <td> Row 8- Col 2 </td>
                <td> Row 8- Col 3 </td>
                <td> Row 8- Col 4 </td>
            </tr>
            <tr>
                <td> Row 9- Col 1 </td>
                <td> Row 9- Col 2 </td>
                <td> Row 9- Col 3 </td>
                <td> Row 9- Col 4 </td>
            </tr>
            <tr>
                <td> Row 10- Col 1 </td>
                <td> Row 10- Col 2 </td>
                <td> Row 10- Col 3 </td>
                <td> Row 10- Col 4 </td>
            </tr>
            <tr>
                <td> Row 11- Col 1 </td>
                <td> Row 11- Col 2 </td>
                <td> Row 11- Col 3 </td>
                <td> Row 11- Col 4 </td>
            </tr>
            <tr>
                <td> Row 12- Col 1 </td>
                <td> Row 12- Col 2 </td>
                <td> Row 12- Col 3 </td>
                <td> Row 12- Col 4 </td>
            </tr>
            <tr>
                <td> Row 13- Col 1 </td>
                <td> Row 13- Col 2 </td>
                <td> Row 13- Col 3 </td>
                <td> Row 13- Col 4 </td>
            </tr>
            <tr>
                <td> Row 14- Col 1 </td>
                <td> Row 14- Col 2 </td>
                <td> Row 14- Col 3 </td>
                <td> Row 14- Col 4 </td>
            </tr>
            <tr>
                <td> Row 15- Col 1 </td>
                <td> Row 15- Col 2 </td>
                <td> Row 15- Col 3 </td>
                <td> Row 15- Col 4 </td>
            </tr>
            <tr>
                <td> Row 16- Col 1 </td>
                <td> Row 16- Col 2 </td>
                <td> Row 16- Col 3 </td>
                <td> Row 16- Col 4 </td>
            </tr>
        </tbody>
    </table>


    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery-slimScroll/1.3.8/jquery.slimscroll.min.js"></script>
    <script>
        $('.example-table tbody').slimscroll({
            height: '160px',
            alwaysVisible: true,
            color: '#333'
        })
    </script>
</body>

</html>


1

এই কোডটিই আমার পক্ষে টেবিলের উপর স্ক্রোলযোগ্য টোডি সহ একটি স্টিকি থ্যাড তৈরি করতে কাজ করে:

table ,tr td{
    border:1px solid red
}
tbody {
    display:block;
    height:50px;
    overflow:auto;
}
thead, tbody tr {
    display:table;
    width:100%;
    table-layout:fixed;/* even columns width , fix width of table too*/
}
thead {
    width: calc( 100% - 1em )/* scrollbar is average 1em/16px width, remove it from thead width */
}
table {
    width:400px;
}

1

"ওভারফ্লো: স্ক্রোল" ব্যবহারের জন্য আপনাকে থ্যাড এবং টবিতে "প্রদর্শন: ব্লক" সেট করতে হবে। এবং এটি তাদের মধ্যে কলাম প্রস্থ বিভ্রান্ত। তবে আপনি জাভাস্ক্রিপ্টের সাহায্যে থ্যাড সারিটি ক্লোন করতে পারেন এবং সঠিক কোলের প্রশস্ততা রক্ষার জন্য এটি গোপন সারি হিসাবে টিবিতে পেস্ট করতে পারেন।

$('.myTable thead > tr').clone().appendTo('.myTable tbody').addClass('hidden-to-set-col-widths');

http://jsfiddle.net/Julesezaar/mup0c5hk/

<table class="myTable">
    <thead>
        <tr>
            <td>Problem</td>
            <td>Solution</td>
            <td>blah</td>
            <td>derp</td>
        </tr>
    </thead>
    <tbody></tbody>
</table>
<p>
  Some text to here
</p>

সিএসএস:

table {
  background-color: #aaa;
  width: 100%;
}

thead,
tbody {
  display: block; // Necessary to use overflow: scroll
}

tbody {
  background-color: #ddd;
  height: 150px;
  overflow-y: scroll;
}

tbody tr.hidden-to-set-col-widths,
tbody tr.hidden-to-set-col-widths td {
  visibility: hidden;
  height: 0;
  line-height: 0;
  padding-top: 0;
  padding-bottom: 0;
}

td {
  padding: 3px 10px;
}

0

এই jsfiddle চেষ্টা করুন । এটি jQuery ব্যবহার করছে এবং হাশেম কুলামির উত্তর থেকে তৈরি। প্রথমে একটি নিয়মিত টেবিল তৈরি করুন তারপরে এটিকে স্ক্রোলযোগ্য করুন।

const makeScrollableTable = function (tableSelector, tbodyHeight) {
  let $table = $(tableSelector);
  let $bodyCells = $table.find('tbody tr:first').children();
  let $headCells = $table.find('thead tr:first').children();
  let headColWidth = 0;
  let bodyColWidth = 0;

  headColWidth = $headCells.map(function () {
    return $(this).outerWidth();
  }).get();
  bodyColWidth = $bodyCells.map(function () {
    return $(this).outerWidth();
  }).get();

  $table.find('thead tr').children().each(function (i, v) {
    $(v).css("width", headColWidth[i]+"px");
    $(v).css("min-width", headColWidth[i]+"px");
    $(v).css("max-width", headColWidth[i]+"px");
  });
  $table.find('tbody tr').children().each(function (i, v) {
    $(v).css("width", bodyColWidth[i]+"px");
    $(v).css("min-width", bodyColWidth[i]+"px");
    $(v).css("max-width", bodyColWidth[i]+"px");
  });

  $table.find('thead').css("display", "block");
  $table.find('tbody').css("display", "block");

  $table.find('tbody').css("height", tbodyHeight+"px");
  $table.find('tbody').css("overflow-y", "auto");
  $table.find('tbody').css("overflow-x", "hidden");

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