Позиционирование фонового изображения, добавление отступов

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

http://jsbin.com/umuvud/edit#javascript,html,live

Спасибо!


person Ian Davis    schedule 01.11.2011    source источник


Ответы (7)


Обновленный ответ:

Несколько раз отмечалось, что это неправильный ответ на этот вопрос, и я согласен. Когда этот ответ был написан, IE 9 был еще новым (около 8 месяцев), и многим разработчикам, включая меня, требовалось решение для ‹= IE 9. IE 9 — это когда IE начал поддерживать background-origin. Тем не менее, прошло более шести с половиной лет, поэтому вот обновленное решение, которое я настоятельно рекомендую вместо использования реальной границы. В случае, если ‹ требуется поддержка IE 9. Мой оригинальный ответ можно найти ниже демо-фрагмента. Он использует непрозрачную границу для имитации отступов для фоновых изображений.

#hello {
  padding-right: 10px;
  background-color:green;
  background: url("https://placehold.it/15/5C5/FFF") no-repeat scroll right center #e8e8e8;
  background-origin: content-box;
}
<p id="hello">I want the background icon to have padding to it too!I want the background icon twant the background icon to have padding to it too!I want the background icon to have padding to it too!I want the background icon to have padding to it too!</p>

Оригинальный ответ:

вы можете подделать его с рамкой 10px того же цвета, что и фон:

http://jsbin.com/eparad/edit#javascript,html,live

#hello {
   border: 10px solid #e8e8e8;
   background-color: green;
   background: url("http://www.costascuisine.com/images/buttons/collapseIcon.gif")
               no-repeat scroll right center #e8e8e8;
}
person Joseph Marikle    schedule 01.11.2011
comment
Другой способ — использовать метод calc в CSS. background-position-x: расчет (100% - 4px); - person user959729; 19.07.2013
comment
Или использовать свойство background-origin developer.mozilla.org/ en-US/docs/Web/CSS/background-origin, который предназначен для решения подобных проблем. Поддержка IE9 и выше: jsbin.com/umuvud/50/edit - person Dan Eastwell; 01.08.2013
comment
Потрясающий! Вы даже можете использовать прозрачную рамку, и если вы используете ems в качестве ширины границы, это отлично работает с отзывчивостью. Совсем не хакерский, просто очень умный, на мой взгляд! - person mizuki; 12.02.2015
comment
Это гениально. Помог мне сделать изображение на позиции: фиксированный элемент заголовка также действует более или менее отзывчиво. - person jhrr; 11.08.2016
comment
фоновый клип: поле содержимого; Фон будет окрашен в поле содержимого. - person Ed Kolosovsky; 22.11.2016
comment
спасибо, мы можем заменить right center на число вроде 12px 30px тоже - person yussan; 11.02.2017
comment
Что, если мы хотим повторять изображения и дополнять их? - person yerlilbilgin; 19.09.2017
comment
Спасибо @DanEastwell - ваш комментарий, я считаю, правильный ответ. background-origin: content-box дал мне то, что я ожидал. - person Lime; 06.07.2018
comment
отправка сердечек, прекрасное решение - person Itai Spector; 16.03.2020

на самом деле это довольно легко сделать. Вы почти у цели, делаете то же, что и с background-position: right center;. Что на самом деле нужно в данном случае, так это что-то очень похожее. Преобразуем их в проценты. Мы знаем, что center=50%, так что это достаточно просто. Теперь, чтобы получить нужный отступ, вам нужно расположить фон следующим образом: background-position: 99% 50%.

Второй и более эффективный способ сделать это — использовать ту же идею background-position и просто использовать background-position: 400px (width of parent) 50%;. Конечно, этот метод требует статической ширины, но каждый раз будет давать одно и то же.

Метод 1 (99% 50%)
Метод 2 (400 пикселей 50%)

person John Fish    schedule 01.11.2011
comment
background-position: 99% 50% - это то, что я ищу. Спасибо. - person vajapravin; 30.09.2013
comment
Это правильный ответ. Спасибо. - person David Martins; 30.07.2015
comment
гораздо лучший ответ! - person shurrok; 05.01.2018

На самом деле для этого есть собственное решение, использующее четыре значения для background-position.

.CssClass {background-position: right 10px top 20px;}

Это означает 10 пикселей справа и 20 пикселей сверху. вы также можете использовать три значения, четвертое значение будет равно 0.

