2011-02-11 2 views
109

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

UPDATE

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

+25

, потому что не имеет смысла иметь отрицательную прокладку – Petah

+0

также какова ваша ситуация, когда требуется «отрицательная прокладка»? – Petah

+0

Можете ли вы предложить пример, в котором отрицательное дополнение будет полезно для вывода? Я вижу отрицательные поля, но я не могу придумать хороший пример, где мне нужно было бы увеличить маржу. –

ответ

73

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

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

+2

Спасибо, бутон. Это дает мне удовлетворительную причину. Приветствия. :) – ikartik90

+9

Что делать, если вы хотите сжать границу ближе к тексту, например, когда вы используете пограничное изображение. – Himmators

+4

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

6

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

Отрицательное заполнение приведет к обрыву границы в контенте (см. Страницу box-model на w3) - это сделает область содержимого меньшей, чем контент, что не имеет смысла.

+28

Граница, рушащаяся в содержании, является именно желаемым эффектом. Вы знаете какой-либо другой способ получить этот эффект? – Rolf

+2

Согласен с Ролфом. Вы, Одед, очевидно, не в сложном экспериментальном дизайне, я вижу. Использование отрицательных отступов и границ, не имея возможности использовать явные значения пикселей, практически невозможно получить аналогичные результаты. Насколько я знаю, вам понадобится несколько вложенных элементов для достижения того же, однако в некоторых случаях ситуация становится несколько более сложной. – Yeti

0

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

+10

Как написано в исходном посте, одна из возможных целей - отменить эффект, который граница имеет на размер элемента, таким образом, чтобы превратить границу в контур. Свойство контура нельзя применить к уникальной стороне контейнера - границы. Есть и другие случаи, и даже если CSS не является совершенным, и я уверен, что в некоторых ситуациях отрицательное дополнение будет полезно. Начинающие не думают об этом, люди, которые пишут неподъемный код, уже располагают достаточными инструментами в своем распоряжении и будут делать это в любом случае, а остальные разработчики могут понадобиться ему иногда. – Rolf

0

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

Отрицательные поля были бы легким решением.

1

Я хотел бы описать очень хороший пример того, почему 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 находится в центре внешнего дела. Довольно просто. Это связано с тем, что позиционное позиционирование относительно внутренних размеров родительского элемента.

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

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

+1

Да, но для этой цели я бы предпочел использовать новые атрибуты для элементов html, а не для захвата поведения другого атрибута. В вашем примере используется новый атрибут inner-top; как атрибут верхнего уровня позиционированного элемента, а относительно самого себя, а не для родителя. Другим хорошим использованием отрицательной прокладки было бы сделать элемент пропорционально его заполнению шириной 100% -ным дополнением, но позволяя элементу расти вертикально, если больше содержимого переполняет его, что невозможно, если содержимое находится в дополнительном абс-брачном браке. Отрицательное заполнение приведет к тому, что элемент с заполненной разметкой вернется к своему размеру. – sergio

1

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

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

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

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

Не будучи инженером, я вижу, что CSS сейчас используется для рисования элементов один раз, помните некоторые свойства для будущих элементов, которые нужно нарисовать, но НИКОГДА не возвращайтесь к уже окрашенным элементам.

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

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

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

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

Так живопись и вычисление вперед и забывание о некотором элементе, на данный момент это, кажется, ДОЛЖНО.

Смежные вопросы