দুটি কলামে একটি অর্র্ডারড তালিকা প্রদর্শন করবেন কীভাবে?


215

নিম্নলিখিত এইচটিএমএল দিয়ে, দুটি কলাম হিসাবে তালিকা প্রদর্শন করার সবচেয়ে সহজ পদ্ধতি কোনটি?

<ul>
    <li>A</li>
    <li>B</li>
    <li>C</li>
    <li>D</li>
    <li>E</li>
</ul>

পছন্দসই প্রদর্শন:

A B
C D
E

সমাধানটি ইন্টারনেট এক্সপ্লোরারে কাজ করতে সক্ষম হওয়া প্রয়োজন।


1
এটি কীভাবে সহজে jquery এ করা যায় তার একটি জীবন্ত উদাহরণ এখানে দেওয়া হয়েছে: jsfiddle.net/EebVF/5 এই jquery প্লাগইন ব্যবহার করে: github.com/fzondlo/jquery- কলামগুলি - সিএসএসের তুলনায় আমি এটিকে আরও ভাল পছন্দ করি কারণ সিএসএস সমাধানের সাথে সবকিছু সরে যায় না শীর্ষে উল্লম্বভাবে।
ব্যবহারকারী নাম এখানে

উত্তর:


371

আধুনিক ব্রাউজারগুলি

আপনি যা খুঁজছেন তা সমর্থন করার জন্য CSS3 কলাম মডিউলটি উত্তোলন করুন।

http://www.w3schools.com/cssref/css3_pr_columns.asp

সিএসএস:

ul {
  columns: 2;
  -webkit-columns: 2;
  -moz-columns: 2;
}

http://jsfiddle.net/HP85j/8/

লিগ্যাসি ব্রাউজারগুলি

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

http://jsfiddle.net/HP85j/19/

এইচটিএমএল:

<div>
    <ul class="columns" data-columns="2">
        <li>A</li>
        <li>B</li>
        <li>C</li>
        <li>D</li>
        <li>E</li>
        <li>F</li>
        <li>G</li>
    </ul>
</div>

javascript:

(function($){
    var initialContainer = $('.columns'),
        columnItems = $('.columns li'),
        columns = null,
        column = 1; // account for initial column
    function updateColumns(){
        column = 0;
        columnItems.each(function(idx, el){
            if (idx !== 0 && idx > (columnItems.length / columns.length) + (column * idx)){
                column += 1;
            }
            $(columns.get(column)).append(el);
        });
    }
    function setupColumns(){
        columnItems.detach();
        while (column++ < initialContainer.data('columns')){
            initialContainer.clone().insertBefore(initialContainer);
            column++;
        }
        columns = $('.columns');
    }

    $(function(){
        setupColumns();
        updateColumns();
    });
})(jQuery);

সিএসএস:

.columns{
    float: left;
    position: relative;
    margin-right: 20px;
}

সম্পাদনা করুন:

নীচে চিহ্নিত হিসাবে এটি নীচে কলামগুলি আদেশ করবে:

A  E
B  F
C  G
D

যখন ওপি নীচের সাথে মেলে একটি বৈকল্পিক চেয়েছিল:

A  B
C  D
E  F
G

বৈকল্পিকটি সম্পাদন করতে আপনি কেবল কোডটি নিম্নলিখিতটিতে পরিবর্তন করতে পারেন:

function updateColumns(){
    column = 0;
    columnItems.each(function(idx, el){
        if (column > columns.length){
            column = 0;
        }
        $(columns.get(column)).append(el);
        column += 1;
    });
}

2
আপনি আইটেমগুলি সঠিক ক্রমে প্রদর্শন করছেন না: jsfiddle.net/HP85j/258 উদাহরণস্বরূপ, প্রথম লাইনে পছন্দসই প্রদর্শনটি হচ্ছে A B(দ্বিতীয় উপাদানটি ডানদিকে সংযোজন করা উচিত) তবে আপনার উদাহরণগুলিতে তা হল A E
পাওলো মোরেটি

1
দুর্দান্ত কাজ, যদিও 2 টিরও বেশি কলাম রয়েছে যুক্তি ত্রুটিযুক্ত থাকলেও আমি এখানে সমাধানটি
Tr1stan

2
গুলি অনুপস্থিত
জয়দার

