La pregunta vinculada stackoverflow.com/questions/11093943/… ofrece una respuesta interesante, pero no totalmente compatible con versiones anteriores, tal vez le gustaría echarle un vistazo también.
11684
55
Para cualquiera que cruce esta pregunta, Chad respondió que los navegadores modernos admiten width: calc(100% - 100px);que hay algunas respuestas y espero que el autor de la pregunta actualice su pregunta :) :)
Descubrí que cuando estaba usando, calc(100% - 6px)por ejemplo, se mostraba como calc(94%), tuve que escapar de la siguiente manera y ahora funcionawidth: calc(~"100% - 6px");
nsilva
12
Tenga en cuenta que debe tener espacios en blanco alrededor del -(o +) carácter. Esto funciona: calc(100% - 100px); Y esto no:calc(100%-100px);
freefaller
Estoy un poco sorprendido de que no haya ninguna opción para restar automáticamente 2 veces el relleno del elemento, lo que generalmente sería un caso de uso bastante común. Por ejemplo, termino teniendo que hacerlo padding: 0.25em; width: calc(100% - 2 * 0.25em - 2em);, y tendría que cambiarlo 0.25emen dos lugares ahora si tiene que ser modificado.
cnst
Muchas gracias, también me gustaría señalar que funciona para agregar: (100% + 100px)
Viktor Mellgren
99
¿Podrías anidar un div con margin-left: 50px;y margin-right: 50px;dentro de un <div>con width: 100%;?
La primera solución es correcta, el contenedor podría no ser la ventana y, por lo tanto, 100vh podría no ser igual al 100%
Ben Taliadoros
1
Descubrí que cuando estaba usando, calc(100% - 6px)por ejemplo, se mostraba como calc(94%), tenía que escapar de la siguiente manera y ahora funcionawidth: calc(~"100% - 6px");
Establecer los márgenes del cuerpo a 0, el ancho del contenedor externo al 100%, y usar un contenedor interno con 50px márgenes izquierdo / derecho parece funcionar.
<style>
body {margin:0;padding:0;}.full-width
{width:100%;}.innerContainer
{margin:0px50px0px50px;}</style><body><divclass="full-width"style="background-color:#ff0000;"><divclass="innerContainer"style="background-color:#00ff00;">
content here
</div></div></body>
Al trabajar con paneles de arranque, buscaba cómo colocar el enlace "eliminar" en el panel de encabezado, que no estaría oscurecido por el elemento vecino largo. Y aquí está la solución:
html:
<divclass="with-right-link"><aclass="left-link"href="#">Long link header Long link header</a><aclass="right-link"href="#">Delete</a></div>
Comenzó a funcionar para mí solo cuando revisé todos los espacios. Entonces, no funcionó así: width: calc(100%- 20px)o calc(100%-20px)funcionó perfectamente width: calc(100% - 20px).
Editar: mi solución está mal. La solución publicada por Aric TenEyck que sugiere usar un div con un ancho del 100% y luego anidar otro div usando los márgenes parece más correcto.
Si haces esto, ¿no terminarás con un ancho total de 100% + 100px?
Adam Crume
: o (Lo siento. ¿Debería eliminar mi publicación o dejarla y dejar que los votos
negativos la
1
los votos negativos generalmente tienen el propósito de alentarlo a que limpie su publicación para que pueda recuperar puntos de representación perdidos por los votos negativos. Si sabe que su solución es incorrecta, puede eliminarla con o sin votos negativos o actualizarla para que sea correcta.
aleemb
@AdamCrume - No Ese solo sería el caso si también especificaras width:100%. Un div llenará automáticamente el contenedor a menos que lo anule, por ejemplo, especificando explícitamente width, o usando floato posicionamiento absoluto. Agregar un margen a un div solo hará que llene su contenedor, menos la cantidad especificada por el margen.
gilly3
@aleemb: en este caso, los votos negativos son de usuarios que no entienden css ya que esta respuesta es perfectamente correcta.
gilly3
1
El relleno en el div externo obtendrá el efecto deseado.
Hay 2 técnicas que pueden ser útiles para este escenario común. Cada uno tiene sus inconvenientes, pero ambos pueden ser útiles a veces.
tamaño de la caja: border-box incluye relleno y ancho del borde en el ancho de un elemento. Por ejemplo, si establece el ancho de un div con 20px 20px padding y 1px border a 100px, el ancho real sería 142px pero con border-box, tanto el relleno como el margen están dentro de 100px.
.bb{-webkit-box-sizing: border-box;/* Safari/Chrome, other WebKit */-moz-box-sizing: border-box;/* Firefox, other Gecko */
box-sizing: border-box;
width:100%;
height:200px;
padding:50px;}
Tampoco son perfectos, por supuesto, el tamaño de la caja no se ajusta exactamente a la pregunta, ya que el elemento es en realidad 100% de ancho, en lugar de 100% - 100px (sin embargo, un elemento secundario sería). Y el posicionamiento absoluto definitivamente no se puede usar en todas las situaciones, pero generalmente está bien siempre que se establezca la altura principal.
CSS no se puede usar para animación, o cualquier modificación de estilo en eventos.
La única forma es usar una función de JavaScript, que devolverá el ancho de un elemento dado, luego, restará 100 píxeles y establecerá el nuevo tamaño de ancho.
Suponiendo que está utilizando jQuery, podría hacer algo así:
Puede usar LESS , que es un archivo JavaScript que procesa previamente su CSS para poder incluir lógica y variables en su CSS. Entonces, para su ejemplo, en MENOS escribiría width: 100% - 100px;para lograr exactamente lo que quería :)
¿Podría por favor agregar una explicación a su respuesta?
Michał Perłakowski
Intenté: calc (100% -100px) y los resultados no son consistentes en todas las plataformas / navegadores, luego intenté simplificar realmente y utilicé el margen derecho: 100px; ancho: auto; y funcionó ...
user1552559
calc es un componente CSS3 y este CSS funcionará en aquellos navegadores que admitan CSS3.
Sushan
-2
La respuesta corta es que NO hagas esto en CSS. Internet Explorer tiene soporte para algo llamado Expresiones CSS, pero esto no es estándar y definitivamente no es compatible con otros navegadores como FireFox, por ejemplo.
Sí, supongo que tendré que mantenerlo en JavaScript, estoy refractando un código y quería eliminar el JavaScript que estaba haciendo eso tks.
fmsf
1
Por favor, si puede evitarlo, no lo haga en JavaScript. HTML + CSS puede ser complicado y la solución puede no ser obvia, pero es probable que pueda hacer casi cualquier cosa que necesite. Usar JavaScript para diseños estáticos es casi siempre una mala idea.
width: calc(100% - 100px);
que hay algunas respuestas y espero que el autor de la pregunta actualice su pregunta :) :)Respuestas:
Los navegadores modernos ahora admiten:
Para ver la lista de versiones de navegador admitidas, ¿puede usar calc () como valor de unidad CSS?
Hay una reserva de jQuery: css ancho: calc (100% -100px); alternativa usando jquery
fuente
calc(100% - 6px)
por ejemplo, se mostraba comocalc(94%)
, tuve que escapar de la siguiente manera y ahora funcionawidth: calc(~"100% - 6px");
-
(o+
) carácter. Esto funciona:calc(100% - 100px);
Y esto no:calc(100%-100px);
padding: 0.25em; width: calc(100% - 2 * 0.25em - 2em);
, y tendría que cambiarlo0.25em
en dos lugares ahora si tiene que ser modificado.¿Podrías anidar un div con
margin-left: 50px;
ymargin-right: 50px;
dentro de un<div>
conwidth: 100%;
?fuente
Puedes probar esto ...
vw: ancho de ventana
vh: altura de la ventana gráfica
fuente
calc(100% - 6px)
por ejemplo, se mostraba comocalc(94%)
, tenía que escapar de la siguiente manera y ahora funcionawidth: calc(~"100% - 6px");
mi código, y funciona para IE6:
fuente
Debe tener un contenedor para su div de contenido que desea que sea 100% - 100px
Es posible que deba agregar un div de limpieza justo antes del último
</div>
si su div de contenido se desborda.fuente
Establecer los márgenes del cuerpo a 0, el ancho del contenedor externo al 100%, y usar un contenedor interno con 50px márgenes izquierdo / derecho parece funcionar.
fuente
Al trabajar con paneles de arranque, buscaba cómo colocar el enlace "eliminar" en el panel de encabezado, que no estaría oscurecido por el elemento vecino largo. Y aquí está la solución:
html:
css:
Por supuesto, puede modificar los valores "superior" y "derecho", de acuerdo con sus hendiduras. Fuente
fuente
Comenzó a funcionar para mí solo cuando revisé todos los espacios. Entonces, no funcionó así:
width: calc(100%- 20px)
ocalc(100%-20px)
funcionó perfectamentewidth: calc(100% - 20px)
.fuente
Podrías hacer:
Editar: mi solución está mal. La solución publicada por Aric TenEyck que sugiere usar un div con un ancho del 100% y luego anidar otro div usando los márgenes parece más correcto.
fuente
width:100%
. Un div llenará automáticamente el contenedor a menos que lo anule, por ejemplo, especificando explícitamentewidth
, o usandofloat
o posicionamiento absoluto. Agregar un margen a un div solo hará que llene su contenedor, menos la cantidad especificada por el margen.El relleno en el div externo obtendrá el efecto deseado.
fuente
Hay 2 técnicas que pueden ser útiles para este escenario común. Cada uno tiene sus inconvenientes, pero ambos pueden ser útiles a veces.
tamaño de la caja: border-box incluye relleno y ancho del borde en el ancho de un elemento. Por ejemplo, si establece el ancho de un div con 20px 20px padding y 1px border a 100px, el ancho real sería 142px pero con border-box, tanto el relleno como el margen están dentro de 100px.
Aquí hay un excelente artículo sobre él: http://css-tricks.com/box-sizing/ y aquí hay un violín http://jsfiddle.net/L3Rvw/
Y luego está la posición: absoluta
http://jsfiddle.net/Mw9CT/1/
Tampoco son perfectos, por supuesto, el tamaño de la caja no se ajusta exactamente a la pregunta, ya que el elemento es en realidad 100% de ancho, en lugar de 100% - 100px (sin embargo, un elemento secundario sería). Y el posicionamiento absoluto definitivamente no se puede usar en todas las situaciones, pero generalmente está bien siempre que se establezca la altura principal.
fuente
CSS no se puede usar para animación, o cualquier modificación de estilo en eventos.
La única forma es usar una función de JavaScript, que devolverá el ancho de un elemento dado, luego, restará 100 píxeles y establecerá el nuevo tamaño de ancho.
Suponiendo que está utilizando jQuery, podría hacer algo así:
Y con javascript nativo:
Suponemos que tiene un estilo CSS establecido con 100%;
fuente
¿Estás usando el modo estándar? Esta solución depende de ello, creo.
Si está tratando de hacer 2 columnas, podría hacer algo como esto:
Luego usa CSS para darle estilo:
Si no quieres 2 columnas, probablemente puedas eliminar
<div id="left">
fuente
fuente
Puede usar LESS , que es un archivo JavaScript que procesa previamente su CSS para poder incluir lógica y variables en su CSS. Entonces, para su ejemplo, en MENOS escribiría
width: 100% - 100px;
para lograr exactamente lo que quería :)fuente
No puedes
Sin embargo, puede utilizar márgenes para obtener el mismo resultado.
fuente
Esto funciona:
fuente
La respuesta corta es que NO hagas esto en CSS. Internet Explorer tiene soporte para algo llamado Expresiones CSS, pero esto no es estándar y definitivamente no es compatible con otros navegadores como FireFox, por ejemplo.
Sería mejor hacer esto en JavaScript.
fuente