Зсуньте фонове зображення праворуч за допомогою CSS


443

Чи є спосіб розташування фонового зображення певну кількість пікселів праворуч від його елемента?

Наприклад, щоб розташувати щось із певної кількості пікселів (скажімо, 10) зліва , ось як я це зробив:

#myElement {
    background-position: 10px 0;
}

Ви точно не маєте на увазі background-position: -10px 0;? Просто перевіряю :)
тридцятьдо

1
Я знаю, що в ньому є кілька дублікатів, але я не можу їх знайти.
Pekka

1
@thirtydot, який переміщує його, залишилося на 10 пікселів від лівого краю.
nickf

нерозумно, що це не доступно ...
Хуан

@nickf Ви розумієте, що він був доступний на більшості пристроїв до кінця 2013 року?
Хуан

Відповіді:


786

Я вважаю цю функцію CSS3 корисною:

/* to position the element 10px from the right */
background-position: right 10px top;

Наскільки мені відомо, це не підтримується в IE8. В останніх Chrome / Firefox це чудово працює.

Див. Розділ Чи можна використовувати для отримання детальної інформації про підтримувані веб-переглядачі.

Використовуване джерело: http://tanalin.com/uk/blog/2011/09/css3-background-position/

Оновлення :

Ця функція зараз підтримується у всіх основних браузерах, включаючи мобільні браузери.


23
Це чудово, але, на жаль, він не працює на Safari 5.1.7 (що надзвичайно важливо, якщо його переглядають мобільні телефони)
MosheElisha

5
Зараз він працює на мобільних пристроях (перевірено на Android, iOS та WindowsPhone). Ще Safari 5.1.7 не підтримує фонову позицію, задану як тут.
Szorstki

8
Я використовую це, але з відсотковою віддачею для старих броуерів, наприклад. фонове положення: 95% центр; фон-позиція: правий 13px центр;
gregdev

1
Не впевнений, скільки людей досі користуються браузерами, достатньо старими, щоб не підтримувати це. Користувачі Safari вже мають новішу версію, хоча багато старих пристроїв для Android все ще існують. caniuse.com/#feat=css-background-offsets Досить просто, щоб використовувати для них відсотковий запас (хоча це не зовсім те саме).
Марк

29
Зверніть увагу, що це працює лише в тому випадку, якщо ви вказали кардинальне положення як для вертикального, так і для горизонтального положення, наприклад right left top bottom. Наприклад, не буде background-position: right 10px 10pxbackground-position: right 10px top 10px
показано

110

!! Відповідь застаріла, оскільки ця функція принесла CSS3

Чи є спосіб розташування фонового зображення певну кількість пікселів праворуч від його елемента?

Ні.

Популярні обхідні шляхи включають

  • встановлення а margin-rightзамість елемента
  • додавання прозорих пікселів до самого зображення та розміщення його top right
  • або обчислення позиції за допомогою jQuery після того, як буде відома ширина елемента.

6
Більш повна підтримка розширеного CSS3 "фон-позиція" знаходиться біля кута: stackoverflow.com/questions/501375/…
Влад Магдалін

92

Найпростіше рішення - використовувати відсотки. Це не зовсім відповідь, яку ви шукали, оскільки ви попросили точності пікселів, але якщо вам просто потрібне щось, щоб мати трохи прокладки між правим краєм і зображенням, надання чогось 99% позиції, як правило, працює досить добре.

Код:

/* aligns image to the vertical center and horizontal right of its container with a small amount of padding between the right edge */
div.middleleft {
  background: url("/images/source.jpg") 99% center no-repeat;
}

30
+1 "Ми наступного тижня підемо через вирівнювання пікселів" - завжди працює.
moonwave99

2
Це рішення, здається, працює найбільш послідовно у веб-переглядачах.
Еван Хаас

49

Застаріла відповідь. Зараз вона реалізована в основних браузерах, дивіться інші відповіді на це питання.

CSS3 змінив специфікацію, background-positionщоб вона працювала з різною точкою початку. На жаль, я не можу знайти жодних доказів того, що він ще реалізований у будь-яких основних браузерах.

http://www.w3.org/TR/css3-background/#the-background-position Див. приклад 12.

background-position: right 3em bottom 10px;