1
তালিকাটি কলাম 2 কলামের আগে 1 টি পূরণ করার জন্য সম্ভবত এটি সম্ভবত আরও বেশি সম্ভাবনা রয়েছে want তালিকার আইটেমগুলি কেবল পুনরায় সাজানো আরও সহজ হতে পারে যাতে দেখা যায় যে তারা নিচে নেমে যাওয়ার আগে ভরাট হয়েছে। অবশ্যই তালিকাটির পরিবর্তন হলে এটি পুনরায় করার প্রয়োজন হতে পারে। যাইহোক, গ্যাব্রিয়েলের সিএসএসের উত্তরটি আমার যা প্রয়োজন ঠিক তা ছিল, আপনাকে ধন্যবাদ!
পুষ্ট্রেস

3
মাত্র একটি দেরী আপডেট, আমি বিশ্বাস করি প্রথম বিকল্পটি এখন আধুনিক আই ব্রাউজারগুলিতে কাজ করবে।
ফিজ

82

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

ul{
    list-style-type: disc;
    -webkit-columns: 2;
    -moz-columns: 2;
    columns: 2;
    list-style-position: inside;//this is important addition
}

ডিফল্টরূপে আন-অর্ডারযুক্ত তালিকার বাইরে বুলেট অবস্থানটি প্রদর্শন করা হয় তবে কিছু ব্রাউজারে এটি আপনার ওয়েবসাইটটি রাখার ব্রাউজারের পদ্ধতির উপর ভিত্তি করে কিছু ডিসপ্লে সমস্যা তৈরি করে।

বিন্যাসে প্রদর্শন করতে এটি পেতে:

A B
C D
E

ইত্যাদি নিম্নলিখিত ব্যবহার:

ul li{
    float: left;
    width: 50%;//helps to determine number of columns, for instance 33.3% displays 3 columns
}
ul{
    list-style-type: disc;
}

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


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

1
আমি এটি সামান্য ফ্ল্যাট পরিবর্তন করে দেখিয়েছি: প্রদর্শন করতে বাম: লি উপাদানগুলির জন্য ইনলাইন-ব্লক, এটি ছাড়া এটি আমার জন্য বিস্ময়কর কাজ করেছে।
জেরেমেজ

41

আমি এটিকে একটি মন্তব্য হিসাবে পোস্ট করার চেষ্টা করেছি, তবে কলামগুলি ডানদিকের (আপনার প্রশ্ন অনুসারে) প্রদর্শিত করতে পেলাম না।

আপনি জিজ্ঞাসা করছেন:

এবি

সিডি

... তবে সমাধান হিসাবে গৃহীত উত্তর ফিরে আসবে:

বিজ্ঞাপন

থাকা

সি

... সুতরাং হয় উত্তর ভুল বা প্রশ্ন হয়।

খুব সহজ সমাধান হ'ল আপনার প্রস্থ নির্ধারণ করা <ul>এবং তারপরে ভেসে উঠুন এবং আপনার <li>আইটেমগুলির প্রস্থটি ঠিক সেট করুন

<ul>
    <li>A</li>
    <li>B</li>
    <li>C</li>
    <li>D</li>
    <li>E</li>
</ul>

ul{
    width:210px;
}
li{
    background:green;
    float:left;
    height:100px;
    margin:0 10px 10px 0;
    width:100px;
}
li:nth-child(even){
    margin-right:0;
}

উদাহরণ এখানে http://jsfiddle.net/Jayx/Qbz9S/1/

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


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

16

আমি আধুনিক ব্রাউজারগুলির জন্য সমাধানটি পছন্দ করি তবে বুলেটগুলি অনুপস্থিত, তাই আমি এটিকে একটি সামান্য কৌশল যুক্ত করি:

http://jsfiddle.net/HP85j/419/

ul {
    list-style-type: none;
    columns: 2;
    -webkit-columns: 2;
    -moz-columns: 2;
}


li:before {
  content: "• ";
}

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


এখানে আমরা বুলেট রঙ পরিবর্তন ছাড়াই আইটেম রঙ পরিবর্তন করতে পারেন jsfiddle.net/HP85j/444
Jaider

3
আমি মনে করি list-style-position: inside;বুলেটগুলি সঠিকভাবে প্রদর্শিত হওয়ার জন্য এটি আরও ভাল সমাধান।
অ্যালেক্সিস উইল্ক

11

এখানে একটি সম্ভাব্য সমাধান:

স্নিপেট:

ul {
  width: 760px;
  margin-bottom: 20px;
  overflow: hidden;
  border-top: 1px solid #ccc;
}
li {
  line-height: 1.5em;
  border-bottom: 1px solid #ccc;
  float: left;
  display: inline;
}
#double li {
  width: 50%;
}
<ul id="double">
  <li>first</li>
  <li>second</li>
  <li>third</li>
  <li>fourth</li>
