Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Печать невидимых блоков (https://javascript.ru/forum/events/3025-pechat-nevidimykh-blokov.html)

mixeeff 10.03.2009 23:44

Печать невидимых блоков
 
На странице есть некоторые невидимые блоки текста. При клике, на соответствующие заголовки - они открываются. ДЖовольно распространенный прием.
У невидимых блоков изначально стоит display:block, чтобы в случае отключенных скриптов их было видно.
При загрузке страницы запускается скрипт, который устанавливает им display:none. Затем при клике на соответствующий блоку заголовок происходит переключение свойства display.
Задача: как сделать так, чтобы при печати у этих блоков также устанавливалось display:block, т.е. чтоб они печатались на принтере.
Речь вот об этом сайте:
http://rmc-center.com/seminars/themes.html

Kolyaj 10.03.2009 23:56

Стили для блоков
Код:

#js .block {
    display: none;
}
@media print {
    #js .block {
        display: block;
    }
}

В начале страницы (где-нибудь в head) добавить код
document.documentElement.id = 'js';

Теперь при отключенных скриптах блоки будут показаны, при включенных -- скрыты, причем без мигания. При печати блоки будут видны. Для показа блока style.display = 'block', для скрытия style.display = ''.

Onis 10.03.2009 23:57

Для Вашего варианта лучше всего сделать с помощью css

Сделать два разных файла, один для просмотра, второй для печати.
<link media="screen" href="for_view.css" type="text/css" rel="stylesheet"/> 
<link media="print" href="for_print.css" type="text/css" rel="stylesheet"/>

В for_print.css прописать по айдишникам всем вашим div - display:block

---------------
Ну да. Я немного затормозил.

mixeeff 11.03.2009 00:40

Простите, я пока еще чайник, но первый совет как-то совсем непонятен.
Что касается второго, то у меня, разумеется есть два разных CSS для печати и для экрана. Но поскольку на body onload срабатывает скрипт, который отключает "видимость" невидимых блоков, то на печать они все равно не выводятся.
Можно ли сделать так чтобы какой-то скрипт запускался при выводе на печать и устанавливал соответствующее свойство.
Блоков много и этот прием применяется на нескольких страницах. Блоки выбираются по классу (когда нужно свойство установить скопом для всех) или по id - когда нужно включить/выключить конкретный блок.

Андрей Параничев 11.03.2009 02:40

Цитата:

Сообщение от mixeeff
Можно ли сделать так чтобы какой-то скрипт запускался при выводе на печать и устанавливал соответствующее свойство.

Нет, это нужно делать через CSS. Скрипт, который срабатывает по onload, не должен срабатывать, когда страницу печатают, или я что-то не понял?

mixeeff 11.03.2009 10:50

Цитата:

Сообщение от Андрей Параничев (Сообщение 13996)
Нет, это нужно делать через CSS. Скрипт, который срабатывает по onload, не должен срабатывать, когда страницу печатают, или я что-то не понял?

Через CSS понятно как сделать. В таблице стилей для печати у спрятанных блоков стоит display:block, но получается что скрипт, запускающийся по onload срабатывает и при печати тоже.

Kolyaj 11.03.2009 11:30

Он не срабатывает при печати, он срабатывает при загрузке страницы. Печатается то, что в данный момент на странице, а блоки в момент печати принудительно скрыты. Втыкайте в то, что я написал выше.

mixeeff 11.03.2009 11:41

Цитата:

Сообщение от Kolyaj (Сообщение 14013)
Он не срабатывает при печати, он срабатывает при загрузке страницы. Печатается то, что в данный момент на странице, а блоки в момент печати принудительно скрыты. Втыкайте в то, что я написал выше.

Спасибо, в то что вы написали выше я воткнул. В итоге получается так что те блоки которые пользователь раскрыл печатаются, а те что нет - нет, что в общем то наверно правильно. Пользователь откроет интересующие его блоеки и напечатает, а заставлять его печатать все неправильно.
Так что, как говорится, всем спасибо!


Часовой пояс GMT +3, время: 14:54.