Дякую Тамі! На жаль, це не спрацювало для мене ні в Firefox 4, ні в Chrome 11.
nickf

Це реалізовано в Opera. Думав, що це занадто добре, щоб бути правдою, і тоді я перевірив інші браузери, і мав рацію.
Vian Esterhuizen

1
У поточній версії Chrome це все ще не працює. Version 21.0.1180.89
andlrc

3
Зараз це підтримує Chrome Canary (v26). Після того, як це вийде на канал випуску, і Safari оновлює свій двигун, лише IE6-8 не матиме підтримки (IE9 / 10 вже підтримує новий формат).
Влад Магдалін

1
Щойно перевірено це, і він зараз працює у Firefox (v.18.0.2), IE (v.9.0.8) та Chrome (v.25.0.1364.97), але він ще не працює в Safari (v.5.1.2) . Хочеться дізнатися, чи хтось знає, коли це може бути скасовано ;-)
Чая Купер,

40

Як запропоновано тут , це досить крос-браузерне рішення, яке чудово працює:

background: url('/img.png') no-repeat right center;
border-right: 10px solid transparent;

Я використовував його, оскільки функція CSS3 для визначення зрушень, запропонованих у відповіді, позначених як вирішення питання, поки не підтримується в браузерах. Напр


1
А як бути, коли мені потрібно, щоб ця межа була певного кольору?
машинобудівний вирок

1
Це чудова відповідь, тому що ви можете мати точність пікселів, зберігаючи його перехресний веб-браузер. Дякую! (І якщо ви хочете, щоб рамка була певного кольору, використовуйте обгортку якогось типу, щоб обернути введення та додати межу до цього елемента.)
Gavin,

23

Найбільш відповідей є новим синтаксисом чотири-значення фону позиції, але поки все браузери не підтримують його ваш кращий підхід є поєднанням попередніх відповідей в наступному порядку:

background: url(image.png) no-repeat 97% center; /* default, Android, Sf < 6 */
background-position: -webkit-calc(100% - 10px) center; /* Sf 6 */
background-position: right 10px center; /* Cr 25+, FF 13+, IE 9+, Op 10.5+ */

15

Простий, але брудний трюк - просто додати потрібне зміщення до зображення, яке ви використовуєте як фон. це не є ремонтом, але це робить роботу.


8

Це буде працювати в більшості сучасних браузерів ... крім IE (підтримка браузера) . Хоча ця сторінка перераховує> = IE9 як підтримується, мої тести з цим не погодилися.

Ви можете використовувати властивість calc () css3 так;

.class_name {
    background-position: calc(100% - 10px) 50%;
}

Для мене це найбільш чистий і логічний спосіб досягти межі праворуч. Я також використовую резервне використання border-right: 10px solid transparent;для IE.


1
Це чудово, але, на жаль, він не працює на Safari 5.1.7 (що надзвичайно важливо, якщо його переглядають мобільні телефони)
MosheElisha

Тоді слід використовувати фонову позицію, яка працює в Safari, і ту, яку можна перекрити браузерами, які можуть її використовувати. Наприклад: background-position: 92% 8px; background-position: calc(100% - 12px) 8px;
Лакі Політ

Працює не у всіх браузерах чувак. right 10px centerСинтаксис має більш розширену підтримку в браузерах.
Farzad YZ

Будь ласка, прочитайте перший рядок, де я заявляю, що це працює на "найсучасніших браузерах". Я ніколи не сказав, що це працює на всіх них.
Новокаїн

Згідно caniuse, використання вапняно обрушиться IE9 ... як тільки ви замінили _з-
Раскін

4

Гаразд, якщо я розумію, що ви просите, щоб ви зробили це;

Ваш контейнер DIV викликається, #main-containerі .my-elementце всередині нього. Використовуйте це для початку роботи;

#main-container { 
  position:relative;
}
/*To make the element absolute - floats above all else within the parent container do this.*/
.my-element {
  position:absolute;
  top:0;
  right:10px;
}

/*To make the element apart of elements, something tangible that affects the position of other elements on the same level within the parent then do this;*/
.my-element {
  float:right;
  margin-right:10px;
}

