{"id":271,"date":"2026-10-13T06:21:15","date_gmt":"2026-10-13T06:21:15","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2010\/07\/14\/website-typography\/"},"modified":"2026-10-13T06:21:15","modified_gmt":"2026-10-13T06:21:15","slug":"website-typography","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/website-typography\/","title":{"rendered":"WordPress Typography Patterns: Styled Lists, Notice Boxes, and Code Blocks with Reusable CSS"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">If you manage documentation or blog content in WordPress, consistent typography for lists, notice boxes, and code snippets makes pages easier to scan, maintain, and standardize across teams. This revision turns the original class-based examples into clear, reusable patterns with modern CSS and editor-friendly HTML.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Originally published on 2010-07-14; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Original reference: <a href=\"https:\/\/www.devopsschool.com\/blog\/website-typography\/\">Website Typography<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2010\/07\/website-typography.png\" alt=\"website-typography\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">What the original post demonstrates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original article is a short style demo showing custom list marker classes (<code>.arrow1<\/code>, <code>.arrow2<\/code>, <code>.circle<\/code>), notice box classes (<code>.alert<\/code>, <code>.info<\/code>, <code>.download<\/code>), and a CSS code snippet. The core idea is still useful: define a small set of reusable typography classes so authors can keep content visually consistent.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implement custom list marker styles with maintainable CSS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of deeply nested lists and theme-specific hacks, use semantic lists with explicit classes. This keeps markup cleaner and simplifies future design changes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">CSS for arrow and circle variants<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-css\"><span class=\"hljs-selector-class\">.list-arrow-1<\/span>,\n<span class=\"hljs-selector-class\">.list-arrow-2<\/span>,\n<span class=\"hljs-selector-class\">.list-circle<\/span> {\n  <span class=\"hljs-attribute\">margin<\/span>: <span class=\"hljs-number\">0<\/span>;\n  <span class=\"hljs-attribute\">padding-left<\/span>: <span class=\"hljs-number\">0<\/span>;\n  <span class=\"hljs-attribute\">list-style<\/span>: none;\n}\n\n<span class=\"hljs-selector-class\">.list-arrow-1<\/span> <span class=\"hljs-selector-tag\">li<\/span>,\n<span class=\"hljs-selector-class\">.list-arrow-2<\/span> <span class=\"hljs-selector-tag\">li<\/span>,\n<span class=\"hljs-selector-class\">.list-circle<\/span> <span class=\"hljs-selector-tag\">li<\/span> {\n  <span class=\"hljs-attribute\">position<\/span>: relative;\n  <span class=\"hljs-attribute\">padding-left<\/span>: <span class=\"hljs-number\">1.4rem<\/span>;\n  <span class=\"hljs-attribute\">margin<\/span>: <span class=\"hljs-number\">0.35rem<\/span> <span class=\"hljs-number\">0<\/span>;\n}\n\n<span class=\"hljs-selector-class\">.list-arrow-1<\/span> <span class=\"hljs-selector-tag\">li<\/span><span class=\"hljs-selector-pseudo\">::before<\/span> {\n  <span class=\"hljs-attribute\">content<\/span>: <span class=\"hljs-string\">'\u279c'<\/span>;\n  <span class=\"hljs-attribute\">position<\/span>: absolute;\n  <span class=\"hljs-attribute\">left<\/span>: <span class=\"hljs-number\">0<\/span>;\n}\n\n<span class=\"hljs-selector-class\">.list-arrow-2<\/span> <span class=\"hljs-selector-tag\">li<\/span><span class=\"hljs-selector-pseudo\">::before<\/span> {\n  <span class=\"hljs-attribute\">content<\/span>: <span class=\"hljs-string\">'\u27a4'<\/span>;\n  <span class=\"hljs-attribute\">position<\/span>: absolute;\n  <span class=\"hljs-attribute\">left<\/span>: <span class=\"hljs-number\">0<\/span>;\n}\n\n<span class=\"hljs-selector-class\">.list-circle<\/span> <span class=\"hljs-selector-tag\">li<\/span><span class=\"hljs-selector-pseudo\">::before<\/span> {\n  <span class=\"hljs-attribute\">content<\/span>: <span class=\"hljs-string\">'\u25cf'<\/span>;\n  <span class=\"hljs-attribute\">position<\/span>: absolute;\n  <span class=\"hljs-attribute\">left<\/span>: <span class=\"hljs-number\">0<\/span>;\n  <span class=\"hljs-attribute\">font-size<\/span>: <span class=\"hljs-number\">0.75rem<\/span>;\n  <span class=\"hljs-attribute\">top<\/span>: <span class=\"hljs-number\">0.32rem<\/span>;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Example HTML markup<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-html\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">ul<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">'list-arrow-1'<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">li<\/span>&gt;<\/span>First item with arrow marker<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">li<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">li<\/span>&gt;<\/span>Second item with arrow marker<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">li<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">ul<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">ul<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">'list-arrow-2'<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">li<\/span>&gt;<\/span>Alternative arrow style<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">li<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">ul<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">ul<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">'list-circle'<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">li<\/span>&gt;<\/span>Circular marker style<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">li<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">ul<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Create reusable notice boxes for alert, info, and download messages<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original post uses inline <code>&lt;span&gt;<\/code> classes. For better spacing and readability, block-level notice components are usually easier to manage.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-css\"><span class=\"hljs-selector-class\">.notice<\/span> {\n  <span class=\"hljs-attribute\">border-left<\/span>: <span class=\"hljs-number\">4px<\/span> solid <span class=\"hljs-number\">#6b7280<\/span>;\n  <span class=\"hljs-attribute\">padding<\/span>: <span class=\"hljs-number\">0.75rem<\/span> <span class=\"hljs-number\">1rem<\/span>;\n  <span class=\"hljs-attribute\">margin<\/span>: <span class=\"hljs-number\">1rem<\/span> <span class=\"hljs-number\">0<\/span>;\n  <span class=\"hljs-attribute\">border-radius<\/span>: <span class=\"hljs-number\">4px<\/span>;\n  <span class=\"hljs-attribute\">background<\/span>: <span class=\"hljs-number\">#f9fafb<\/span>;\n}\n\n<span class=\"hljs-selector-class\">.notice<\/span><span class=\"hljs-selector-class\">.alert<\/span> {\n  <span class=\"hljs-attribute\">border-left-color<\/span>: <span class=\"hljs-number\">#dc2626<\/span>;\n  <span class=\"hljs-attribute\">background<\/span>: <span class=\"hljs-number\">#fef2f2<\/span>;\n}\n\n<span class=\"hljs-selector-class\">.notice<\/span><span class=\"hljs-selector-class\">.info<\/span> {\n  <span class=\"hljs-attribute\">border-left-color<\/span>: <span class=\"hljs-number\">#2563eb<\/span>;\n  <span class=\"hljs-attribute\">background<\/span>: <span class=\"hljs-number\">#eff6ff<\/span>;\n}\n\n<span class=\"hljs-selector-class\">.notice<\/span><span class=\"hljs-selector-class\">.download<\/span> {\n  <span class=\"hljs-attribute\">border-left-color<\/span>: <span class=\"hljs-number\">#059669<\/span>;\n  <span class=\"hljs-attribute\">background<\/span>: <span class=\"hljs-number\">#ecfdf5<\/span>;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-html\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">'notice alert'<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">strong<\/span>&gt;<\/span>Alert:<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">strong<\/span>&gt;<\/span> This action affects production settings.\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">'notice info'<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">strong<\/span>&gt;<\/span>Info:<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">strong<\/span>&gt;<\/span> This section explains optional configuration.\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">'notice download'<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">strong<\/span>&gt;<\/span>Download:<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">strong<\/span>&gt;<\/span> Get the latest build artifact from the release page.\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Workflow for rolling out typography classes in WordPress<\/h2>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Define content components] --> B[Create shared CSS classes]\n    B --> C[Apply classes in WordPress editor]\n    C --> D[Preview on desktop and mobile]\n    D --> E{Readable and accessible}\n    E -- no --> B\n    E -- yes --> F[Publish and reuse pattern]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Legacy class approach vs modern reusable pattern<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Approach<\/th><th>Markup style<\/th><th>Pros<\/th><th>Trade-offs<\/th><\/tr><\/thead><tbody><tr><td>Legacy theme classes (for example .arrow1, .alert)<\/td><td>Theme-specific class names in content<\/td><td>Quick to apply in one theme<\/td><td>Harder to migrate or standardize<\/td><\/tr><tr><td>Reusable semantic classes (for example .list-arrow-1, .notice.info)<\/td><td>Simple lists and block containers<\/td><td>Cleaner structure and easier maintenance<\/td><td>Requires shared CSS conventions<\/td><\/tr><tr><td>Default browser markers and minimal styling<\/td><td>No custom classes<\/td><td>Fast and robust baseline<\/td><td>Limited visual differentiation<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Legacy CSS snippet from the original post<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original article included the following CSS example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-css\"><span class=\"hljs-selector-id\">#subheader<\/span> <span class=\"hljs-selector-tag\">h1<\/span> {\n  <span class=\"hljs-attribute\">float<\/span>: left;\n  <span class=\"hljs-attribute\">margin-top<\/span>: <span class=\"hljs-number\">28px<\/span>;\n  <span class=\"hljs-attribute\">background<\/span>: <span class=\"hljs-built_in\">url<\/span>(..\/images\/logo.gif) no-repeat;\n  <span class=\"hljs-attribute\">width<\/span>: <span class=\"hljs-number\">335px<\/span>;\n  <span class=\"hljs-attribute\">height<\/span>: <span class=\"hljs-number\">58px<\/span>;\n  <span class=\"hljs-attribute\">text-indent<\/span>: -<span class=\"hljs-number\">9999px<\/span>;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Best practices<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Keep content markup semantic, and use classes only for intentional variants.<\/li><li>Centralize typography classes in one stylesheet so editors do not rely on inline formatting.<\/li><li>Prefer reusable notice components over one-off colored paragraphs.<\/li><li>Test list markers and notice contrast for readability on mobile and dark\/light themes.<\/li><li>Document approved classes in your editorial or engineering style guide.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This guide modernizes a legacy WordPress typography post into practical, reusable patterns for custom list markers, callout boxes, and code styling. It focuses on maintainable CSS and editor-friendly markup you can reuse across posts and documentation pages.<\/p>\n","protected":false},"author":1,"featured_media":4453,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[4333,1003,4335,4329,1122,4334,4331,4332,213,4326,4328,894,4327,4330],"class_list":["post-271","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorised","tag-alert-box","tag-code","tag-download-box","tag-examples-of-typography","tag-guide","tag-info-box","tag-list-with-arrows","tag-list-with-circle","tag-tutorial","tag-typography","tag-web-typography","tag-website","tag-website-typography","tag-website-typography-reference"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=271"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/271\/revisions"}],"predecessor-version":[{"id":79099,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/271\/revisions\/79099"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/4453"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}