</ul>

এবং এটি সম্পন্ন হয়।
৩ টি কলামের জন্য liপ্রস্থটি 33% হিসাবে ব্যবহার করা হয় , 4 কলামের জন্য 25% ব্যবহার করে থাকে।


5

এটি করার সহজ উপায় এটি। কেবল সিএসএস।

  1. উল উপাদানটিতে প্রস্থ যুক্ত করুন।
  2. প্রদর্শন যোগ করুন: নতুন কলামের ইনলাইন-ব্লক এবং প্রস্থ (উল প্রস্থের অর্ধেকের কম হওয়া উচিত)।
ul.list {
  width: 300px;  
}

ul.list li{
  display:inline-block;
  width: 100px;
}
<ul class="list">
    <li>A</li>
    <li>B</li>
    <li>C</li>
    <li>D</li>
    <li>E</li>
</ul>

2
এই উত্তরটি কীভাবে বর্তমান সমস্যা সমাধানে
ওপিকে

4

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

বি

সি

ডি

 <ul class="columns">
    <li>A</li>
    <li>B</li>
    <li>C</li>
    <li>D</li>
    <li>E</li>
</ul>

ul.columns  {
   -webkit-columns: 60px 2;
   -moz-columns: 60px 2;
    columns: 60px 2;
   -moz-column-fill: auto;
   column-fill: auto;
 }

3

এটি পিতামহ বিভাজনে কলাম-গণনা CSS সম্পত্তি ব্যবহার করে অর্জন করা যেতে পারে,

মত

 column-count:2;

আরও বিশদ জন্য এই পরীক্ষা করে দেখুন।

কীভাবে ভাসমান ডিআইভি তালিকা সারণীতে নয় কলামগুলিতে প্রদর্শিত হবে


1
column-countসঠিক ক্রমে আইটেম প্রদর্শন করবে না। উদাহরণস্বরূপ, প্রথম লাইনে পছন্দসই প্রদর্শনটি হ'ল A B(দ্বিতীয় উপাদানটি ডানদিকে সংযুক্ত করা উচিত) তবে আপনি column-countএটি ব্যবহার করলে তা হবে A E
পাওলো মোরেত্তি

2

আপনি জিক্যুরি -কলামগুলি প্লাগিনের সাহায্যে খুব সহজেই এটি করতে পারেন উদাহরণস্বরূপ। মাইলিস্টের একটি শ্রেণীর সাথে একটি বিভক্ত করতে to

$('.mylist').cols(2);

এখানে jsfiddle উপর একটি লাইভ উদাহরণ

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


আকর্ষণীয়, কিন্তু এটি আসলে <ul>একাধিক তালিকার তালিকাকে ভেঙে দেয় ... যা অন্যান্য জিনিসগুলিকে জটিল করে তুলতে পারে।
অ্যালেক্সিস উইল্ক

এটি প্রকৃতপক্ষে সমাধানটি যা আমি ধন্যবাদ দেওয়ার পরে পেয়েছিলাম, ডাউনওয়োটারের কাছে এই উত্তরটি বৈধ হয় যদি আপনি ওপির প্রশ্নটি পড়ে থাকেন এবং ডিভি করার দরকার পড়ে না।
কৌশলটি

2

কয়েক বছরের পরে আরও একটি উত্তর!

এই নিবন্ধে: http://csswizardry.com/2010/02/mutiple-column-lists-used-one-ul/

এইচটিএমএল:

<ul id="double"> <!-- Alter ID accordingly -->
  <li>CSS</li>
  <li>XHTML</li>
  <li>Semantics</li>
  <li>Accessibility</li>
  <li>Usability</li>
  <li>Web Standards</li>
  <li>PHP</li>
  <li>Typography</li>
  <li>Grids</li>
  <li>CSS3</li>
  <li>HTML5</li>
  <li>UI</li>
</ul>

সিএসএস:

ul{
  width:760px;
  margin-bottom:20px;
  overflow:hidden;
  border-top:1px solid #ccc;
}
li{
  line-height:1.5em;
  border-bottom:1px solid #ccc;
  float:left;
  display:inline;
}
#double li  { width:50%;}
#triple li  { width:33.333%; }
#quad li    { width:25%; }
#six li     { width:16.666%; }

1

ইন updateColumns()প্রয়োজন if (column >= columns.length)বদলে if (column > columns.length)সব উপাদান তালিকা (গ উদাহরণস্বরূপ এড়ানো হয়) তাই হয়:

