2012-06-19 7 views
219

¿Es posible hacer un div 50px menos del 100% en CSS puro? Quiero que <div> sea solo 50px menos que 100%. No quiero ningún JavaScript.¿Es posible hacer un div 50px menos del 100% en CSS3?

+1

@hakre - Tu enlace es en CSS, y esto está en CSS3. –

+2

¿cómo es CSS no CSS3 no CSS no CSS3 no CSS no ...?Si solicita explícitamente una función de CSS que ha sido formulada solo en la versión 3, solicítela (no CSS en general, sí, su cuerpo de pregunta difiere de su título aquí, así que no me culpe;)) – hakre

+0

Bueno, eche un vistazo en el cuerpo debajo del título de la pregunta. Debe usar el cuerpo para hacer que la pregunta CSS3 sea explícita (y mientras hablamos diga si CSS3 o CSS3 +) – hakre

Respuesta

274

Sí, puedes. Sin utilizar el IE expression(), puede hacerlo en CSS3 utilizando calc().

div { 
    width: 100%; 
    width: -webkit-calc(100% - 50px); 
    width: -moz-calc(100% - 50px); 
    width: calc(100% - 50px); 
} 

Demostración: http://jsfiddle.net/thirtydot/Nw3yd/66/

Esto hará que su vida mucho más fácil. Se admite actualmente en los 3 principales navegadores: Firefox, Google Chrome (WebKit), e IE9: http://caniuse.com/calc

MDN: https://developer.mozilla.org/en/CSS/-moz-calc

+40

Los problemas son a) la cuestión no estaba claro acerca de alturas con respecto anchura y b) la auto-respuesta no es la mejor respuesta. Para ancho, sandeep es mejor, para altura, gilly3. La respuesta del OP no se admite hoy en día en algunas estadísticas significativas del navegador. (IE7/8) – shannon

+16

BTW: la versión sin prefijo debe ir después de la versión con prefijo, no antes. Ver https://developer.mozilla.org/Writing_Forward_Compatible_Websites Además, en mi experiencia, muchas situaciones de calc() pueden ser reemplazadas por 'box-sizing'. – luiscubal

+1

"expresión()" causa problemas, porque el navegador recalcula las funciones (dentro de las expresiones) en cada píxel del movimiento del mouse, tiene un impacto en los usos del procesador. Y en este caso (con calc) esto sucede? – 19WAS85

159

Un DIV toma automáticamente el ancho de su matriz. Por lo tanto, no es necesario definir ningún width. Normalmente basta con escribir así:

div{ 
    margin-right:50px; 
} 

Marque esta fiddle

+11

¿Qué tal [esto] (http://jsfiddle.net/Nw3yd/3/) vs [this] (http://jsfiddle.net/Nw3yd/4/)? – Chango

+4

@ Chango - [Ese] (http://jsfiddle.net/Nw3yd/4/) es absolutamente increíble cuando cambia el tamaño de la ventana. –

+1

@Chango puede ser que quieras lograr http://jsfiddle.net/Nw3yd/6/ – sandeep

37

Otra alternativa es el posicionamiento absoluto.

div { 
    position: absolute; 
    left: 0; 
    right: 50px; 
} 

fiddle

embargo, la solución de Sandeep es el que debe utilizar normalmente. Solo evite el uso excesivo de float. Esto evita que los elementos llenen naturalmente su contenedor.

-4

Sí podemos hacerlo haciendo

#custom_div{ 
width:100%; 
margin-right:50px; 
} 

Gracias

+4

por qué define ancho: automático; – sandeep

+9

Esta es la misma respuesta que sandeep's, además de 'width: auto;', que no tiene ningún efecto. Su respuesta no agrega ningún valor en absoluto. En lugar de publicar tu propia versión de la respuesta de sandeep, deberías haber subido la respuesta de sandeep. –

7

Mi solución funciona con y sin float: left.

HTML:

<div></div> 

css:

div { 
    height: 20px; 
    background: black; 
    float: left; 
    width: 100%; 
    padding-right: 50px; 
    box-sizing: border-box; 
    background-clip: content-box; 
}​ 

Demo

Compatibilidad:
Firefox 3.6, Safari 5, Chrome 6, Opera 10, IE 9

+2

Los divs en su método todavía están ocupando todo el ancho de la pantalla, por lo que si pone dos de ellos no puede hacerlos flotar uno al lado del otro. – Chango

4

jsFiddle

Usando la pantalla block y margin. display:block cuando no se combina con un height/width definido intentará llenarlo.

header { 
    width:100%; 
    background:#d0d0d0; 
    height:100%; 
} 
h1 { 
    display:block; 
    border:#000 solid 1px; 
    margin:0 50px 0 0; 
    height:100px; 
} 
<header> 
    <h1></h1> 
</header> 
Cuestiones relacionadas