У меня есть простая таблица, которая используется для почтового ящика следующим образом:
<table border="1">
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
Как установить ширину таким образом, чтобы «От» и «Дата» составляли 15% ширины страницы, а «Тема» - 70%. Я также хочу, чтобы таблица занимала всю ширину страницы.
12 ответов
<table style="width: 100%">
<colgroup>
<col span="1" style="width: 15%;">
<col span="1" style="width: 70%;">
<col span="1" style="width: 15%;">
</colgroup>
<!-- Put <thead>, <tbody>, and <tr>'s here! -->
<tbody>
<tr>
<td style="background-color: #777">15%</td>
<td style="background-color: #aaa">70%</td>
<td style="background-color: #777">15%</td>
</tr>
</tbody>
</table>
table {
width: 100%;
border: 1px solid #000;
}
th.from, th.date {
width: 15%
}
th.subject {
width: 70%; /* Not necessary, since only 70% width remains */
}
<table>
<thead>
<tr>
<th class="from">From</th>
<th class="subject">Subject</th>
<th class="date">Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>[from]</td>
<td>[subject]</td>
<td>[date]</td>
</tr>
</tbody>
</table>
Лучше всего держать ваши HTML
и CSS
отдельно для уменьшения дублирования кода и разделения задач (HTML
для структуры и семантики и CSS
для представления).
Обратите внимание, что для того, чтобы это работало в более старых версиях Internet Explorer, вам может потребоваться указать определенную ширину таблицы (например, 900 пикселей). У этого браузера есть некоторые проблемы с отображением элемента с процентными размерами, если его оболочка не имеет точных размеров.
Используйте приведенный ниже CSS, первое объявление гарантирует, что ваша таблица будет придерживаться указанной вами ширины (вам нужно будет добавить классы в свой HTML):
table{
table-layout:fixed;
}
th.from, th.date {
width: 15%;
}
th.subject{
width: 70%;
}
table{table-layout:fixed};.from,.date{width:15%}
. Если классы не используются также и в других элементах, запись th.from
является избыточной и может быть сокращена до просто .from
.
table-layout: fixed
настоящая ошибка! Этот ответ действительно должен быть выше.
Альтернативный способ с использованием всего одного класса с сохранением ваших стилей в файле CSS, который работает даже в IE7:
<table class="mytable">
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
</table>
<style>
.mytable td, .mytable th { width:15%; }
.mytable td + td, .mytable th + th { width:70%; }
.mytable td + td + td, .mytable th + th + th { width:15%; }
</style>
В последнее время вы также можете использовать селектор nth-child()
из CSS3 (IE9 +), где вы просто указываете номер. соответствующего столбца в круглые скобки вместо того, чтобы связывать их вместе с соседним селектором. Вот так, например:
<style>
.mytable tr > *:nth-child(1) { width:15%; }
.mytable tr > *:nth-child(2) { width:70%; }
.mytable tr > *:nth-child(3) { width:15%; }
</style>
:nth-child
ужасно с точки зрения производительности. Нет веских причин использовать его (особенно с универсальным селектором) в этом примере, где есть только три элемента (th
или col
) для стилизации. Кроме того, вам нужно только установить ширину на th
в первой строке. .mytable td
в первом примере является избыточным.
.mytable th+th{width: 70%}.mytable th+th+th{width:15%}
. Сами селекторы "nth" могут быть очень полезны, но в данном конкретном случае (крошечная таблица всего с 3 столбцами) они действительно не нужны. При использовании table-layout: fixed
вы можете сделать даже следующее: table{table-layout:fixed}th:first-child+th{width:70%}
.
В зависимости от вашего тела (или div, который обертывает вашу таблицу) 'settings' вы должны иметь возможность сделать это:
body {
width: 98%;
}
table {
width: 100%;
}
th {
border: 1px solid black;
}
th.From, th.Date {
width: 15%;
}
th.Date {
width: 70%;
}
<table>
<thead>
<tr>
<th class="From">From</th>
<th class="Subject">Subject</th>
<th class="Date">Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>Me</td>
<td>Your question</td>
<td>5/30/2009 2:41:40 AM UTC</td>
</tr>
</tbody>
</table>
table { table-layout: fixed; }
.subject { width: 70%; }
<table>
<tr>
<th>From</th>
<th class="subject">Subject</th>
<th>Date</th>
</tr>
</table>
<table>
<col width="130">
<col width="80">
<tr>
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
<tr>
<td>February</td>
<td>$80</td>
</tr>
</table>
Попробуйте вместо этого.
<table style="width: 100%">
<tr>
<th style="width: 20%">
column 1
</th>
<th style="width: 40%">
column 2
</th>
<th style="width: 40%">
column 3
</th>
</tr>
<tr>
<td style="width: 20%">
value 1
</td>
<td style="width: 40%">
value 2
</td>
<td style="width: 40%">
value 3
</td>
</tr>
</table>
Не используйте атрибут границы, используйте CSS для всех ваших стилистических нужд.
<table style="border:1px; width:100%;">
<tr>
<th style="width:15%;">From</th>
<th style="width:70%;">Subject</th>
<th style="width:15%;">Date</th>
</tr>
... rest of the table code...
</table>
Но встраивание CSS подобным образом - плохая практика - вместо этого следует использовать классы CSS и поместить правила CSS во внешний файл CSS.
Вот еще один минимальный способ сделать это в CSS, который работает даже в старых браузерах, которые не поддерживают :nth-child
и подобные селекторы: http://jsfiddle.net/3wZWt/.
HTML:
<table>
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
<tr>
<td>Dmitriy</td>
<td>Learning CSS</td>
<td>7/5/2014</td>
</tr>
</table>
CSS:
table {
border-collapse: collapse;
width: 100%;
}
tr > * {
border: 1px solid #000;
}
tr > th + th {
width: 70%;
}
tr > th + th + th {
width: 15%;
}
style="column-width:300px;white-space: normal;"
Добавьте colgroup после тега таблицы. Определите здесь ширину и количество столбцов. и добавьте тег tbody. Поместите свой tr внутрь тела.
<table>
<colgroup>
<col span="1" style="width: 30%;">
<col span="1" style="width: 70%;">
</colgroup>
<tbody>
<tr>
<td>First column</td>
<td>Second column</td>
</tr>
</tbody>
</table>
Похожие вопросы
Связанные вопросы
Новые вопросы
html
HTML (язык разметки гипертекста) - это язык разметки для создания веб-страниц и другой информации, отображаемой в веб-браузере. Вопросы, касающиеся HTML, должны включать минимальный воспроизводимый пример и некоторое представление о том, чего вы пытаетесь достичь. Этот тег редко используется отдельно и часто используется вместе с [CSS] и [javascript].
width attribute
; он используетCSS *style* width
, который заменил атрибут ширины