Расширение таблицы по горизонтали - PullRequest
1 голос
/ 03 февраля 2012

Я хочу создать таблицу со столбцами фиксированного размера (за исключением первого, который расширяется до самой широкой ячейки). Проблема заключается в том, что при недостаточном пространстве по горизонтали полоса прокрутки не появляется, а столбцы сокращаются. Также я хочу, чтобы ячейки скрывали контент, когда он слишком длинный. Я попытался возиться с переполнением, но это не помогло. Вот код:

<table>
<tr>
    <td>1</td>
    <td style="width: 9999px">2</td>
    <td style="width: 9999px">3</td>
</tr>
<tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
</tr>
<tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
</tr>

EDIT: Было много недоразумений, поэтому я все напишу здесь: Первый столбец настолько широкий, насколько это необходимо (это означает, что он просто соответствует размеру самой широкой ячейки внутри, это поведение HTML по умолчанию). Остальные столбцы исправлены. Это означает, что независимо от того, какой контент находится внутри них, их ширина не может измениться. Когда ширина содержимого превышает фиксированную ширину столбца, он просто скрывается, как при переполнении стиля CSS: hidden ;. Если горизонтального пространства недостаточно для отображения таблицы, должна появиться полоса прокрутки.

Ответы [ 3 ]

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

Вот что я бы сделал:

Html:

<table>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>

CSS:

* {
    -moz-box-sizing: border-box;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
}

table {
    width: 100%;
    table-layout:fixed;
    word-wrap:break-word;
}

table td {
    width:9999px;
    border: 1px solid black;
    overflow: hidden;
}

table tr td:first-child {
    width: 10px;
    border: 1px solid black;
}

А потом просто:

  1. установить ширину первого столбца так, как вы хотите.
  2. установить переполнение: прокрутить контейнер таблицы

Решение заключается в свойстве table-layout:fixed;, которое определяет, что таблица должна быть точно такой же ширины, как вы ее определили. так как это может испортить ваш текст (он будет полностью перекрывать друг друга), вы можете добавить word-wrap:break-word;, чтобы разбить слова на несколько строк.

table-layout:fixed; довольно хорошо поддерживается, за исключением IE / Mac (http://caniuse.com/#search=table-layout), word-wrap:break-word; менее поддерживается (хотя http://caniuse.com/#search=word-wrap показывает иное, break-word немного сложно. ., но вы можете оставить его там, так как это не повредит вам и сделает ваш сайт перспективным.

РЕДАКТИРОВАТЬ Я получил то, что вы хотите: первый столбец гибкий, остальные на фиксированной с. Без кардинального изменения html (и создания некрасивого несемантического неэффективного монстра) это невозможно (на данный момент). Позвольте мне объяснить вам, почему:

Чтобы таблица была фиксированного размера (ширина всех фиксированных столбцов + что-то), вы должны установить table-layout:fixed;. Это говорит браузеру рассчитать ширину таблицы перед ее отображением, чтобы он мог отображать ее даже до того, как весь контент был загружен (бонус для вас: повышение производительности! ). Но теперь вы хотите, чтобы один столбец был гибким, поэтому он должен был бы вычислять ширину во время выполнения, и мы просто предотвратили это, чтобы иметь столбцы фиксированной ширины.

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

РЕДАКТИРОВАТЬ 2 Хорошо, попробовав некоторые идеи, я пришел к выводу, что единственный способ достичь желаемого эффекта - сбросить table, и создайте структуру из div с и span с, плавающую влево и вправо, с display: inline-block и переносами слов ... не совсем семантически, если вам нужно показать табличные данные. И, безусловно, не подлежит ремонту. Это твой звонок ...

РЕДАКТИРОВАТЬ 3 И здесь у вас есть живая демонстрация, основанная на jsfiddle от Blowski : http://jsfiddle.net/ramsesoriginal/KcV9B/

0 голосов
/ 03 февраля 2012
<style>
td.fixed
{
    width:200px;
    overfolw:hidden;
}
td.first
{
    width:auto;
    overflow:scroll;
}
</style>
<table>
<tr>
<td class="first">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor.</td>
<td class="fixed">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor. </td>
<td class="fixed">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor. </td>
</tr>
<tr>
<td class="first">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor.</td>
<td class="fixed">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor. </td>
<td class="fixed">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor. </td>
</tr>
<tr>
<td class="first">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor. </td>
<td class="fixed">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor. </td>
<td class="fixed">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget vulputate velit. Nam luctus orci in felis ullamcorper venenatis elementum metus volutpat. Aliquam ac faucibus odio. Duis laoreet commodo dolor, at hendrerit magna semper id. Proin euismod pellentesque dapibus. Duis a nulla est. Aenean sed ligula at nibh pellentesque tempor. </td>
</tr>
</table>

Я думаю, что переполнение: прокрутка в первой строке не должна давать вам полосу прокрутки, но она будет закреплять другие строки справа от области просмотра. Так что, по сути, первая строка имеет определенную ширинувне зависимости от ширины области просмотра после того, как фиксированные столбцы занимают свое место.

Полоса прокрутки, которую вы БУДЕТЕ, представляет собой вертикальную полосу прокрутки в браузере, когда содержимое первой строки перемещается ниже сгиба.

0 голосов
/ 03 февраля 2012

overflow:scroll должен быть установлен для любого элемента, содержащего таблицу.Это должно заставить полосу прокрутки появляться.Кроме этого, ваш код должен быть в порядке.

...