Имитация многостраничного документа в CSS3 - PullRequest
5 голосов
/ 16 февраля 2012

Я бы очень хотел создать веб-страницу, которая бы имела такой же внешний вид, как, например, Microsoft Word или Acrobat Reader, когда уровень масштабирования небольшой, и он показывает параллельные страницы с границами страниц.

Что я не знаю, что делать, так это определить ограничитель бумаги фиксированного размера и выбросить содержимое внутри него (которое будет переменным числом элементов блока html) и заставить эти элементы «перетекать» с одной страницы на другой, создавая столько страниц, сколько необходимо, с соответствующими разрывами страниц. Это предназначено для имитации печатной продукции, для быстрого создания прототипа для изучения дизайна.

Что-то в моей голове говорит, что javascript будет необходим, но так как мои знания javascript близки к нулю, и я не хочу изучать приемы компоновки CSS3, предпочтительным будет чистый CSS (хотя решение JS было бы хорошей альтернативой) .

Текущий одностраничный документ выглядит следующим образом:

<!DOCTYPE html>
<html lang="pt-br" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8" />
        <title>Relatório Html</title>
        <style type="text/css">
            html, body {
                margin:0;
                padding:0;
            }

            body {
                background-color: #aaa;
            }

            .paperpage {
                position: absolute;
                width: 600px;
                padding: 50px 30px 40px 30px;
                margin-left: -320px;
                left: 50%;
                top:10px;
                bottom:10px;
                background-color: white;
                box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
            }

            #innerpage {
                position: relative;
                margin: 0 auto;
                height: auto !important;
                min-height: 100%;
            }
        </style>
    </head>

    <body>
    <div class="paperpage">
        <div id="innerpage">
            <p>Some Content</p>
        </div>
    </div>
    </body>
</html>

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Это нелегко сделать в CSS3 или даже в Javascript.Google Docs, который делает это, имеет свой собственный движок для расчета страниц.Тем не менее, есть очень ранний проект, опубликованный CSS3 Regions Module , который сделает это намного проще.

Общая теория здесь состоит в том, чтобы измерять размер текста каждый раз, когда онобновляется и пересчитывает необходимые страницы, заполняя содержимое соответствующим образом.Как вы можете себе представить, это не самая легкая вещь в мире.Есть много разных способов измерения контента и тому подобных вещей, и если вы действительно преданы своему делу и погрузитесь в него, я бы порекомендовал проверить многие из здесь вопросов, связанных с измерением размеров текста и элементов в javascript.

0 голосов
/ 08 июня 2013

Лучший способ, которым мы разработали такой вид отображения, - это отображение в формате PDF и отображение его с помощью PDFObject или, что еще лучше, непосредственно в элементе <object>. Поскольку браузер будет напрямую использовать Adobe или встроенный метод отображения, он будет идентичен тому, что вы ищете, без каких-либо усилий по его разработке.

Например:

<object
  data="/clients/<%= client.id %>/reports/print?preview=true" 
  type="application/pdf" width="100%" height="98%">
  <p>Your browser does not support embedded PDFs.</p>
</object>

Мы используем wkhtmltopdf для всех наших преобразований HTML в PDF. Его относительно просто использовать, и мы с большим успехом использовали его в чрезвычайно сложных документах HTML со всеми видами CSS-технологий.

По моему опыту, это сэкономит вам гораздо больше времени на его отображение по сравнению с кодированием определенного метода отображения CSS, если у вас нет необходимости фактически редактировать документ в этом представлении.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...