Мне нужна помощь в преобразовании таблицы в адаптивные элементы div, и я не знаю, как лучше всего

Я думаю, мне нужно преобразовать этот макет или вид, сделанный с таблицей в html, в Divs. Структура таблицы представляет собой два столбца с изображением на одной стороне и текстом, связанным с изображением, на другой. При достаточно маленьком сжатии (например, на мобильном устройстве) мне нужно, чтобы столбцы переходили от двух к сложенным или к одному столбцу. Я не знаю, нужно ли мне использовать точки останова и никогда их не было... или есть какое-то другое более гибкое решение для воспроизведения структуры, которую я включил ниже. Это нужно сделать в текстовом редакторе темы Wordpress Divi.

Прямо сейчас я пытаюсь сделать эту работу, используя Materialize (https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css) в этой кодовой ручке. Я понятия не имею, будет ли materialize работать даже в WordPress...

Кодепен https://codepen.io/robmatthews/pen/qebwor

<table height = "557" style = "width: 800px; border-color: #ffffff; background-color: #ffffff; height: 702px; margin-left: auto; margin-right: auto;" border = "#fff">
  <tbody>
    <tr>
      <td style = "width: 373px; border-color: #ffffff; background-color: #ffffff;">
        <h2><img src = "http://projectorbach.com/wp-content/uploads/2019/07/clipboard.png" width = "174" height = "171" alt = "" class = "wp-image-35671 alignnone size-full" style = "display: block; margin-left: auto; margin-right: auto;" /></h2>
        <h2 style = "text-align: center;"><span>Create Team Rosters</span><span></span></h2>
        <div class = "col"></div>
      </td>
      <td style = "width: 373px; border-color: #ffffff; background-color: #ffffff;">
        <div class = "col">
          <div class = "col">Easily input new clients and team rosters.</div>
          <div class = "col"></div>
        </div>
      </td>
    </tr>
    <tr>
      <td style = "width: 373px;"><span>Easy to create and easy to use. Our player evals are done through a grid. We start with templates based on age group and sport. Then, you can customize the skills and stats you want to track.</span></td>
      <td style = "width: 373px;">
        <h2 style = "text-align: center;"><span class = "blue"><img src = "http://projectorbach.com/wp-content/uploads/2019/07/eval.png" width = "181" height = "167" alt = "" class = "wp-image-35673 alignnone size-full" /><br /> </span><span class = "blue">Evaluate Your Players</span><span></span></h2>
      </td>
    </tr>
    <tr>
      <td style = "width: 373px;">
        <h2 style = "text-align: center;"><img src = "http://projectorbach.com/wp-content/uploads/2019/07/multisport_player.png" width = "174" height = "171" alt = "" class = "wp-image-35689 alignnone size-full" /></h2>
        <h2 style = "text-align: center;">More Features</h2>
      </td>
      <td style = "width: 426px;">
        <div>
          <div class = "row">
            <div class = "col">
              <p><span class = "s1" style = "font-size: 15px;"><span class = "s3"></span></span>
              </p>
              <ul class = "ul1">
                <li class = "li1"><span class = "s1">Eases communication with parents decreasing ambiguity</span></li>
                <li class = "li1"><span class = "s2"></span><span class = "s1">Customizable evaluation criteria</span></li>
                <li class = "li1"><span class = "s2"><span class = "Apple-tab-span"> </span></span><span class = "s1">Create practice plans and share videos</span></li>
                <li class = "li2"><span class = "s3">Share data and progression with your club</span></li>
              </ul>
            </div>
          </div>
        </div>
        <div id = "lipsum"></div>
      </td>
    </tr>
  </tbody>
</table>
<p>&nbsp;</p>
<p style = "text-align: center;">
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
1 325
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Чтобы перейти на нетабличный макет, вам просто нужно структурировать свои div как таблицу. Я прикладные классы, которые делают это ясно.

Див с .my-wrapper занимает место самой таблицы. Элементы div с .my-row служат строками таблицы, а те, что с .my-cell, являются столбцами/ячейками «таблицы».

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

display: flex;

... в div, он становится flex-контейнером, а непосредственные дочерние элементы (в данном случае div с .my-cell) становятся flex-элементами. Я добавил несколько комментариев в приведенный ниже код, чтобы указать, что делает каждая строка. Добавлены границы, чтобы сделать макет более четким. Запустите фрагмент и просмотрите его в полностраничном режиме, чтобы вы могли настроить ширину экрана и увидеть изменения.

Повторите расположение строк, чтобы построить остальную часть таблицы.

Отличный ресурс для получения дополнительной информации о flexbox: https://css-tricks.com/snippets/css/a-guide-to-flexbox/.

Подробнее о медиа-запросах: https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Использование_медиа_запросов.

* {
  box-sizing: border-box;
}

.my-wrapper {
  max-width: 800px; /* use max-width instead of width to get automatic responsive flexibility */
  margin: 0 auto; /* centers the container on the page */
  border: 1px solid blue;
}

.my-row {
  display: flex; /* direction row by default, the cells will be side by side to start */
}

.my-cell {
  width: 50%;
  padding: 20px;
  display: flex; /* yep, the cells can get flexbox layout too */
  flex-direction: column; /* each cell will have its content laid out vertically */
  align-items: center; /* centers content horizontally */
  justify-content: center; /* centers content vertically */
  border: 1px solid red;
}

