2011-07-06 15 views
29

Estoy usando los pseudo elementos css: before y: after para dar un efecto de sangría en algunas de mis imágenes en un sitio web. Sin embargo, sin especificar el ancho y la altura, estos no se mostrarán. Esto me obligaría a especificar un ancho y una altura fijos para cada una de las imágenes, lo que supongo que funcionaría para una página web estática.CSS: Pseudo-elementos: antes y después de heredar ancho/altura del elemento original

Sin embargo, debido a que estas imágenes se generan dinámicamente con jQuery y son enviadas por el usuario, las imágenes difieren en anchura y altura cada vez. Ahora probablemente podría arreglar esto con Javascript obteniendo el ancho de la imagen y pasándola al: anterior, pero parece que es demasiado trabajo para algo como esto.

Mi pregunta es si hay una manera de hacer esto con CSS solamente, para tener el ancho de contener la imagen que se pasa al: antes en este < li>, de modo que el: antes y después del pseudo- los elementos heredan el ancho y alto del elemento original.

El diseño básico de páginas:

<ul> 
    <li> 
     <img src="foo" /> 
    </li> 
</ul>  

# css style simplefied 
ul{ float:left; list-style:none} 
li{float:left;} 
li img{float:left} 
li:before{ 
      content:"": 
      position:relative; 
      position:absolute; 
      float:left; 
      box-shadow:0 1px 2px rgba(0,0,0,0.4); 

} 

PS: la compatibilidad necesaria es sólo para navegadores Webkit móviles.

EDITAR

, por ejemplo, podría añadir líneas a la CSS con Javascript mediante el uso de las siguientes líneas:

var heightImg = (($('ul li:nth-child(n)').height())) + 'px';  
document.styleSheets[1].insertRule('ul li:before { height: ' + heightImg+ '; }', 0); 

Pero esto significaría que yo también voy a tener que trabajar con la dinámica id . Lo cual no será difícil, pero me pregunto si no hay una única forma de CSS.

+1

¿Por qué se especifica '' position' dos veces para li: before'? – BoltClock

+0

sin entender Q, este código (el doble posicionamiento a un lado) produce imágenes en una línea horizontal sin espacio entre ellas, ¿estás diciendo que quieres espacio entre ellas? o las imágenes nunca son horizontales en la aplicación móvil, si ese es el caso ¿por qué usar float? entonces, ¿a qué te refieres con "sangría de valores diferentes", realmente quieres que las imágenes se vean centradas ... disculpas por preguntas tontas pero realmente no obteniendo la apariencia que intentas lograr;) - quizás una imagen burlada de la imagen obligatoria – clairesuzy

+0

Disculpa la confusión, Con un aspecto sangrado, quise decir que quiero hacer que las imágenes se penetren en la página, así que aplico una sombra de cuadro en el: antes de que se superponga a la imagen y sombree la imagen bordes para que parezca que está hundido en la página. –

Respuesta

54

:before y :after pseudo-elementos son cajas de línea tanto como yo sé. Por lo tanto, puede ser útil usar display: block;.

+2

Lo probé, pero no hace la diferencia, incluso cuando se fija ancho y alto fijo en el < li> en sí. –

+3

Ya existe una regla 'float: left', por lo que' display: block' no cambiará nada. – BoltClock

+0

Estaba teniendo un problema con un pseudo elemento y este fue un consejo útil (estoy demasiado acostumbrado a asumir que todo ya está en pantalla: bloquear de manera predeterminada!) –

2
li{ 
    float:left; 
    position:relative; 
} 
li img{ 
    float:left; 
} 
li:before{ 
    content:" ": 
    position:absolute; 
    width:100%; 
    height:100% 
    box-shadow:0 1px 2px rgba(0,0,0,0.4); 
} 
1

parece content:" ": es importante junto con display: block

0

Probar:

ul { 
    position: relative; 
} 
li:before { 
    content: '\00a0'; 
    display: block; 
    float: left; 
    position: absolute; 
    height: 100%; 
} 

Ha funcionado para mí.

0

position: -ms-page solucionado el problema para mí

+3

Proporcione su respuesta con descripciones claras. No escriba el código, brinde la explicación sobre el código que ha compartido, para que otros también puedan entenderlo y sea útil. Le solicito que lea la sección de preguntas frecuentes para poder utilizar el desbordamiento de pilas de manera efectiva. –

Cuestiones relacionadas