2017-01-04 3 views
4

У меня есть таблица с четырьмя колоннами и двумя рядами следующим образом:Реструктурировать столы с медиазапросы

<table> 
<tr> 
    <td> A </td> 
    <td> B </td> 
    <td> C </td> 
    <td> D </td> 
</tr> 
<tr> 
    <td> E </td> 
    <td> F </td> 
    <td> G </td> 
    <td> H </td> 
</tr> 
</table> 

Использование media запроса, такие как @media (max-width: 800px), я хочу перестроить эту таблицу, чтобы вместо того, чтобы иметь два столбца и четыре ряда, например:

<table> 
<tr> 
    <td> A </td> 
    <td> B </td> 
</tr> 
<tr> 
    <td> C </td> 
    <td> D </td> 
</tr> 
<tr> 
    <td> E </td> 
    <td> F </td> 
</tr> 
<tr> 
    <td> G </td> 
    <td> H </td> 
</tr> 
</table> 

Возможно ли это? Решения в JavaScript также приветствуются, если, как я полагаю, это не может быть сделано с помощью простого CSS.

+1

Посмотрите на это [Таблицы Media Queries Data] (https://css-tricks.com/responsive-data-tables/) – Paul

+2

, если вы хотите сделать это в виде таблицы , то вам придется использовать JS или использовать псевдоэлементы, как предлагает @Paul. Если вы можете использовать divs, вы можете пойти на чистую опцию CSS. – Orangesandlemons

+0

Вы можете использовать CSS для визуального получения того же результата, но физическую базовую структуру таблицы не следует трогать с помощью CSS (при условии, что это возможно). Если у вас нет контроля над исходным кодом, который генерирует начальную таблицу, это выглядит как вы возможно, потребуется создать сценарий на основе сценария, который преобразует таблицу «структура A» в «структуру B», если вы должны физически изменить структуру в DOM – Nope

ответ

1

Pure CSS

Изменение внешнего вида с помощью float с и nth-child.

td { float:left; display:inline-block; } 
td:nth-child(3) { 
    clear:both; 
} 

https://jsfiddle.net/hks5d6th/2/

JavaScript

Перебор всех применимых столбцов и использовать оператор модуля, чтобы определить, где разделить в новые строки.

var table = document.getElementsByTagName('table')[0], 
    columns = Array.prototype.slice.call(document.getElementsByTagName('td')), 
    newTable = document.createElement('table'), html; 

columns.forEach(function(next, idx) { 
    if (idx % 2 === 0 || idx === 0) { 
    html += '<tr>' + next.outerHTML; 
    return; 
    } 
    html += next.outerHTML + '</tr>'; 
}); 

newTable.innerHTML = html; 
table.replaceWith(newTable); 

https://jsfiddle.net/hks5d6th/1/

+0

Большое спасибо. Я читал оба метода, но я недостаточно продвинулся, чтобы понять JS: «) CSS отлично работает! –

+0

Только один вопрос: будет ли чистый метод css работать с нечетным числом столбцов (т. Е. Тремя столбцами)? –

+0

Это работает только потому, что в строке четыре столбца. если вы хотите, чтобы он работал каждые три столбца, вам понадобилось бы шесть столбцов на строку, тогда каждый 'nth-child (4)' имел бы три строки столбца ... – xandercoded

Смежные вопросы