Как задать границу любому элементу с помощью css без добавления ширины границы ко всей ширине элемента?
Как и в Photoshop, мы можем нанести обводку - внутри, по центру и снаружи.
Я думаю, что свойства границы CSS по умолчанию - это центр, как центр в фотошопе, я прав?
Я хочу дать рамку внутри коробки, а не снаружи. и не хотите включать ширину границы в ширину поля.
Ознакомьтесь с CSS-размером окна ...
Свойство CSS3 размера блока может это сделать. Значение border-box (в отличие от значения по умолчанию для content-box) делает окончательный визуализированный блок объявленной шириной, а любые границы и отступы вырезаны внутри блока. Теперь вы можете безопасно объявить свой элемент со 100% шириной, включая отступы и границу на основе пикселей, и идеально выполнить свою задачу.
Я предлагаю создать миксин, который справится с этим за вас. Дополнительную информацию о размере коробки можно найти на сайте W3c http://www.w3schools.com/cssref/css3_pr_box-sizing.asp
источник
box-sizing
будет достаточно.В зависимости от предполагаемой поддержки вашего браузера вы можете использовать
box-shadow
свойство.Вы можете установить значение размытия на 0 и разброс до любой желаемой толщины. Самое замечательное в тени блока заключается в том, что вы можете контролировать, будет ли она отображаться снаружи (по умолчанию) или внутри (с помощью
inset
свойства).Пример:
или
Одним из больших преимуществ использования тени блока является то, что вы можете проявить творческий подход, используя несколько теней блока:
Единственное, чего я не могу сказать, - это какая разница в производительности рендеринга. Я предполагаю, что это может стать проблемой, если у вас на экране одновременно будут сотни элементов, использующих эту технику.
источник
Я столкнулся с той же проблемой.
Этот ответ позволяет указать одну единственную сторону. И будет работать в IE8 + - в отличие от box-shadow.
Конечно, измените свойства ваших псевдоэлементов, так как вам нужно выделить определенную сторону.
* Новый и улучшенный *
Это позволяет использовать границу и ударить по нескольким сторонам поля.
источник
Используйте
box-sizing: border-box
для создания границы ВНУТРИ div без изменения ширины div.Используется
outline
для создания границы ВНЕ div без изменения ширины div.Вот пример: https://jsfiddle.net/4000cae9/1/
Примечания: в
border-box
настоящее время не поддерживается IEСлужба поддержки:
http://caniuse.com/#feat=outline
http://caniuse.com/#search=border-box
источник
Как сказал Абенсон, вы можете использовать контур, но есть одна проблема: Opera может нарисовать «непрямоугольную форму». Другой вариант, который кажется работающим, - использовать отрицательные поля, например этот css:
С этим html:
Еще один менее чистый вариант - добавить дополнительную разметку в html. Например, вы устанавливаете ширину внешнего элемента и добавляете границу к внутреннему. CSS:
И html:
источник
Используйте отступы, когда нет границы. Удалите отступы, когда есть граница.
По сути, просто замените отступ 2px на границы 2px. Размер Div остается прежним.
источник
В вашем случае вы можете выдумать его, вычтя половину границы из отступа? (-2,5 от отступа, если ваша граница имеет ширину 5 пикселей, у вас не может быть отрицательного отступа, поэтому, чтобы уменьшить его, уменьшите общую ширину поля). Вы можете добавить дополнительные 2,5 пикселя к полю, чтобы сохранить тот же размер поля в целом.
Мне действительно не нравится это предложение, но я не думаю, что есть способ справиться с этим чисто.
источник
Таким образом, вы пытаетесь добиться того же, что и хорошо известная ошибка блочной модели IE ? Это невозможно. Или вы хотите поддерживать клиентов с IE только в Windows и выбираете doctype, который переводит IE в quirksmode .
источник
Другой вариант, если у вас сплошной цвет фона:
источник
#FFF
прозрачный, и тогда вам не нужно помнить об изменении двух значений. Ваше предложение имеет то преимущество, что, если вам нужна пунктирная граница, это сработает там, где этогоbox-shadow
не хватает в этом отношении.контур: сплошной черный цвет 3px || граница: сплошной черный 3px
источник