Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
После некоторых попыток я обнаружил, что вызывает проблему. background-position
перестает работать, когда фон является таким же большим (или большим), как и его фрейм. Вот почему решение dognose работает. Он удаляет background-size
.
Как доказательство, я изменил CSS .br
-фрагмы и .br .bg-image
на следующее:
.br {
top:calc(100% - 340px - 30px);
left:calc(100% - 300px - 30px);
}
.br .bg-image {
background-position: calc(100% + 30px) calc(100% + 30px);
/* 100% puts it bottom right, + 30px offset from .br */
background-position: right -30px bottom -30px;
/* or simply use this */
height: 100%;
width: 100%;
background-size: 800px 600px;
}
Таким образом background-size
больше не равен кадру, заставляя background-position
работать так, как предполагается.
См. скрипт
Причина, по которой она не работает с процентами, связана с тем, что background-position
в буквальном смысле зависит от background-size
. Поскольку background-position: 0% 0%;
находится сверху слева, а background-position: 100% 100%;
находится справа внизу. Если фоновое изображение является таким же большим, как и содержащий фрейм, разница между 0% и 100% больше не существует.
Используя эту теорию в сочетании с calc()
, все, что она делает, это:
calc(100% - 340px - 30px)
поместите его вправо (100%), который вообще не перемещает его, а затем переместите его влево 370px (-340px - 30px).
В ваш случай идет вправо, потому что вы префикс right
перед вашим calc()
.
GEspinha несколько прав. Этот пример работает так, как вы могли ожидать:
.br .bg-image {
background: url('http://media1.santabanta.com/full') 50% 50%;
}
, имея это - он не будет работать.
.br .bg-image {
background-position:50% 50%;
}
http://jsfiddle.net/gtj5p0px/ (если это ваш выведенный вывод для нижнего правого кадра)
blockquote>
background-position
Initial value 0% 0%
относится к размеру области фонового позиционирования минус размер фонового изображения; size относится к ширине для горизонтальных смещений и к высоте для вертикальных смещений
blockquote>. Поэтому любые различия в размере фонового изображения и размере элемента приветствуются, а также то, что делает фоновое позиционирование работать с процентами. В противном случае они этого не делают.
Пример:
Рассмотрим изображение с размером
500X500 px
; Использованиеbackground-position: 50% 50%;
Если ваш div имеет ширину600px
; ваше фоновое изображение будет сдвинуто вправо на50% * (600px - 500px)
, которое равно50px
. Аналогично, еслиdiv
имеет высоту700px
, ваше фоновое изображение будет сместиться на50% * (700px - 500px)
, то есть100px
div{ background-image: url(https://i.imgur.com/gcnJ2Qi.png); background-repeat: no-repeat; background-position: 50% 50%; border: solid grey; width: 600px; height:700px; }
<div></div>
В случае, если div уже, чем изображение Теперь вы являетесь элементом div
300X400 px
, и вы хотите поместить ваше фоновое изображение так же, как и раньше(50px right and 100px down)
Вам нужно будет указать отрицательныйbackground-position: -25% -100%;
Поскольку-25% * (300-500) = 50px
и-100% (400-500) = 100px
div{ background-image: url(https://i.imgur.com/gcnJ2Qi.png); background-repeat: no-repeat; background-position: -25% -100%; border: solid grey; width: 300px; height:400px; }
<div></div>
В случае, когда оба div и изображения имеют одинаковый размер: любой процент, указанный вами в
background-position
, будет умножен на ноль. И изображение будет всегда выровнено с верхним левым углом div. Чтобы исправить это, уменьшите или увеличьте изображение путем сбросаbackground-size:80% or 120%;
div{ background-image: url(https://i.imgur.com/gcnJ2Qi.png); background-repeat: no-repeat; background-position: 50% 100%; border: solid grey; width: 500px; height:500px; background-size:80%; }
<div></div>