2010-06-19 12 views
5

¿Hay alguna solución para deshabilitar los cambios de estilo de Javascript en la impresión?¿Hay alguna solución para desactivar los cambios de estilo de Javascript en la impresión?

Por ejemplo, si estoy ocultando algo a través de Javascript, pero quiero incluir esa información oculta en la impresión.

He escondido div usando Javascript y quiero mostrar que div si Javascript está deshabilitado. Ahora el problema es que, porque div está oculto usando Javascript, tampoco se muestra cuando se imprime la página.

+0

@Andy E's head - Gracias a editar mi pregunta para mejor. –

Respuesta

5

Utilice una hoja de estilo de impresión junto con !important para forzar que el elemento sea visible para la impresión.

<link rel="stylesheet" href="print.css" type="text/css" media="print" /> 

CSS:

#myDiv { display: block!important; } 
+1

Es importante tener en cuenta que al eliminar las traducciones de CSS aplicadas por JS, las rotaciones deben establecerse en 0 y las traducciones deben establecerse en el opuesto (por lo tanto, si traduce 50px con JS, traduzca 50px para imprimir). – zeel

-3

le sugiero que tome un vistazo a este artículo: CSS Design: Going to Print.

Grz, Kris.

+1

Esa es una introducción genérica al tema de las hojas de estilo de impresión que no cubre el problema descrito en la pregunta. – Quentin

+0

Y uno muy bueno que puede conducir a una mejor comprensión de los OP y futuros lectores de este hilo. – XIII

+0

Ya leí este artículo. No es nuevo para mí –

2

Ya se ha mencionado el uso de !important, pero es un instrumento contundente y las cosas se vuelven muy complicadas una vez que empiezas a necesitar anular las que ya están !important.

Uno de los grandes beneficios de CSS es que le permite separar el estilo de la estructura. En lugar de utilizar JS para manipular el estilo de un elemento, utilícelo para manipular la estructura . Por ejemplo, manipulando la propiedad className.

La hoja de estilos del medio de pantalla puede ocultar el elemento y dejarlo visible para la hoja de estilos del material de impresión.

Esto tiene la ventaja adicional de que no necesita pensar en tener que anular estos estilos ya que no se aplicarán en primer lugar (para imprimir).

+0

quiere decir que debería agregar una clase separada a 'div' para mostrar en forma impresa. puede explicar detalladamente –

+0

@met: cree una clase como 'visible-in-print' que tenga el estilo 'display': none' para' screen' y agregue esa clase a los elementos que desee ocultar en lugar de usar estilos en línea. – Joey

+0

pero no puedo mantener 'display: none' en css. Me estoy escondiendo como este 'document.write ('');' –

3

He encontrado una solución alternativa (al menos, funciona para mí). En mi caso, tenía una página html básica con algunos estilos (screen.css & print.css) más algunos javascript para mejorar progresivamente la página con características adicionales, etc.

Cuando llegó el momento de imprimir la página me di cuenta de que el js estaba afectando el diseño (ya que estaba haciendo un estilo css a través de jquery).

lo que terminó haciendo fue la siguiente:

en "screen.css"

body { 
    background-color: #ccc; /* or whatever colour your designer chose; if it NEEDS to be white, simply change something else (e.g. background-image, font-size, etc.) */ 
} 

en "print.css"

body { 
    background-color: #fff; 
} 

en el" -javascript-file.js "

$(document).ready(function() 
{ 
    if (isPrinting() == false) 
    { 
     init(); 
    } 
}); 

function isPrinting() 
{ 
    var isPrint = false; 
    /* I'm not 100% sure about the string literal check 'rgb(255, 255, 255)', 
     should do some testing here with other values || other attributes... 
     (font-size, color, line-height, other attributes that will have the 
     greatest difference/variation between "screen" and "print" styles) 
    */ 
    if ($('body').css('background-color') == 'rgb(255, 255, 255)') 
    { 
     isPrint = true; 
    } 
    return isPrint; 
} 

function init() 
{ 
    // All sorts of awesome goes here 
} 

Y eso fue todo! ¡Funcionó!

Aquí es una visión general de lo que está pasando: la página

  • usuario carga
  • cargas navegador está configurado "screen.css" color de fondo
  • Administración a "#ccc"
  • navegador carga "del -javascript-file.js"
  • JS cheques de color de fondo ... es "#ccc" ...
  • JS hace su cosa
  • usuario golpea comando de impresión
  • navegador carga "print.css"
  • color de fondo cambia a "cuerpo" #fff
  • cargas del navegador "la-javascript-file.js"
  • de color
  • JS cheques del cuerpo de antecedentes
  • JS da cuenta de color de fondo es "#fff"
  • JS no hace nada :)

Espero que esto ayude a alguien por ahí :)

+1

Esa es una ... idea interesante. Sin embargo, contradice el principio de separación de preocupaciones. Una vez que decida cambiar sus archivos CSS, el JS se romperá. – user123444555621

+0

Buen punto Pumbaa80 :) Estoy completamente de acuerdo y tampoco me gusta la dependencia, pero preferiría tener una dependencia bien documentada que unas 100 reglas importantes por todos lados: -/ – barryels

+0

Usando 'importante 'in print stylesheets es totalmente común y no hay nada de malo en eso. Otro problema con su solución es que no funciona si la pantalla y el diseño de impresión son idénticos (antes de aplicar JS) – user123444555621

Cuestiones relacionadas