Most websites print poorly because nobody bothers writing a @media print stylesheet. Pick the elements to hide, choose your paper size and margins, and decide whether links should expand into footnoted URLs — this tool generates the CSS, then renders a sandboxed preview using your live rules.
The modern way to handle page breaks is break-before / break-after / break-inside; the legacy page-break-* properties are still emitted for older browsers. The @page at-rule controls the printable canvas itself — size, margins, marks. Note that some printer drivers ignore @page margins in favor of the user's print dialog setting. To force the browser to print background colors and images, use print-color-adjust: exact (Chromium also supports the legacy -webkit-print-color-adjust). When in doubt, test in a real preview — printer rendering varies more than screen.