Nano Hash - криптовалюты, майнинг, программирование

Установка ширины столбца таблицы

У меня есть простая таблица, которая используется для почтового ящика следующим образом:

<table border="1">
        <tr>
            <th>From</th>
            <th>Subject</th>
            <th>Date</th>
        </tr>

Как установить ширину таким образом, чтобы поля «От» и «Дата» составляли 15% ширины страницы, а «Тема» - 70%. Я также хочу, чтобы таблица занимала всю ширину страницы.

30.05.2009

Ответы:


1

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 пикселей). У этого браузера есть некоторые проблемы с отображением элемента с процентными размерами, если его оболочка не имеет точных размеров.

30.05.2009
  • это решение не работает, если у вас есть colspans в первой строке 13.08.2015
  • Хорошо, потому что ‹col width =› устарело в HTML5: developer.mozilla. org / en / docs / Web / HTML / Element / col 24.02.2017

  • 2

    Используйте приведенный ниже CSS, первое объявление гарантирует, что ваша таблица будет придерживаться указанной вами ширины (вам нужно будет добавить классы в свой HTML):

    table{
      table-layout:fixed;
    }
    th.from, th.date {
      width: 15%;
    }
    th.subject{
      width: 70%;
    }
    
    14.06.2011
  • На самом деле вам нужно указать только ширину двух столбцов. Третий будет рассчитан автоматически, поэтому достаточно table{table-layout:fixed};.from,.date{width:15%}. Если классы не используются также и в других элементах, запись th.from является избыточной и может быть сокращена до просто .from. 26.04.2016
  • Ой, это table-layout: fixed настоящая ошибка! Этот ответ действительно должен быть выше. 18.07.2021

  • 3

    Альтернативный способ с использованием всего одного класса с сохранением ваших стилей в файле 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 +), где вы просто поместили бы nr. соответствующего столбца в круглые скобки вместо того, чтобы связывать их вместе с соседним селектором. Вот так, например:

    <style>
        .mytable tr > *:nth-child(1) { width:15%; }
        .mytable tr > *:nth-child(2) { width:70%; }
        .mytable tr > *:nth-child(3) { width:15%; }
    </style>
    
    11.10.2013
  • Предлагаемое :nth-child решение ужасно с точки зрения производительности. Нет веской причины использовать его (особенно с универсальным селектором) в этом примере, где нужно стилизовать только три элемента (th или col). Кроме того, вам нужно только установить ширину th в первой строке. .mytable td в первом примере является избыточным. 25.04.2016
  • Предлагаемое решение: nth-child ужасно с точки зрения производительности. - нужна цитата. 26.04.2016
  • Этого должно быть достаточно: Эффективное отображение CSS. При использовании универсального селектора браузер сначала проверит ВСЕ элементы, являются ли они n-м дочерним элементом другого элемента, затем, если их прямым родителем является tr, а затем принадлежат ли они .mytable. Если вы действительно хотите использовать nth, то, вероятно, будет намного лучше: .mytable th:nth-of-type(1) {width: 15%}; .mytable th:nth-of-type(2) {width: 70%};. В этом случае также нет необходимости указывать ширину третьего столбца. 26.04.2016
  • Лично я бы использовал классы или просто .mytable th+th{width: 70%}.mytable th+th+th{width:15%}. Сами селекторы n-го типа могут быть очень полезными, но в этом конкретном случае (крошечная таблица всего с 3 столбцами) они действительно не нужны. При использовании table-layout: fixed вы даже можете сделать следующее: table{table-layout:fixed}th:first-child+th{width:70%}. 26.04.2016
  • Я знаю об этом. Но эти статьи написаны много лет назад, и сегодня есть более серьезные проблемы, связанные с селекторами CSS, например огромное количество изображений и JS-код. 26.04.2016
  • Это определенно верно, но злоупотребление селекторами CSS3 отрицательно сказывается на производительности, особенно на больших и сложных сайтах. Я бы использовал их только в том случае, если не было простой альтернативы. 27.04.2016

  • 4

    Это два моих предложения.

    1. Использование классов. Нет необходимости указывать ширину двух других столбцов, так как они будут автоматически установлены браузером на 15% каждый.

          table { table-layout: fixed; }
          .subject { width: 70%; }
          <table>
            <tr>
              <th>From</th>
              <th class="subject">Subject</th>
              <th>Date</th>
            </tr>
          </table>

    2. Без использования классов. Три разных метода, но результат идентичный.

      a)

          table { table-layout: fixed; }
          th+th { width: 70%; }
          th+th+th { width: 15%; }
          <table>
            <tr>
              <th>From</th>
              <th>Subject</th>
              <th>Date</th>
            </tr>
          </table>

      b)

          table { table-layout: fixed; }
          th:nth-of-type(2) { width: 70%; }
          <table>
            <tr>
              <th>From</th>
              <th>Subject</th>
              <th>Date</th>
            </tr>
          </table>

      в) Это мой любимый. То же, что и b), но с лучшей поддержкой браузером.

          table { table-layout: fixed; }
          th:first-child+th { width: 70%; }
          <table>
            <tr>
              <th>From</th>
              <th>Subject</th>
              <th>Date</th>
            </tr>
          </table>

    26.04.2016

    5

    В зависимости от вашего тела (или 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>
    

    Демо

    30.05.2009

    6
    <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>
    

    Демо

    28.01.2015
  • Атрибут ширины столбца не поддерживается в HTML5. 22.07.2015

  • 7

    Попробуйте вместо этого.

    <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>
    
    04.07.2014

    8

    Не используйте атрибут границы, используйте 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.

    30.05.2009
  • Я подозреваю, что пример кода, опубликованный OP и полезными stackoverflowians, был сделан для удобства чтения и простоты, а не для поощрения встроенных стилей. 21.07.2011

  • 9

    Вот еще один минимальный способ сделать это в 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%;
    }
    
    05.07.2014

    10

    Добавьте 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>
    
    07.03.2019

    11
  • Где это должно быть размещено в DOM относительно элементов ‹thead› или ‹table›? 19.02.2013
  • Нравится чистота этого раствора. Однако закройте столбец, например ‹col span = 1 style = width: 15%; / ›Или‹ col span = 1 style = width: 15%; ›‹/col› 25.08.2013
  • @Isu_guy вы закрываете ‹col› только при использовании XHTML - в HTML тег ‹col› не имеет закрытия ... см. ссылка для получения дополнительной информации. В HTML5 ‹col› является пустым элементом, что означает, что он НЕ ДОЛЖЕН быть закрыт < / а> 31.08.2013
  • @Zulu согласно w3schools.com/tags/att_col_width.asp Ширина ‹col› атрибут не поддерживается в HTML5. 05.11.2013
  • @Matija Это необязательно. Необязательно, символ /, который может присутствовать, только если элемент является пустым. 10.06.2014
  • @JohnGietzen, чтобы уточнить: вы можете использовать синтаксис ‹col .... /› в HTML5 (хотя он устарел), но НЕ синтаксис закрывающего тега (‹col ....› ‹/col›) - Пустые элементы имеют только начальный тег; для пустых элементов нельзя указывать конечные теги 11.06.2014
  • @MatijaNalis Ах, да, я не видел, чтобы он использовал </col>. 12.06.2014
  • @Caltor: код не использует ‹col› width attribute; он использует CSS *style* width, который заменил атрибут ширины ‹col›. (несмотря на то, что многие люди проголосовали за этот комментарий !!) 02.08.2014
  • span="1" является лишним, поскольку по умолчанию используется 1. 05.01.2017
  • Как отмечено в другом ответе, вам может потребоваться добавить table-layout:fixed в CSS для таблицы. См. Также css-tricks.com/fixing-tables-long-strings 30.01.2017
  • Лучшая практика - сохранить свой HTML для структуры и семантики и CSS для представления, избегая использования атрибута style в элементах HTML. 29.05.2020
  • Вот хороший способ потратить 10 минут: используйте это решение и наблюдайте, как оно вообще не работает, поскольку ваша таблица продолжает создавать столбцы, как бы долго вы ни казались. Вопрос заключается в том, как установить ширину, а не в предложении ширины и надеяться на лучшее, как в этом ответе! 02.07.2020
  • Colgroup сделал мой день;) Спасибо за ответ! 01.10.2020

  • 12
  • Привет - добро пожаловать в Stack Overflow. Как правило, ответы с текстом (а не просто кодом) и некоторыми пояснениями считаются лучше, чем ответы, содержащие только код. Поскольку этот вопрос более старый и имеет много других ответов, они могут помочь вам в будущих ответах. 20.09.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..