2009-02-01 21 views
15

Por lo que puedo decir, no es posible colocar una imagen de fondo CSS 1em desde el borde derecho de ningún bloque, tampoco es posible colocar una imagen 1em desde la parte inferior.Coloque la imagen de fondo 1em desde la derecha?

El siguiente código coloca la imagen de fondo 1em desde la izquierda y 2em desde la parte superior.

<div class="foo" style="background: url('bar.png') no-repeat 1em 2em"> 
    Some text here 
</div> 

¿Hay alguna manera en el CSS para especificar que la imagen de fondo debe ser "tan lejos desde el borde derecho" si el tamaño de la caja es dinámico y suponiendo que no se puede cambiar el código HTML?

(En porcentajes no funcionarán, ya que la caja se puede cambiar el tamaño)

Si esto no es posible, ¿cuál es la más pequeña cantidad de cambio que necesita para hacer que el código HTML?

Esta es la solución que se me ocurrió:

<style> 
div.background 
{ 
    float: right; 
    background: url('bar.png') no-repeat top left; 
    margin-right: 1em; 
    width: 16px; 
    height: 16px; 
} 
</style> 
<div class="foo"> 
    <div class="background" style="">&nbsp;</div> 
    Some text here 
</div> 

Respuesta

0

Después de algunas investigaciones la longitud real de píxeles x de la posición de fondo es siempre contados desde el lado izquierdo del elemento. La única manera de hacer este trabajo (sin necesidad de utilizar otros elementos) sería el uso de JavaScript, calcular la longitud dada dados los elementos Ancho:

var rightMargin = "10"; // in pixels 
var imageWidth = "16"; 
var left = element.style.clientWidth - imageWidth - rightMargin; 

element.style.backgroundPosition = "0px " + left + "px"; 
+0

Esto no alcanza el punto un poco, ya que no permite que un 1 em "relleno" entre la imagen de fondo y el borde del bloque. –

+0

Bueno, puede configurar eso con la posición de fondo, y luego también usar background-position-x para alinearlo a la derecha. –

+0

En realidad, la forma en que leo la documentación, background-position-x es simplemente un contenedor para la posición de fondo.Cambiar uno anula al otro. Además, solo es compatible con IE/Safari. –

2

Usted podría intentar algo como esto:

<style type="text/css" media="screen"> 
    #outer { 
     position: relative; 
     top: -1em; 
     left: -1em; 
     margin: 1em 0 0 1em; 
     outline: thin solid #F00; 
     background: url(http://i.stackoverflow.com/Content/Img/stackoverflow-logo-250.png) no-repeat 100% 100%; 
    } 
    #inner { 
     outline: thin solid #0F0; 
     position: relative; 
     top: 1em; 
     left: 1em; 
    } 
</style> 

<div id="outer"> 
    <div id="inner"> 
     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
    </div> 
</div> 

Editar: Esperamos CSS 3 background-position.

+0

Esto funcionará, pero es más largo que mi sugerencia original, pero probablemente puede acortarse. –

3

Elementos con posición: absoluta; puede ser posicionado por su borde derecho. lo tanto, si no te importa un pequeño cambio en el código HTML, haga lo siguiente:

<div id="the-box"> 
    <img id="the-box-bg" src="bar.png" /> 
    Text text text text.... 
</div> 
(...) 
#the-box { 
    position: relative; 
} 
#the-box-bg { 
    position: absolute; 
    right: 1em; 
    z-index: -1; 
} 

Por supuesto podría usar también la posición absoluta de un segundo div, con un fondo de repetición. Pero luego tendría que establecer el tamaño del div (interno) en CSS.

25

El CSS3 background-position spec le permite cambiar el punto de anclaje de la esquina superior izquierda a cualquier opción que desee. Por ejemplo, el siguiente configurará la esquina inferior inferior del 1 em imagen de la derecha y de la parte inferior 2px:

background-position: right 1em bottom 2px; 

confirmó a trabajar en:

IE9/10, Firefox 13+, Chrome 26+, Opera 11+, Seamonkey 2.14+, Lunascape 6.8.0

A partir de abril de 2013, solo IE6-8 y algunos navegadores periféricos carecen de soporte.

Aquí hay una página de prueba: http://jsbin.com/osojuz/1/edit

+3

Suena bien para escritorio. Aunque no tan bueno para dispositivos móviles, no funciona en iOS 6 Safari :( – poshaughnessy

+0

http://caniuse.com/#feat=css-background-offsets – zupa

+0

Voto a favor solo porque le brindó soporte a Seamonkey –

Cuestiones relacionadas