.my-cell img {
  max-width: 100%; /* make the images responsive too */
  height: auto;
}

@media (max-width: 500px) { /* change the max-width in the media query to whatever width you want, you can use min-width too if you prefer */
  .my-row {
    flex-direction: column; /* force the layout to stack the cells vertically */
  }
  .my-cell {
    width: 100%; /* cells should be full width at this point */
  }
}
<div class = "my-wrapper">
  <div class = "my-row">
  
    <div class = "my-cell">
      <img src = "https://picsum.photos/200/300" />
    </div>
    
    <div class = "my-cell">
      <h2>Some title text</h2>
      <p>Some paragraph text...</p>
      <ul>
        <li>whatever</li>
        <li>you</li>
        <li>want</li>
      </ul>
    </div>
    
  </div>
</div>

Очень крутой ответ. Большое спасибо. Очень ценю потраченное время и тот факт, что теперь я узнаю, что на самом деле происходит! Ты да человек

Rob 23.07.2019 21:01

После того, как ячейки сложены, будет ли какой-либо способ иметь ячейку 1 стека первой строки над ячейкой 2, затем ячейку 4 стека второй строки над ячейкой 3 и, наконец, иметь ячейку 5 стека последней строки над ячейкой 6? У меня всегда одна картинка и одно описание в ряду, но они чередуются. Этот codepen - это то, с чем я работаю. КодПен Я думаю, что могу использовать два разных имени класса "my-cell"... но я все еще не уверен, как я могу диктовать порядок их расположения или порядок в медиа-запросе. Или есть простой способ добавить иерархию заказов?

Rob 24.07.2019 11:05

да. flex-direction:column-reverse Примените специальный класс к строкам, которые вы хотите расположить в обратном порядке, и в медиа-запросе примените это правило к этому классу в качестве переопределения для flex-direction:column, которое получат все остальные строки.

BugsArePeopleToo 24.07.2019 15:35

классно. Да, я понял это. Огромное спасибо чувак

Rob 25.07.2019 05:52

Роб,

Добавление класса к вашему тегу таблицы (class=responsive_table для этого примера) и написание медиа-запроса приведет к тому, что столбцы будут располагаться один под другим.

@media screen and (max-width: 400px) {
table.responsive_table {
  display: block;
}
  table.responsive_table td {
    width: 100%;
    display: block;
  }
}
<table height = "557" style = "width: 800px; border-color: #ffffff; background-color: #ffffff; height: 702px; margin-left: auto; margin-right: auto;" border = "#fff" class = "responsive_table">
  <tbody>
    <tr>
      <td style = "width: 373px; border-color: #ffffff; background-color: #ffffff;">
        <h2><img src = "http://projectorbach.com/wp-content/uploads/2019/07/clipboard.png" width = "174" height = "171" alt = "" class = "wp-image-35671 alignnone size-full" style = "display: block; margin-left: auto; margin-right: auto;" /></h2>
        <h2 style = "text-align: center;"><span>Create Team Rosters</span><span></span></h2>
        <div class = "col"></div>
      </td>
      <td style = "width: 373px; border-color: #ffffff; background-color: #ffffff;">
        <div class = "col">
          <div class = "col">Easily input new clients and team rosters.</div>
          <div class = "col"></div>
        </div>
      </td>
    </tr>
    <tr>
      <td style = "width: 373px;"><span>Easy to create and easy to use. Our player evals are done through a grid. We start with templates based on age group and sport. Then, you can customize the skills and stats you want to track.</span></td>
      <td style = "width: 373px;">
        <h2 style = "text-align: center;"><span class = "blue"><img src = "http://projectorbach.com/wp-content/uploads/2019/07/eval.png" width = "181" height = "167" alt = "" class = "wp-image-35673 alignnone size-full" /><br /> </span><span class = "blue">Evaluate Your Players</span><span></span></h2>
      </td>
    </tr>
    <tr>
      <td style = "width: 373px;">
        <h2 style = "text-align: center;"><img src = "http://projectorbach.com/wp-content/uploads/2019/07/multisport_player.png" width = "174" height = "171" alt = "" class = "wp-image-35689 alignnone size-full" /></h2>
        <h2 style = "text-align: center;">More Features</h2>
      </td>
      <td style = "width: 426px;">
        <div>
          <div class = "row">
            <div class = "col">
              <p><span class = "s1" style = "font-size: 15px;"><span class = "s3"></span></span>
              </p>
              <ul class = "ul1">
                <li class = "li1"><span class = "s1">Eases communication with parents decreasing ambiguity</span></li>
                <li class = "li1"><span class = "s2"></span><span class = "s1">Customizable evaluation criteria</span></li>
                <li class = "li1"><span class = "s2"><span class = "Apple-tab-span"> </span></span><span class = "s1">Create practice plans and share videos</span></li>
                <li class = "li2"><span class = "s3">Share data and progression with your club</span></li>
              </ul>
            </div>
          </div>
        </div>
        <div id = "lipsum"></div>
      </td>
    </tr>
  </tbody>
</table>
<p>&nbsp;</p>
<p style = "text-align: center;">

Вы можете изменить точку останова в медиа-запросе, где указано Максимальная ширина.

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