w3schools units significa rem que length css viewport-units

css - units - ¿Es posible calcular el ancho de la ventana gráfica(vw) sin la barra de desplazamiento?



viewport css (4)

Como se mencionó en el título, ¿es posible calcular el vw sin las barras de desplazamiento solo en css?

Por ejemplo, mi pantalla tiene un ancho de 1920px . vw regresa 1920px , genial. Pero el ancho real de mi cuerpo es solo algo así como 1903px .

¿Hay alguna forma de recuperar el valor de 1903px solo con css (no solo para los hijos directos del body ), o necesito JavaScript para esto?


De acuerdo con las especificaciones , las unidades de longitud relativa de la ventana gráfica no tienen en cuenta las barras de desplazamiento (y, de hecho, suponen que no existen).

Entonces, cualquiera que sea su comportamiento deseado, no puede tener en cuenta las barras de desplazamiento al usar estas unidades.


La unidad vw no tiene en cuenta la barra de desplazamiento de overflow-y cuando el overflow-y está configurado en auto .

Cámbielo a overflow-y: scroll; y la unidad vw será la ventana gráfica sin la barra de desplazamiento.

Único inconveniente a tener en cuenta. Si el contenido se ajusta a la pantalla, la barra de desplazamiento se muestra de todos modos. La posible solución es cambiar de auto a scroll en javascript.


Los navegadores Webkit excluyen las barras de desplazamiento, otros los incluyen en el ancho devuelto. Por supuesto, esto puede llevar a problemas: por ejemplo, si ha generado dinámicamente contenido con ajax que agrega altura dinámicamente, Safari puede cambiar de un diseño a otro durante la visualización de la página ... Ok, no sucede a menudo, pero es algo para ser consciente de En el móvil, menos problemas, porque las barras de desplazamiento generalmente no se muestran.

Dicho esto, si su problema es calcular exactamente el ancho de la ventana gráfica sin barras de desplazamiento en todos los navegadores, que yo sepa, un buen método es este:

width = $(''body'').innerWidth();

habiendo establecido previamente:

body { margin:0; }


Una forma de hacer esto es con calc. Por lo que yo sé, el 100% es el ancho incluyendo barras de desplazamiento. Así que si lo haces:

body { width: calc(100vw - (100vw - 100%)); }

Obtienes los 100vw menos el ancho de la barra de desplazamiento.

También puedes hacer esto con la altura, si quieres un cuadrado que sea el 50% de la ventana gráfica, por ejemplo (menos el 50% del ancho de la barra de desplazamiento)

.box { width: calc(50vw - ((100vw - 100%)/2)) height: 0 padding-bottom: calc(50vw - ((100vw - 100%)/2)) }