Почему CSS не поддерживает отрицательное заполнение?

Я видел это много раз, что перспектива негативного заполнения может помочь разработке CSS определенных элементов страницы стать лучше и проще. Тем не менее, в W3C CSS нет положения для отрицательного заполнения. В чем причина этого? Есть ли какие-либо препятствия для свойства, которое предотвращает его использование как таковое? Спасибо за ответы.

обновление

Как я вижу, например, в случае, если вы используете шрифт, который имеет что-то, скажем, 20px вертикального интервала, и вы хотите применить пунктирную границу к нижней части шрифта, скажем, когда появляется гиперссылка. В таких случаях вы найдете стиль слишком потертым, так как пунктирная граница появится на 20px ниже указанного слова. если вы используете отрицательную маржу, это не сработает, так как маржа изменяет область за пределами границ. Негативная обивка может помочь в таких ситуациях.

7 ответов


недавно ответил на другой вопрос где я обсуждал почему модель коробки такова, как она есть.

есть конкретные причины для каждой части модели. Обивка предназначена для расширения фона за пределы его содержимого. Если вам нужно shrink фон контейнера, вы должны сделать родительский контейнер правильного размера и дать дочернему элементу некоторые отрицательные поля. В этом случае содержание не мягкий, он переполнен.


заполнение по определению является положительным целым числом (включая 0).

отрицательное заполнение приведет к коллапсу границы в содержимое (см.


Это может помочь, кстати:

на box-sizing свойство CSS используется для изменения модели CSS box по умолчанию, используемой для вычисления ширины и высоты элементов.

http://www.w3.org/TR/css3-ui/#box-sizing
https://developer.mozilla.org/En/CSS/Box-sizing


Я хотел бы описать очень хороший пример того, почему negative padding было бы полезно и потрясающе.

как все мы, разработчики CSS, знаем, вертикальное выравнивание динамически калибровочного div внутри другого-это хлопот, и по большей части, рассматривается как невозможное только с помощью CSS. Включение negative padding может это изменить.

пожалуйста, просмотрите следующий HTML:

<div style="height:600px; width:100%;">
    <div class="vertical-align" style="width:100%;height:auto;" >
        This DIV's height will change based the width of the screen.
    </div>
</div>

С помощью следующего CSS мы сможем вертикально центрировать содержимое внутреннее div в наружной div:

.vertical-align {
    position: absolute;
    top:50%;
    padding-top:-50%;
    overflow: visible;
}

позвольте мне объяснить...

абсолютно позиционирование верхней части внутреннего div на 50% помещает верхний край внутреннего div в центре внешнего div. Довольно просто. Это потому что процентное позиционирование относительно внутренних размеров родительского элемента.

процентное заполнение, С другой стороны, основано на внутренних размерах целевой элемент. Итак, применяя свойство padding-top: -50%; мы сдвинули содержимое внутреннего div вверх на расстояние 50% от высоты содержимого внутреннего div, поэтому центрирование содержимого внутреннего div в пределах внешнего div и все еще позволяющ размеру высоты внутреннего div быть динамически!

если вы спросите меня OP, это был бы лучший вариант использования, и я думаю, что он должен быть реализован, чтобы я мог сделать этот хак. лол. Или они должны просто исправьте функциональность vertical-align и дайте нам версию vertical-align это работает на всех элементах.


вы спросили, почему, а не как обмануть он:

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

когда html был разработан, журналы любили текст reflown вокруг изображений тогда, теперь ненавидели, потому что сегодня у нас есть сенсорные тенденции, и любят квадратные вещи с большим количеством пространства и ничего не читать. Вот почему они оказывают большее давление на поплавки, чем на центрирование, или они могли бы спроектировать что-то вроде margin-top: fill; или margin: average 0; чтобы просто выровнять содержимое снизу или распределить его дополнительное пространство вокруг.

В данном случае я думаю, что он не был реализован из-за по той же причине, что делает CSS отсутствием :parent псевдо-селектор: чтобы предотвратить циклические оценки.

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

вот почему (я думаю) заполнение рассчитывается по ширине, потому что это значение, которое было доступно во время начала его рисования.

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

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

Если вы видите приложения со сложным оплавлением и позиционированием, такие как InDesign, вы не можете прокручивать так быстро! Это требует больших усилий как от процессоров, так и от графической карты, чтобы перейти к следующим страницам!

Итак, живопись и расчет вперед и забыв об элементе, когда-то нарисованном, теперь это кажется обязательным.


какова будет цель отрицательного заполнения? Заполнение используется для сжатия содержимого в поле, оставляя пространство между границей и содержимым. Если только цель не состоит в том, чтобы вытащить содержимое из коробки за пределы ее границ, которые я не вижу полезными. Может быть, у кого-то другое мнение.


установка Iframe внутри контейнеров не будет соответствовать размеру контейнера. Он добавляет около 20px заполнения. В настоящее время нет простого способа исправить это. Вам нужен javascript (http://css-tricks.com/snippets/jquery/fit-iframe-to-content/)

отрицательная маржа была бы простым решением.