переполнение: прокрутка; в ‹td›

Почему свойство CSS overflow:scroll; не работает в <td>, а overflow:hidden; работает хорошо?

<table border="1" style="table-layout:fixed; width:100px">
  <tr>
    <td style="overflow:scroll; width:50px;">10000000000000000000000000000000000</td>
    <td>200</td>
    <td>300</td>
  </tr>
</table>

Из спецификаций CSS1,2, не понимаю почему.


person an0    schedule 31.07.2009    source источник
comment
Удивительно, но лучший ответ (ИМХО) - последний. Примените высоту к элементу TD, а затем сместите его влево. Это позволяет выполнять вертикальную прокрутку без добавления дополнительных элементов в ваш код, как предлагают другие ответы.   -  person Gray Spectrum    schedule 15.03.2018


Ответы (3)


Я получил кое-что отсюда!

Андрей Федонюк написал:

На самом деле это мой вопрос: «Одна из технических причин заключается в том, что свойство переполнения не применяется к таблицам». - Почему? Что это за причина?

Я не эксперт, но я считаю, что это просто для обратной совместимости с устаревшим поведением таблиц. Вы можете проверить «автоматический» алгоритм верстки таблицы в спецификации. Я почти уверен, что этот алгоритм компоновки несовместим со свойством переполнения (или, точнее, алгоритм компоновки никогда не приведет к необходимости какого-либо значения переполнения, кроме «видимого»).

Ага, поэтому и спрашиваю. Похоже, что нет формальных причин, по которым или не следует прокручивать, но кажется, что поставщики UA достигли какого-то молчаливого соглашения в этой области. Так и вопрос.

Спецификация согласна с вами в отношении элементов. Ячейки таблицы должны учитывать переполнение, хотя, по крайней мере, Mozilla, похоже, этого не делает. Я не могу ответить на ваш вопрос в этом случае, хотя я все же предполагаю, что ответ все еще привязан к устаревшему рендерингу.

Основная ветка здесь.

person Kirtan    schedule 31.07.2009
comment
Что ж, это возможно, если вы зададите ему фиксированный макет или ширину, а не обертку и т. д. Однако обертывание его в div отлично работает в любом браузере, даже в IE6. - person Tim Büthe; 31.07.2009
comment
Спасибо, Киртан, ваша информация ценна. Так что это ограничение реализации, а не проблема спецификации, и я не ошибся и не понял. Однако какой позор, что нет дальнейшего обсуждения этой ветки, и мне кажется, что эта проблема не будет исправлена ​​ни в одном браузере в ближайшее время. Кроме того, я откладываю этот ответ в надежде получить более свежую информацию об этой проблеме, потому что я знаю, что вы, StackOverflower, являетесь экспертами по переполнению :) - person an0; 01.08.2009
comment
Обязательно проверьте решение в самом низу (т.е. установите высоту и поместите элемент td влево). Это прекрасно сработало для меня без добавления каких-либо дополнительных элементов div. - person Gray Spectrum; 15.03.2018

Вы должны обернуть его в div, который будет работать:

<table border="1" style="table-layout:fixed; width:500px">
  <tr>
    <td style="width:100px;"><div style="overflow:scroll; width:100%">10000000000000000000000000000000000</div></td>
    <td>200</td>
    <td>300</td>
  </tr>
</table>
person Tim Büthe    schedule 31.07.2009
comment
Я знаю, что оболочка ‹div› будет работать, но вам не кажется, что то, что вы ответили, не то, что я спросил? - person an0; 01.08.2009
comment
да, вы правы... Я немного поголодался. Однако это может быть полезно для тех, кто ищет обходной путь, а не причину. - person Tim Büthe; 04.08.2009
comment
однако обходной путь работает только для переполнения x. вы не можете сделать высоту div = 100%.... - person Shawn; 04.02.2011
comment
@Шон: я не понимаю, что ты имеешь в виду? Вам нужен обходной путь для td с высотой 100%? - person Tim Büthe; 04.02.2011
comment
да, поэтому, если таблица имеет высоту 500 пикселей, и вы хотите, чтобы td занимал как можно большую высоту - person Shawn; 08.02.2011
comment
@ATOzTOA: Ты пробовал? - person Tim Büthe; 28.01.2013
comment
Это ответ для тех, кто хочет иметь прокручиваемый элемент td в своей таблице. - person RattleyCooper; 06.05.2015
comment
Согласно приведенному ниже ответу, примените высоту к элементу TD, а затем поместите его влево. Это обеспечивает вертикальную прокрутку без добавления дополнительных элементов в ваш код. Работал как шарм для меня. - person Gray Spectrum; 15.03.2018
comment
Ну, это не работает, но ведь прошло более десяти лет. - person Ken Sharp; 23.11.2020

Сначала укажите желаемую высоту для td, а затем примените свойство «float: left» к соответствующему «td», на котором должна отображаться полоса прокрутки.

person user1885649    schedule 08.01.2013
comment
Я был очень удивлен, увидев эту работу, но она обеспечивает ТОЧНОЕ поведение, которое я искал. Это должно быть принятым решением. - person Gray Spectrum; 15.03.2018