person Hejar    schedule 19.12.2016
comment
Не знаю, почему они отметили взлом как правильный ответ! это правильный путь. - person siwalikm; 22.07.2017
comment
Это не работает. - person wag0325; 23.07.2017
comment
если вы также пытаетесь использовать background-size: cover, принятый ответ лучше, потому что он правильно контролирует размер изображения. Для этого решения вам также нужно будет определить размер изображения, чтобы получить правильный отступ справа (и снизу). - person Allan Nienhuis; 12.01.2018

вы можете использовать background-origin:padding-box; а затем добавьте некоторые отступы, где хотите, например: #logo {background-image: url(your/image.jpg); background-origin:padding-box; padding-left: 15%;} Таким образом, вы прикрепляете изображение к блоку заполнения div, который содержит его, чтобы вы могли расположить его в любом месте.

person Adrn    schedule 25.04.2013
comment
Хороший ответ, но я думаю, вы имеете в виду поле содержимого. w3schools.com/cssref/ - person Gerfried; 09.01.2018

На случай, если кому-то еще понадобится добавить отступ к чему-либо с помощью background-image и background-size: contains или cover, я использовал следующее: хороший способ сделать это. Вы можете заменить ширину границы на 10% или 2vw или на что угодно.

.bg-image {
    background: url("/image/logo.png") no-repeat center #ffffff / contain;
    border: inset 10px transparent;
    box-sizing: border-box;
}

Это означает, что вам не нужно определять ширину.

person JHair    schedule 22.03.2018

во-первых, чтобы быть немного подкаблучником, лучше НЕ использовать просто тег <background>. вместо этого используйте правильный, более конкретный тег <background-image>.

единственный известный мне способ сделать это — встроить отступ в изображение, расширив подложку. поскольку пустые пиксели не удаляются, у вас есть отступ прямо здесь. поэтому, если вам нужна граница 10 пикселей, создайте 10 пикселей пустых пикселей вокруг вашего изображения. это очень просто в Photoshop, Fireworks, GIMP и т. д.

я бы также рекомендовал попробовать формат PNG8 вместо умирающего GIF... намного лучше.

может быть альтернативное решение вашей проблемы, если бы мы знали немного больше о том, как вы его используете. :) это ВЫГЛЯДИТ, как будто вы пытаетесь добавить кнопку-аккордеон. это лучше всего поместить в HTML, потому что тогда вы можете ориентироваться на него с помощью JavaScript/PHP; что-то, что вы не можете сделать, если оно находится в фоновом режиме (по крайней мере, не просто). в таком случае вы можете чертовски стилизовать изображение, которое у вас есть в настоящее время в CSS, используя следующее:

#hello img { padding: 10px; }

WR!

person WhiteRau    schedule 01.11.2011
comment
Я просто пытаюсь сдвинуть фоновое изображение влево на 5 пикселей. В любом случае, чтобы сделать это без редактирования изображения? - person Ian Davis; 01.11.2011
comment
ах. опять же, не совсем. тег background-position ‹em›выглядит‹/em› как кролик для вас, но все, что он делает, это ‹em›скользит‹/em› изображение внутри своей ограничивающей рамки. для чего ты его используешь? - person WhiteRau; 01.11.2011
comment
Ответ @Joseph будет работать, но он может создать проблемы с форматированием в остальной части элемента, потому что теперь EVERTYHING будет выглядеть так, как будто он имеет 10-пиксельную панель, и его можно не заметить при изменении стиля. - person WhiteRau; 01.11.2011
comment
это не сработает, так как нет ‹div id=hello›‹img src='...' /›‹/div› (см. ссылку в моем вопросе). спасибо за ваш ответ! - person Ian Davis; 01.11.2011
comment
я хотел сказать, что ЕСЛИ вы пойдете другим путем, используйте этот код. :) Думаю, я не очень ясно выразился. Прости. - person WhiteRau; 01.11.2011

Чтобы добавить пространство перед фоновым изображением, можно определить «ширину» элемента, который использует объект «фоновое изображение». А затем определить значение пикселя в свойстве background-position, чтобы создать пространство с левой стороны.

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

В то время как padding-right выполняет цель растянуть фоновый цвет на 15 пикселей больше справа от текста ссылки. Отступ слева добавляет только пространство между текстом ссылки и маркером.

Поэтому я взял ширину объекта background-color из дизайна PSD (например, 82px) и добавил его к элементу li (в классе, созданном для отображения активного состояния), а затем установил значение background-position на 20px. В результате значок пули сместился внутрь с левого края. И это дало мне желаемый результат, оставив отступ перед значком пули, используемым в качестве фонового изображения.

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

person Ravi Khandelwal    schedule 12.06.2013