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

Почему эти два фрагмента по-разному отображаются при использовании display: table / table-cell / table-row?

При написании некоторого CSS с использованием display: table / table-row / table-cell я столкнулся с некоторым поведением, которое я не понимаю, но согласуется с Chrome и Firefox. Я свел его к следующим двум фрагментам, подчеркивающим разницу:

Правила укладки очень простые:

* { box-sizing: border-box; border: none; margin: 0; }
.stack, .flow {
    width: 100%;
    display: table;
}
.stack > * {
    display: table-row;
}
.flow > * {
    display: table-cell;
}
.w-100 { width: 100%; }

HTML грубо:

<div class="flow">
  <div>L</div>
  <input type="text"class="w-100" placeholder="M" />
  <div>R</div>
</div>

Единственная разница во второй ссылке состоит в том, что последний div с буквой R заменяется на ‹button› (ввод также показывает такое же поведение). Оба должны отображаться как ячейка таблицы, обернутая анонимной строкой таблицы, и я думаю, что она должна выглядеть как первый фрагмент независимо от того. Должно быть, мне не хватает чего-то очевидного, чтобы объяснить эту разницу, так может ли кто-нибудь объяснить, почему эти два фрагмента отображаются по-разному?

Интересно, что Edge отображает их точно так же, как я изначально ожидал.

Изменить: если вы ограничиваете элементы L и R фиксированным размером, а для строки в целом установлено значение 100%, ячейка M / средняя должна расширяться, чтобы соответствовать всей ширине, но она не работает должным образом ни в Хром. Эти два фрагмента также отображаются по-разному по какой-то необъяснимой причине:

Кажется, что рендеринг работает стабильно только в том случае, если все элементы, используемые в качестве ячейки таблицы, являются div, например: https://codepen.io/anon/pen/mxKreZ

02.04.2018

  • рассмотрите возможность использования flexbox, а не таблиц. я на 99% уверен, что у него нет таких проблем 02.04.2018

Ответы:


1

Такое поведение с кнопками - известная проблема, затрагивающая оба браузера (проблема для Chrome и для Firefox). Объяснение, данное обоими поставщиками, заключается в особом рендеринге кнопок из-за их природы как элементов формы. Ни один из поставщиков не планирует исправлять это, по крайней мере, до тех пор, пока спецификации css-display-3 и / или css-tables-3 не станут зрелыми.

Как вы заметили, Edge отображает ваши фрагменты, как и ожидалось, потому что Edge (и фактически IE11) поддерживает отображение кнопок в виде ячеек таблицы.

02.04.2018
  • Спасибо, это так раздражает. Я думал, что display: table относительно согласован во всех браузерах, но, похоже, нет конца тому, как css облажается. Прошу прощения за напыщенную речь, но именно такие вещи действительно делают сеть такой, какая она есть. 02.04.2018
  • @naasking: display: table, возможно, самая запутанная часть всего CSS. Это так плохо, что даже CSSWG не не знаю, что с этим делать. В остальном это довольно скучно по сравнению: P 02.04.2018
  • вздох, у меня была некоторая надежда, поскольку в большинстве случаев он, кажется, работает нормально, а display: table кажется единственным универсально доступным режимом отображения для центрирования элементов по вертикали. Если бы FF и Chrome просто вставили анонимный div вокруг любых элементов ввода в режиме отображения таблицы, они соответствовали бы ожиданиям того, как это должно работать. Это совсем не сложно, но вы имеете в виду, что здесь прячутся другие драконы, так что вернемся к чертежной доске, я полагаю ... 02.04.2018
  • Новые материалы

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

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

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

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

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

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

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