2012-04-17 21 views
33

Quiero agregar una imagen de fondo en el lado derecho de los elementos de la lista, y quiero tener un relleno del lado derecho también, pero no puedo hacer eso. Por favor, eche un vistazo a siguiente ejemplo:CSS: Imagen de fondo y relleno

HTML:

<ul> 
    <li>Hello</li> 
    <li>Hello world</li> 
</ul> 

CSS:

ul{ 
    width:100px; 
} 

ul li{ 
    border:1px solid orange; 
    background: url("arrow1.gif") no-repeat center right; 
} 

ul li:hover{ 
    background:yellow url("arrow1.gif") no-repeat center right; 
} 

sé que podemos ajustar la posición de la imagen por píxeles, pero dado que cada uno de los li tiene una anchura diferente No puedo hacer eso

Aquí hay enlace jsFiddle: http://jsfiddle.net/QeGAd/1/

Respuesta

29

Puede utilizar los valores de porcentaje:

background: yellow url("arrow1.gif") no-repeat 95% 50%; 

No píxel perfecto, pero ...

+3

para cualquiera que se pregunte: la propiedad css se llama 'background-position'. – Blauhirn

2

La única opción de Actuall tiene este píxel hecho perfecto es crear algo de relleno transparente dentro del GIF mismo. De esa forma, puede alinearlo a la derecha de LI y aún así tener el relleno de fondo que está buscando.

0

configuración direction propiedad de CSS a rtl debería funcionar con usted. Supongo que no es compatible con IE6.

e.g

<ul style="direction:rtl;"> 
<li> item </li> 
<li> item </li> 
</ul> 
4

Usted puede alcanzar sus resultados con dos métodos: -

Primer método definen valores de posición: -

HTML

<ul> 
<li>Hello</li> 
<li>Hello world</li> 
</ul> 

CSS

ul{ 
    width:100px;  
} 

ul li{ 
    border:1px solid orange; 
    background: url("http://www.adaweb.net/Portals/0/Images/arrow1.gif") no-repeat 90% 5px; 
} 


ul li:hover{ 
    background: yellow url("http://www.adaweb.net/Portals/0/Images/arrow1.gif") no-repeat 90% 5px; 
} 

primer demo: -http://jsfiddle.net/QeGAd/18/

Segundo método por CSS : Antes: Después selectores

HTML

<ul> 
<li>Hello</li> 
<li>Hello world</li> 

CSS

ul{ 
    width:100px;  
} 

ul li{ 
    border:1px solid orange; 
} 

ul li:after { 
    content: " "; 
    padding-right: 16px; 
    background: url("http://www.adaweb.net/Portals/0/Images/arrow1.gif") no-repeat center right; 
} 

ul li:hover { 
    background:yellow; 
} 

ul li:hover:after { 
    content: " "; 
    padding-right: 16px; 
    background: url("http://www.adaweb.net/Portals/0/Images/arrow1.gif") no-repeat center right; 
} 

segundo demo: -http://jsfiddle.net/QeGAd/17/

1

Use background-position: calc(100% - 20px) center, Para la perfección de píxeles calc() es la mejor solución.

ul { 
 
    width: 100px; 
 
} 
 
ul li { 
 
    border: 1px solid orange; 
 
    background: url("http://placehold.it/30x15") no-repeat calc(100% - 10px) center; 
 
} 
 
ul li:hover { 
 
    background-position: calc(100% - 20px) center; 
 
}
<ul> 
 
    <li>Hello</li> 
 
    <li>Hello world</li> 
 
</ul>

+1

Esto es bueno si desea relleno personalizado para el fondo. Ej .: 'background-position: 5px 10px; tamaño de fondo: calc (100% -10px) calc (100% -20px); ' – Steffan

1

fondo-clip: Contenido de la caja; El fondo se pintará dentro del cuadro de contenido.