function updateColumns(){
    column = 0;
    columnItems.each(function(idx, el){
        if (column >= columns.length){
            column = 0;
        }
        console.log(column, el, idx);
        $(columns.get(column)).append(el);
        column += 1;
    });
}

http://jsfiddle.net/e2vH9/1/



1

শীর্ষ উত্তরের উত্তরাধিকার সমাধানটি আমার পক্ষে কার্যকর হয়নি কারণ আমি পৃষ্ঠায় একাধিক তালিকাগুলি প্রভাবিত করতে চেয়েছিলাম এবং উত্তরটি একটি একক তালিকা ধরেছে এবং এটি বিশ্বব্যাপী ন্যায্য বিস্তৃত ব্যবহার করে। এই ক্ষেত্রে আমি প্রতিটি তালিকার ভিতরে একটি পরিবর্তন করতে চেয়েছিলাম <section class="list-content">:

const columns = 2;
$("section.list-content").each(function (index, element) {
    let section = $(element);
    let items = section.find("ul li").detach();
    section.find("ul").detach();
    for (let i = 0; i < columns; i++) {
        section.append("<ul></ul>");
    }
    let lists = section.find("ul");
    for (let i = 0; i < items.length; i++) {
        lists.get(i % columns).append(items[i]);
    }
});

উদাহরণস্বরূপ কীভাবে দুটি কলাম তৈরি করা সম্ভব, একটিতে কেবল টাইল থাকে এবং অন্যটি একটি অপরিবর্তিত তালিকা থাকে?
দালেক

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

1

যদিও আমি গ্যাব্রিয়েলকে একটি ডিগ্রিতে কাজ করার উত্তরটি পেয়েছি তবে তালিকাটি উল্লম্বভাবে অর্ডার করার চেষ্টা করার সময় আমি নিম্নলিখিতটি পেয়েছি (প্রথম উল এডি এবং দ্বিতীয় উল ইজি):

  • যখন উলটিতে একটি সমান সংখ্যক লি'র উপস্থিতি ছিল তখন এটি সমানভাবে উল এর মধ্যে ছড়িয়ে পড়েনি
  • উল-তে ডেটা-কলাম ব্যবহার করা খুব ভালভাবে কাজ করছে বলে মনে হচ্ছে না, আমাকে 3 টি কলামের জন্য 4 রাখতে হয়েছিল এবং তারপরেও এটি কেবল জেএস দ্বারা উত্পাদিত উলের 2 টিতে লি লি'কে ছড়িয়ে দিচ্ছিল

আমি জিকুয়েরিটি সংশোধন করেছি যাতে আশা করা যায় যে উপরের অংশটি না ঘটে।

(function ($) {
    var initialContainer = $('.customcolumns'),
        columnItems = $('.customcolumns li'),
        columns = null,
        column = 0;
    function updateColumns() {
        column = 0;
        columnItems.each(function (idx, el) {
            if ($(columns.get(column)).find('li').length >= (columnItems.length / initialContainer.data('columns'))) {
                column += 1;
            }
            $(columns.get(column)).append(el);
        });
    }
    function setupColumns() {
        columnItems.detach();
        while (column++ < initialContainer.data('columns')) {
            initialContainer.clone().insertBefore(initialContainer);
            column++;
        }
        columns = $('.customcolumns');
        updateColumns();
    }

    $(setupColumns);
})(jQuery);
.customcolumns {
  float: left;
  position: relative;
  margin-right: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
  <ul class="customcolumns" data-columns="3">
    <li>A</li>
    <li>B</li>
    <li>C</li>
    <li>D</li>
    <li>E</li>
    <li>F</li>
    <li>G</li>
    <li>H</li>
    <li>I</li>
    <li>J</li>
    <li>K</li>
    <li>L</li>
    <li>M</li>
  </ul>
</div>

-1

এটি আমার জন্য একটি সঠিক সমাধান ছিল, এটি বছরের পর বছর ধরে খুঁজছেন:

http://css-tricks.com/forums/topic/two-column-unordered-list/


3
"সর্বদা একটি গুরুত্বপূর্ণ লিংক সর্বাধিক প্রাসঙ্গিক অংশ উদ্ধৃত ক্ষেত্রে লক্ষ্য সাইটে পাওয়া যাচ্ছে না বা স্থায়ীভাবে অফলাইন যায়" - stackoverflow.com/help/how-to-answer
Sk8erPeter

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