Разбить содержимое ячейки таблицы при достижении максимальной ширины

У меня есть таблица HTML, как это:

div {
  width: 100%;
  overflow-x: auto;
}

table {
  white-space: nowrap;
}

td {
  border: 1px solid gray;
  padding: 5px 10px;
  
  min-width: 100px;
  max-width:40vw;
}
<div>
  <table style = "width: 100%;">
    <tr>
      <td class = "block">1</td>
      <td class = "block">A table cell content</td>
      <td class = "block">This should be a text that breaks after 200px Lorem ipsum dolor sit amet</td>
      <td class = "block">A table cell content</td>
      <td class = "block">A table cell content</td>
      <td class = "block">A table cell content</td>
      <td class = "block">A table cell content</td>
    </tr>
  </table>
</div>

Результат:

Разбить содержимое ячейки таблицы при достижении максимальной ширины

Проблема в том, что текст должен переноситься при достижении max-width. Я знаю, что white-space: nowrap вызывает эту проблему, но без этого текст переносится до достижения max-width.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
0
279
2

Ответы 2

JsFiddle

td {
  border: 1px solid gray;
  padding: 5px 10px;
  min-width: 100px;
  max-width:40vw;
  white-space: pre-wrap
}

Добавить white-space: pre-wrap в td или удалить white-space: nowrap в table

Можете ли вы добавить тег span в td, чтобы получить такой результат?

span {
  white-space: pre-wrap
}

JsFiddle 2

Но вы установили width:100% в свой table. Я установил его в пикс. вот так width:1500px. Если вы установите 100% ширина в таблице, оставшиеся столбцы будут переносить этот текст до достижения его максимальной ширины.

JsFiddle 2 с шириной: 100%

Вы можете проверить приведенную выше скрипку, я установил width:100% в table и удалил последние 2 столбца. Теперь длинный текстовый столбец будет адаптироваться к 40vw, а остальные столбцы не будут предварительно обтекать текст. Таким образом, это также зависит от ширины вашей родительской таблицы.

Я уточнил вопрос: проблема в том, что текст должен переноситься на нет до достижения max-width

Koopakiller 28.02.2019 07:18

@Koopakiller Можешь проверить мою вторую скрипку?

Karuppiah RK 28.02.2019 07:30

Это не то, чего я хочу... Я бы хотел, чтобы таблица была как можно меньше, но, если необходимо, увеличивалась до max-width в каждом столбце в зависимости от vw. Означает: я ничего не знаю о содержимом таблицы, но пользователь должен иметь возможность читать содержимое как можно проще, что означает, что мне не нравится указывать ширину таблицы, я не знаю, сколько столбцов в ней имеет

Koopakiller 28.02.2019 07:51

так как у вас есть white-space: nowrap;, он не сломается, но вы можете добавить класс к td, который вы хотите сломать, надеюсь, это поможет вам, спасибо.

.no-white-space{
white-space: normal;
}

div {
  width: 100%;
  overflow-x: auto;
}

table {
  white-space: nowrap;
}

td {
  border: 1px solid gray;
  padding: 5px 10px;
  
  min-width: 100px;
  max-width:40vw;
}

.no-white-space{
white-space: normal;
}
<div>
  <table>
    <tr>
      <td class = "block">1</td>
      <td class = "block">A table cell content</td>
      <td class = "block no-white-space">This should be a text that breaks after 200px Lorem ipsum dolor sit amet</td>
      <td class = "block">A table cell content</td>
      <td class = "block">A table cell content</td>
      <td class = "block">A table cell content</td>
      <td class = "block">A table cell content</td>
    </tr>
  </table>
</div>

Я хотел бы избежать того, что мне нужно каким-либо образом обрабатывать текст. Добавление другого класса не так просто реализовать, чем простое решение CSS.

Koopakiller 28.02.2019 07:23

@Koopakiller, похоже, этот ответ не обрабатывает текст. Что означает ваше второе предложение? Добавление класса — это простое решение CSS.

dgrogan 02.03.2019 01:22

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

Koopakiller 03.03.2019 15:41

Другие вопросы по теме