Беспорядок переходов CSS с процентной шириной в Webkit (ошибка?)

У меня есть CodePen здесь:

http://codepen.io/CWSpear/pen/BCriE

Идея в том, что у приложения есть боковая панель, и вы можете нажать «Развернуть», чтобы сделать область содержимого полной ширины. Если вы хотите по-прежнему открывать боковую панель, вы можете нажать «Всплывающее окно», чтобы боковая панель снова появилась над содержимым (т. Е. Возможно, у вас есть возможность всплывать только в портретном режиме, как в приложении «Почта» на iPad).

Я использовал подход с переключением классов, потому что это сделало JavaScript очень простым, и все делалось с помощью переходов CSS.

Дело в том, что даже несмотря на то, что заголовок/панель инструментов области содержимого не имеет ширины и, следовательно, всегда должна быть полной ширины области содержимого, но когда вы нажимаете «Развернуть», все остальное работает, кроме ширины области содержимого. заголовок не меняется.

Это происходит только в Webkit. Кажется, что он вычисляет, что такое «100%», и хотя я меняю отступ содержимого (что из-за моего размера окна делает содержимое шире), заголовок остается той же ширины. На обратном пути кажется наоборот. Когда я снова нажимаю «Развернуть» (что обычно означает «свернуть», если я об этом думаю) снова, он делает заголовок полной ширины, но когда к содержимому добавляются отступы, он не регулирует ширину, и теперь заголовок слишком широкий для содержания.

Позвольте мне проиллюстрировать:

Раньше: Здесь просто нажмите

Нажмите «Развернуть», и вы получите: Ой, он сломан!

Вот что ожидается: Ура, так лучше!

Он отлично работает в Firefox. Также следует отметить, что если вы измените размер окна вручную, оно перекрашивает область и исправляет заголовок (вот так я собственно и получил "ожидаемый" скриншот). Запуск изменения размера с помощью JavaScript не работает (поскольку я не думаю, что это вызывает перерисовку).

Я пытался установить явную ширину «100%» и другие трюки и хаки JavaScript, пытаясь установить процентную ширину в заголовке, но безуспешно.

Кто-нибудь еще сталкивался с этим или имеет исправление?

Он не работал в Safari 6.0.1 и Chrome 22.0.1229.79 и работал в Firefox 15.0.1. Как чемпион, этот Firefox.

[Обновление] Похоже, это связано только с отступами, так как Арен смог исправить это, переключившись на поля. И это работает, потому что ширина содержимого задается автоматически. Если бы это была ширина 100%, то она сломалась бы.

Демонстрация этого здесь: http://codepen.io/CWSpear/pen/uvFJh

Маржа играет хорошо, пока я не поставлю width: 100% на элемент, тогда он вырывается из коробки, даже в box-sizing: border-box.

По какой-то причине реальный проект, над которым я работаю, полностью сворачивает содержимое, когда я устанавливаю width: auto, хотя это определенно display: block. Я пытаюсь воспроизвести это и опубликовать для этого CodePen.

Это действительно ошибка Webkit? Есть ли другие альтернативы?


person CWSpear    schedule 02.10.2012    source источник
comment
Я видел нечто подобное в Chrome, где последовательность скрытия/настройки/отображения вызывала необходимую перерисовку элемента. В моем случае я применял дополнение к элементу. Без этого хака отступы не отображались до следующего изменения размера.   -  person Tim Medora    schedule 03.10.2012
comment
Где я могу вызвать это? Для переходов CSS нет никаких обратных вызовов. Кроме того, было бы неплохо, если бы он расширялся при переходе, как в Firefox.   -  person CWSpear    schedule 03.10.2012
comment
Понятия не имею, как вы могли бы интегрировать это с переходом... просто подумал, что упомяну об этом.   -  person Tim Medora    schedule 03.10.2012


Ответы (2)


http://codepen.io/anon/pen/fzrkm

Я обновил padding-left до margin-left, и это, кажется, работает в Chrome и Firefox.

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

person ahren    schedule 03.10.2012
comment
Я думал, что изначально пробовал это, но я думал, что даже модель рамки с рамкой идет только UP TO margin, что означает, что если это было поле вместо заполнения, оно делало содержимое 100% + 300 пикселей (если поле было 300 пикселей) вместо поля общая ширина 100%. Я вернусь к этому в своем проекте, когда вернусь к нему, и посмотрю, действительно ли это так в реальном проекте. - person CWSpear; 03.10.2012

У меня недавно была такая же проблема.

Как вы сказали, мне также пришлось использовать маржу вместо заполнения. По крайней мере, это известная проблема: https://bugs.webkit.org/show_bug.cgi?id=93876

person Julian    schedule 06.03.2013
comment
Спасибо. Я пытался найти его, чтобы убедиться, что это известная ошибка, но не смог. - person CWSpear; 06.03.2013