До речі, краще використовувати класи, якщо ви посилаєтесь на елемент нижчого рівня в межах сторінки (я припускаю, що ви, отже, міняєте своє ім'я вище.


3

Специфікація CSS3, що дозволяє різні походження для фонового положення, тепер підтримується у Firefox 14, але все ще не в Chrome 21 (мабуть, IE9 їх частково підтримує, але я сам не перевіряв це)

Окрім проблеми з Chrome, на яку посилається @MattyF, тут є коротший звіт: http://code.google.com/p/chromium/isissue/detail?id=95085


Я щойно перевірив це, і зараз він працює в Firefox (v.18.0.2), IE (v.9.0.8) і Chrome (v.25.0.1364.97), але не в Safari (v.5.1.2)
Chaya Купер

3

Якщо у вас пропорційні елементи, ви можете використовувати:

.valid {
    background-position: 98% center;
}

.half .valid {
    background-position: 96% center;
}

У цьому прикладі .validбув би клас із малюнком і .halfбув би ряд з половиною розміру від стандартного.

Брудно, але працює як шарм, і це досить керовано.


1
У моєму випадку (використовуючи схему фіксованої ширини) це робить саме те, що мені потрібно. Дякую.
Гевін

3

Якщо ви хочете використати це для додавання стрілок / інших значків до кнопки, наприклад, тоді ви могли б використовувати псевдоелементи css?

Якщо це дійсно фонове зображення для всієї кнопки, я схильний включати проміжок у зображення і просто використовувати

background-position: right 0;

Але якщо мені потрібно додати, наприклад, розроблену стрілку до кнопки, я, як правило, має цей html:

<a href="[url]" class="read-more">Read more</a>

І схильні робити наступні дії з CSS:

.read-more{
    position: relative;
    padding: 6px 15px 6px 35px;//to create space on the right
    font-size: 13px;
    font-family: Arial;
}

.read-more:after{
    content: '';
    display: block;
    width: 10px;
    height: 15px;
    background-image: url('../images/btn-white-arrow-right.png');
    position: absolute;
    right: 12px;
    top: 10px;
}

Використовуючи селектор: after, я додаю елемент, використовуючи CSS, просто щоб містити цю маленьку піктограму. Ви можете зробити те ж саме, додавши проліт або<i> елемент всередині a-елемента. Але я думаю, що це більш чистий спосіб додавання піктограм до кнопок, і це підтримується крос-браузер.

ви можете ознайомитись зі скрипкою тут: http://codepen.io/anon/pen/PNzYzZ


це має бути content: ''; скоріше, content:0;але це було для мене корисним рішенням
Nat


2

використовувати правий центр як позицію, а потім додати прозору межу, щоб зрушити її?


1
Це непогано, але тоді зміст також зміститься праворуч. Це може бути, а може і не бути зловмисником. Ось приклад того, як це виглядає: jsbin.com/ijewoq/1
nickf

Подумайте, що це лише випадок врівноваження з невеликим випробуванням та помилками :) сподіваюся, що це вийде!
Андре Фігерейра

2

Якщо у вас є елемент з фіксованою шириною і ви знаєте ширину вашого фонового зображення, ви можете просто встановити позицію фону на: ширина елемента - ширина зображення - проміжок, який ви хочете праворуч.

Наприклад: за допомогою елемента в 100 пікселів та зображення в ширину 300 пікселів, щоб отримати розрив у 10 пікселів праворуч, ви встановите його на 100-300-10 = -210 пікселів:

#myElement {
  background:url(my_image.jpg) no-repeat -210px top;
  width:100px;
}

І ви отримуєте найменше 80 пікселів свого зображення ліворуч від елемента, а проміжок 20 пікселів праворуч.

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

Не впевнений, що це стосується і вашої справи.


2

моя проблема полягає в тому, що мені потрібно було фонове зображення залишатися на однаковій відстані від правої межі, коли розмір вікна змінюється, тобто для планшета / мобільного тощо.

background-position: 98% 6px;

і він тримається на місці.


Це може спрацювати в ситуаціях, коли ви точно знаєте розміри вікна, але більшу частину часу в Інтернеті ви не можете бути впевнені в цьому. Подивіться на прийняту відповідь, яка буде працювати у будь-яких ситуаціях (у підтримуваних браузерах).
nickf

2

так! добре розташувати фонове зображення як би 0px з правого боку браузера замість лівого - я використовую:

background-position: 100% 0px;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.