Сортировка html списка ul / li в алфавитных вертикальных блоках - PullRequest
7 голосов
/ 04 января 2011

Вот проблема, с которой я сталкиваюсь время от времени, и которую я обычно пытаюсь решить с внутренней стороны, но хотел бы знать, есть ли какое-то волшебное решение, найденное другими для решения этой проблемы на внешнем интерфейсе.

Учитывая список ul / li, предоставленный в разметке в алфавитном порядке, от az:

<ul>
    <li>Alpha</li>
    <li>Bravo</li>
    <li>Charlie</li>
    <li>Delta</li>
    <li>Echo</li>
    <li>Foxtrot</li>
    <li>Golf</li>
    <li>Hotel</li>
    <li>India</li>
    <li>Juliet</li>
    <li>Kilo</li>
    <li>Lima</li>
    <li>Mike</li>
    <li>November</li>
    <li>Oscar</li>
    <li>Papa</li>
    <li>Quebec</li>
    <li>Romeo</li>
    <li>Sierra</li>
    <li>Tango</li>
    <li>Uniform</li>
    <li>Victor</li>
    <li>Whiskey</li>
    <li>X-ray</li>
    <li>Yankee</li>
    <li>Zulu</li>
</ul>

Как правило, очень просто перемещать оставленные элементы и сортировать их визуально по горизонтали в блоках, например:

One UL/LI list with the li elements floated left

Однако, чтобы получить столбцы, например:

Four UL/LI lists with the ul elements floated left

Мне всегда приходилось разбивать HTML на отдельныеобъекты, такие как четыре отдельных элемента <ul> в приведенном выше примере.

Есть ли способ сохранить все это в одном списке ul без какой-либо дополнительной разметки, используя только CSS (без JavaScript), чтобы получить столбчатый видкак второе изображение выше?Я предполагаю «нет», но я уже видел какое-то волшебство, и я хотел бы ответить на него более определенно.

Ответы [ 4 ]

4 голосов
/ 04 января 2011

Боюсь, пока нет.

У CSS3 есть несколько приятных функций, см., Например, http://www.quirksmode.org/css/multicolumn.html, но Internet Explorer не поддерживает его, и я не знаю, как будет работать поддержка в IE9.быть (в соответствии с Microsoft в настоящее время не существует в бета-версии)

1 голос
/ 13 февраля 2015

Если вы делаете это в PHP, вы можете использовать простой счетчик и %.Мне удалось сделать это в WordPress, получив список пользовательских таксономий, например, так:

<div class="row gutters">

    <?php $taxos = get_categories ( array( 'taxonomy' => 'make' ) ); ?>

    <?php $count = 0; ?>

    <div class="col col_2">

        <ul>

            <?php foreach( $taxos as $tax ) : ?>

                <li><a href="/make/<?php echo $tax->slug; ?>"><?php echo $tax->name; ?></a></li>

                <?php $count++; ?>

                <?php if( $count % 5 == 0 ) echo '</div></ul><div class="col col_2"><ul>'; ?>

            <?php endforeach; ?>

        </ul>

    </div>

</div>

Вы также можете перебрать массив и получить то же самое.Вывод выглядит примерно так:

a    f
b    g
c    h
d    i
e    j
1 голос
/ 24 февраля 2014

Я нуждался в этом сегодня и написал этот эквивалент Python.Вы можете написать с родным JavaScript.

# -*- coding: utf8 -*-
import math
# --------------------- EDIT THIS PART
#define columns
c = 4
# you can define to alphabetical list here
# i used to numbers, because range func. very effective for testing
list = range(1, 26, 1)
# ---------------------- END OF EDIT
# firstly sort

list = sorted(list)

# calculate total row
r = int(math.ceil(len(list) / c)) + (1 if len(list) % c is not 0 else 0)

index = 0
table1 = []
for x in range(c):
    table1.append([])
    for y in range(r):
        if len(list) > index:
            table1[x].append(y)
            table1[x][y] = list[index]
            index += 1


res = ''
for i in range(r):
    for x in table1:
        try:
            #print x[i]
            res += "%s\t|\t" % x[i]
        except IndexError:
            res += "%s\t|\t" % "_"
            pass
    res += "\n"

#print table1
print res

https://github.com/berkantaydin/vertical-alphabetical-sorting-with-columns

1 голос
/ 21 февраля 2012

Вы можете использовать CSS3 Multicolumn Layouts и его заполнение: https://github.com/gryzzly/CSS-Multi-column-Layout-Module-Polyfill

...