#javascript #bootstrap-4
#javascript #bootstrap-4
Вопрос:
У меня есть простая таблица начальной загрузки (как в приведенном ниже коде). Я хочу, чтобы в моем мобильном представлении каждая запись строки отображалась отдельно внутри поля или карточки. Например, Первая карточка —
First: Mark
Last : Otto
Handle: @mdo
Вторая карточка-
First:Jacob
Last:Thornton
Handle:@fat
и так далее. Возможно ли управлять этим дизайном без необходимости писать отдельный HTML для мобильного просмотра? Либо через css, либо через javascript? (Я использую bootstrap 4)
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">First</th>
<th scope="col">Last</th>
<th scope="col">Handle</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
Ответ №1:
Вы можете просто изменить стиль каждого элемента так, как вам нравится, чтобы они выглядели. Однако вы не можете вставить информацию, если она не статична или не представлена в виде атрибута элемента, вот почему я вставил col
атрибут в каждый td
элемент. Например:
document.getElementById('toggle').onclick = () => {
const table = document.getElementById('table');
table.classList.toggle('cards');
}
.cards thead {
display: none;
}
.cards tr {
display: flex;
flex-direction: column;
margin-bottom: 5px;
border: 1px solid black;
}
.cards tr > th {
display: none;
}
.cards tr > td::before {
content: attr(col) ': ';
font-weight: bold;
}
<button id="toggle">Toggle Style</button>
<table class="table" id="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">First</th>
<th scope="col">Last</th>
<th scope="col">Handle</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td col="First">Mark</td>
<td col="Last">Otto</td>
<td col="Handle">@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td col="First">Jacob</td>
<td col="Last">Thornton</td>
<td col="Handle">@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td col="First">Larry</td>
<td col="Last">the Bird</td>
<td col="Handle">@twitter</td>
</tr>
</tbody>
</table>
Вопрос: Как я могу увеличить пространство между заголовком и данными в представлении flex?
A: Путем изменения отступа с правой стороны ::before
элемента.
document.getElementById('toggle').onclick = () => {
const table = document.getElementById('table');
table.classList.toggle('cards');
}
.cards thead {
display: none;
}
.cards tr {
display: flex;
flex-direction: column;
margin-bottom: 5px;
border: 1px solid black;
}
.cards tr > th {
display: none;
}
.cards tr > td::before {
content: attr(col) ': ';
font-weight: bold;
padding-right: 100px;
}
<button id="toggle">Toggle Style</button>
<table class="table" id="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">First</th>
<th scope="col">Last</th>
<th scope="col">Handle</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td col="First">Mark</td>
<td col="Last">Otto</td>
<td col="Handle">@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td col="First">Jacob</td>
<td col="Last">Thornton</td>
<td col="Handle">@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td col="First">Larry</td>
<td col="Last">the Bird</td>
<td col="Handle">@twitter</td>
</tr>
</tbody>
</table>
Комментарии:
1. О, здорово! Сработало как нельзя лучше! Я не знал, что мы можем изменить структуру подобным образом. Спасибо !! 🙂
2. @HarshVardhanBandta нет проблем! С помощью современного CSS можно сделать довольно много такого, для чего большинство пользователей прибегли бы к javascript.
3. Как я могу увеличить пространство между заголовком и данными в гибком представлении? Путем добавления содержимого: attr(col) ‘: ‘; добавляется один пробел. Если я хочу, чтобы это было больше, как я могу это сделать? Я пытался amp; nbsp, но это выдает ошибку, и добавление отступов и полей также не помогает.
4. @HarshVardhanBandta Я ответил на ваш вопрос в исходном сообщении.