J'ai commencé à créer mon CV en utilisant une page HTML à l'ancienne et j'ai rapidement réalisé qu'elle ne fonctionnait pas immédiatement lorsqu'elle était ouverte sur un écran. Le contenu coule à l’infini, sans aucun saut de page, et il ne ressemble certainement pas à un document A4. Pour résoudre ce problème, j'ai dû appliquer quelques astuces, notamment du CSS et un peu de JavaScript.
Mes objectifs étaient :
Lorsque j'ai commencé à rédiger mon CV, j'ai vite réalisé que les navigateurs sur les appareils à écran ne respectaient pas les dimensions des pages comme le A4. Au lieu de cela, ils diffusent simplement le contenu en continu, ce qui signifie que le texte et les sections peuvent déborder sans aucun saut de page. Pour créer des pages distinctes basées sur les dimensions A4, je devais gérer manuellement les sauts de page chaque fois que le contenu dépassait la hauteur d'une page A4 typique.
La solution principale impliquait l'utilisation des propriétés d'impression et de saut de page CSS @media pour contrôler le comportement du contenu lorsqu'il est trop long pour une page et pour appliquer JavaScript pour gérer le contenu dynamique sur les écrans.
Pour garantir que le contenu circule correctement une fois imprimé, j'ai utilisé la propriété page-break-inside : eviter. Cette propriété empêche de diviser les éléments importants tels que les titres ou les gros paragraphes entre deux pages, permettant ainsi au navigateur de diviser automatiquement le contenu en pages selon les besoins.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>A4 Styled Document</title> <link rel="stylesheet" href="styles.css"> </head> <body> <div class="page"> <h1>Title of Page 1</h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit...</p> </div> <div class="page"> <h1>Title of Page 2</h1> <p>Content will automatically break into new pages for printing...</p> </div> </body> </html>
/* Define page layout for A4 size */ @media print { body { margin: 0; padding: 0; } .page { width: 210mm; height: 297mm; margin: 0; padding: 20mm; page-break-after: always; /* Automatically breaks after each page */ box-shadow: none; overflow: visible; /* Ensures content flows properly when printing */ } /* Prevent page breaks inside headers or large paragraphs */ h1, h2, h3, p { page-break-inside: avoid; } }
Bien que CSS puisse gérer les sauts de page pour l'impression, les périphériques d'écran ne fonctionnent pas de la même manière. Les navigateurs ne divisent pas automatiquement le contenu en pages distinctes à l'écran. J'avais donc besoin de JavaScript pour détecter lorsque le contenu dépasse la taille de la page A4 et le diviser dynamiquement en nouvelles pages.
Voici comment j'ai réussi :
window.onload = function () { const pages = document.querySelectorAll('.page'); pages.forEach(page => { if (page.scrollHeight > page.clientHeight) { splitPageContent(page); } }); }; function splitPageContent(page) { const newPage = document.createElement('div'); newPage.classList.add('page'); const contentToMove = page.innerHTML.slice(page.clientHeight / 2); newPage.innerHTML = contentToMove; page.innerHTML = page.innerHTML.slice(0, page.clientHeight / 2); // Insert the new page into the DOM after the current page page.parentNode.insertBefore(newPage, page.nextSibling); }
À l'écran, contrairement à l'impression, le texte ne passe pas automatiquement d'un div .page à l'autre lorsqu'il déborde. Le navigateur laisse simplement le contenu déborder au-delà des limites de la page. Avec le code JavaScript ci-dessus, je détecte les débordements de contenu et je le divise en une nouvelle page, simulant ainsi l'expérience multipage que vous attendez dans un PDF ou Google Docs.
Avec cette approche, le contenu se comporte de manière cohérente sur tous les appareils :
À l'écran : JavaScript détecte le débordement de contenu et crée des div .page supplémentaires si nécessaire. Cela simule l'expérience de visualisation d'un document A4, où vous pouvez faire défiler des pages soigneusement divisées.
En impression : les propriétés d'impression et de saut de page CSS @media gèrent les sauts de page automatiques pour l'impression, de sorte que votre document aura l'air tout aussi soigné sur papier.
Créer un document HTML qui imite l'apparence des pages A4 sur les appareils à écran nécessite une combinaison de CSS et de JavaScript. Si CSS seul peut gérer efficacement l’aspect impression, JavaScript est essentiel pour gérer les sauts de page à l’écran. En combinant les deux, vous pouvez garantir une expérience fluide, avec un texte fluide sur les pages, à la fois à l'écran et sur papier.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!