💇♀️ Styling Text
Text doesn’t have to stay boring and black. With just a few lines of CSS, you can make your text look fun, professional, or anything in between!
Let’s look at the 3 basics for styling text: color, font, and size.
Master Code Block (This will be used for further examples)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Lists Example</title>
</head>
<body>
<!--All content to be added here-->
</body>
</html>🎨 1. Text Color – Color Property
Use the color property to change the text color.
Example:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Paragraph Color Anatomy</title>
<style>
.infographic-pcolor {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #ffffff;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
box-sizing: border-box;
margin: 0 auto;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background: var(--paper);
color: var(--ink);
border-radius: 14px;
overflow: hidden;
}
.infographic-pcolor[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
}
.ha-layout { display: flex; flex-direction: column; gap: 1.5rem; }
.ha-code-wrap {
background: #0b0b0b;
border: 1px solid #2a2a2a;
border-radius: 10px;
overflow: hidden;
}
.ha-filetabs {
display: flex;
background: #161616;
border-bottom: 1px solid #2a2a2a;
}
.ha-filetab {
border: none;
background: transparent;
color: #8a8a8a;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.78rem;
font-weight: 700;
padding: 0.6rem 1rem;
cursor: pointer;
border-bottom: 2px solid transparent;
transition: color 0.15s ease, border-color 0.15s ease, background 0.15s ease;
}
.ha-filetab:hover { color: #e5e5e5; }
.ha-filetab.ha-tab-on {
color: #ffffff;
border-bottom-color: #5b8def;
background: #0b0b0b;
}
.ha-code {
padding: 1rem 1.8rem 1rem 0.9rem;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.8rem;
line-height: 1.85;
overflow-x: auto;
}
.ha-codepane { display: none; }
.ha-codepane.ha-pane-on { display: block; }
.ha-line {
display: block;
white-space: pre;
color: #8a8a8a;
border-radius: 5px;
padding: 0.05rem 0.4rem;
}
.ha-line.ha-clickable {
cursor: pointer;
color: #e5e5e5;
transition: background 0.15s ease, box-shadow 0.15s ease;
}
.ha-line.ha-clickable:hover { background: #1c2333; }
.ha-line.ha-active {
background: #1c2333;
box-shadow: inset 3px 0 0 #5b8def;
color: #ffffff;
}
.ha-tag { color: #60a5fa; font-weight: 700; }
.ha-sel { color: #f9a8d4; font-weight: 700; }
.ha-prop { color: #c586c0; }
.ha-val { color: #ce9178; }
.ha-browser {
border: 1px solid var(--line);
border-radius: 10px;
overflow: hidden;
background: var(--paper);
}
.ha-browser-bar {
background: var(--paper-alt);
padding: 0.5rem 0.7rem;
display: flex;
align-items: center;
gap: 0.5rem;
border-bottom: 1px solid var(--line);
}
.ha-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--line); }
.ha-tab {
background: var(--paper);
border: 1px solid var(--line);
border-bottom: none;
border-radius: 6px 6px 0 0;
font-size: 0.72rem;
color: var(--ink-soft);
padding: 0.25rem 0.6rem;
}
.ha-urlrow {
background: var(--paper-alt);
padding: 0.35rem 0.7rem 0.6rem;
font-size: 0.72rem;
color: var(--ink-soft);
font-family: "SFMono-Regular", Consolas, monospace;
}
.ha-screen {
background: #ffffff;
color: #111;
padding: 1.2rem 1.4rem 1.4rem;
font-family: Georgia, "Times New Roman", serif;
}
.ha-out-h1 {
font-size: 1.3rem;
font-weight: 700;
margin: 0 0 0.7rem;
}
.ha-out-p {
color: blue;
font-size: 0.9rem;
margin: 0 0 0.6rem;
padding: 0.1rem 0.35rem;
margin-left: -0.35rem;
border-radius: 6px;
transition: background 0.2s ease, outline 0.2s ease;
}
.ha-out-p:last-child { margin-bottom: 0; }
.ha-out-lit {
background: var(--accent-soft);
outline: 2px solid var(--accent);
}
</style>
</head>
<body>
<div class="infographic-pcolor" id="ha-root">
<div class="ha-inner">
<div class="ha-layout">
<div class="ha-code-wrap">
<div class="ha-filetabs">
<button class="ha-filetab ha-tab-on" id="tab-html">index.html</button>
<button class="ha-filetab" id="tab-css">style.css</button>
</div>
<div class="ha-code">
<div class="ha-codepane ha-pane-on" id="pane-html">
<span class="ha-line"><<span class="ha-tag">body</span>></span>
<span class="ha-line"> <<span class="ha-tag">h1</span>>Paragraph Color Example</<span class="ha-tag">h1</span>></span>
<span class="ha-line ha-clickable" data-part="p1"> <<span class="ha-tag">p</span>>This is the first paragraph. It should appear in blue.</<span class="ha-tag">p</span>></span>
<span class="ha-line ha-clickable" data-part="p2"> <<span class="ha-tag">p</span>>This is the second paragraph. It's also styled with the same rule.</<span class="ha-tag">p</span>></span>
<span class="ha-line ha-clickable" data-part="p3"> <<span class="ha-tag">p</span>>All paragraph tags use the CSS selector p { color: blue; }.</<span class="ha-tag">p</span>></span>
<span class="ha-line"></<span class="ha-tag">body</span>></span>
</div>
<div class="ha-codepane" id="pane-css">
<span class="ha-line ha-clickable" data-part="all"><span class="ha-sel">p</span> {</span>
<span class="ha-line ha-clickable" data-part="all"> <span class="ha-prop">color</span>: <span class="ha-val">blue</span>;</span>
<span class="ha-line ha-clickable" data-part="all">}</span>
</div>
</div>
</div>
<div class="ha-browser">
<div class="ha-browser-bar">
<span class="ha-dot"></span><span class="ha-dot"></span><span class="ha-dot"></span>
<div class="ha-tab">🌐 Page Title</div>
</div>
<div class="ha-urlrow">127.0.0.1:5500/basicstructure.html</div>
<div class="ha-screen">
<h1 class="ha-out-h1">Paragraph Color Example</h1>
<p class="ha-out-p" id="out-p1">This is the first paragraph. It should appear in blue.</p>
<p class="ha-out-p" id="out-p2">This is the second paragraph. It's also styled with the same rule.</p>
<p class="ha-out-p" id="out-p3">All paragraph tags use the CSS selector p { color: blue; }.</p>
</div>
</div>
</div>
</div>
</div>
<script>
(function () {
const wrapper = document.getElementById('ha-root');
const bodyAttr = document.body.getAttribute('data-darkmode');
let dark;
if (bodyAttr === 'true') {
dark = true;
} else if (bodyAttr === 'false') {
dark = false;
} else {
const match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) wrapper.setAttribute('data-theme', 'dark');
})();
(function () {
const tabHtml = document.getElementById('tab-html');
const tabCss = document.getElementById('tab-css');
const paneHtml = document.getElementById('pane-html');
const paneCss = document.getElementById('pane-css');
tabHtml.addEventListener('click', () => {
tabHtml.classList.add('ha-tab-on');
tabCss.classList.remove('ha-tab-on');
paneHtml.classList.add('ha-pane-on');
paneCss.classList.remove('ha-pane-on');
});
tabCss.addEventListener('click', () => {
tabCss.classList.add('ha-tab-on');
tabHtml.classList.remove('ha-tab-on');
paneCss.classList.add('ha-pane-on');
paneHtml.classList.remove('ha-pane-on');
});
const outMap = { p1: ['out-p1'], p2: ['out-p2'], p3: ['out-p3'], all: ['out-p1','out-p2','out-p3'] };
document.querySelectorAll('.ha-line.ha-clickable').forEach(line => {
line.addEventListener('click', () => {
document.querySelectorAll('.ha-line').forEach(l => l.classList.remove('ha-active'));
line.classList.add('ha-active');
document.querySelectorAll('.ha-out-p').forEach(p => p.classList.remove('ha-out-lit'));
const part = line.getAttribute('data-part');
outMap[part].forEach(id => document.getElementById(id).classList.add('ha-out-lit'));
});
});
})();
</script>
</body>
</html>.demo {
font-family: system-ui, sans-serif;
padding: 16px;
}
.demo h1 {
color: #2563eb;
margin: 0 0 8px;
}
.demo p {
color: #4b5563;
margin: 0;
}document.querySelector('.demo h1')?.addEventListener('click', () => {
alert('Hello from live preview!');
});You can use: Color names, HEX codes, RGB/RGBA
🚀 Try and Play Around
<div class="infographic-csscolor">
<style>
.infographic-csscolor {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #faf8f4;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
--code-bg: #1a1a1a;
--code-text: #f0ece4;
--display-font: 'Newsreader', serif;
--body-font: 'Inter', sans-serif;
--mono-font: 'IBM Plex Mono', monospace;
color: var(--ink);
font-family: var(--body-font);
max-width: 880px;
margin: 0 auto;
line-height: 1.5;
box-sizing: border-box;
background: transparent;
}
.infographic-csscolor[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
--code-bg: #1a1a22;
--code-text: #e8e3d8;
}
.infographic-csscolor *, .infographic-csscolor *::before, .infographic-csscolor *::after {
box-sizing: border-box;
}
.infographic-csscolor h1 {
font-family: var(--display-font);
font-size: clamp(1.6rem, 5vw, 2.2rem);
margin: 0 0 0.3rem;
font-weight: 600;
color: var(--ink);
}
.infographic-csscolor .eyebrow {
font-size: 0.78rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--accent);
font-weight: 600;
margin-bottom: 0.4rem;
}
.infographic-csscolor .subhead {
color: var(--ink-soft);
font-size: 0.95rem;
margin: 0 0 1.75rem;
max-width: 60ch;
}
.infographic-csscolor code {
font-family: var(--mono-font);
font-size: 0.85em;
}
/* Shared sample text, color driven by --live-color */
.cc-stage {
border: 1px solid var(--line);
background: var(--paper-alt);
padding: 2rem 1.5rem;
text-align: center;
margin-bottom: 1.75rem;
transition: background 0.2s ease, border-color 0.2s ease;
}
.cc-stage p {
margin: 0;
font-family: var(--display-font);
font-size: clamp(1.5rem, 5vw, 2rem);
color: var(--live-color, var(--accent));
transition: color 0.15s;
}
.cc-code {
font-family: var(--mono-font);
font-size: 0.9rem;
background: var(--code-bg);
color: var(--code-text);
padding: 0.9rem 1.1rem;
margin-bottom: 1.75rem;
transition: background 0.2s ease, color 0.2s ease;
}
.cc-code .tok-prop { color: #7ec4ff; }
.cc-code .tok-val { color: #ffd479; }
/* Comparison columns, one per format */
.cc-compare {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1px;
background: var(--line);
border: 1px solid var(--line);
}
@media (max-width: 640px) {
.cc-compare { grid-template-columns: 1fr; }
}
.cc-col {
background: var(--paper);
padding: 1.25rem;
border-top: 3px solid transparent;
transition: background 0.15s, border-color 0.15s;
}
.cc-col.is-active {
background: var(--accent-soft);
border-top-color: var(--accent);
}
.cc-col h3 {
font-family: var(--display-font);
font-size: 1rem;
margin: 0 0 0.5rem;
color: var(--ink);
}
.cc-col .cc-input-row { display: flex; gap: 0.4rem; margin-top: 0.75rem; }
.cc-col select,
.cc-col input[type="text"] {
width: 100%;
font: inherit;
font-size: 0.82rem;
padding: 0.35rem 0.5rem;
border: 1px solid var(--line);
background: var(--paper);
color: var(--ink);
}
.cc-col input[type="range"] {
width: 100%;
accent-color: var(--accent);
margin: 0.15rem 0 0.5rem;
}
.cc-hex-row {
align-items: center;
}
.cc-hex-row input[type="color"] {
width: 38px;
height: 34px;
padding: 0;
border: 1px solid var(--line);
background: var(--paper);
cursor: pointer;
flex: 0 0 auto;
}
.cc-hex-row input[type="text"] {
flex: 1;
}
.cc-rgb-row label {
display: flex;
justify-content: space-between;
font-size: 0.78rem;
color: var(--ink-soft);
margin-top: 0.5rem;
}
.cc-note {
font-size: 0.8rem;
color: var(--ink-soft);
margin: 0.6rem 0 0;
}
.cc-alpha-label {
font-family: var(--mono-font);
font-size: 0.75rem;
color: var(--accent);
}
@media (prefers-reduced-motion: reduce) {
.infographic-csscolor *, .infographic-csscolor *::before, .infographic-csscolor *::after {
animation-duration: 0.001ms !important;
transition-duration: 0.001ms !important;
}
}
</style>
<div class="cc-stage">
<p id="cc-sample">Hello World</p>
</div>
<div class="cc-code">
<span class="tok-prop">color</span>: <span class="tok-val" id="cc-rule-val">#ff6347</span>;
</div>
<div class="cc-compare">
<div class="cc-col is-active" data-mode="name">
<h3>Name</h3>
<p class="cc-note">Plain English keyword</p>
<div class="cc-input-row">
<select id="cc-name-input">
<option value="tomato" selected>tomato</option>
<option value="red">red</option>
<option value="orange">orange</option>
<option value="gold">gold</option>
<option value="green">green</option>
<option value="teal">teal</option>
<option value="blue">blue</option>
<option value="purple">purple</option>
<option value="hotpink">hotpink</option>
<option value="slategray">slategray</option>
<option value="black">black</option>
</select>
</div>
</div>
<div class="cc-col" data-mode="hex">
<h3>Hex</h3>
<p class="cc-note">6-digit code, <code>#</code> + RGB in base-16</p>
<div class="cc-input-row cc-hex-row">
<input type="color" id="cc-hex-picker" value="#ff6347">
<input type="text" id="cc-hex-input" value="#ff6347" maxlength="7">
</div>
</div>
<div class="cc-col" data-mode="rgba">
<h3>RGB / RGBA</h3>
<p class="cc-note">Red, green, blue + optional alpha</p>
<div class="cc-rgb-row">
<label>R <span class="cc-alpha-label" id="cc-r-val">255</span></label>
<input type="range" id="cc-r-input" min="0" max="255" value="255">
<label>G <span class="cc-alpha-label" id="cc-g-val">99</span></label>
<input type="range" id="cc-g-input" min="0" max="255" value="99">
<label>B <span class="cc-alpha-label" id="cc-b-val">71</span></label>
<input type="range" id="cc-b-input" min="0" max="255" value="71">
<label>Alpha <span class="cc-alpha-label" id="cc-alpha-val">100%</span></label>
<input type="range" id="cc-alpha-input" min="0" max="100" value="100">
</div>
</div>
</div>
</div>
<script>
(function () {
var wrapper = document.currentScript.closest('.infographic-csscolor')
|| document.querySelector('.infographic-csscolor');
var bodyAttr = document.body.getAttribute('data-darkmode');
var dark;
if (bodyAttr === 'true') {
dark = true;
} else if (bodyAttr === 'false') {
dark = false;
} else {
var match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) wrapper.setAttribute('data-theme', 'dark');
})();
(function() {
var scripts = document.getElementsByTagName('script');
var thisScript = scripts[scripts.length - 1];
var root = thisScript.closest ? thisScript.closest('.infographic-csscolor')
: document.querySelector('.infographic-csscolor');
if (!root) root = document.querySelector('.infographic-csscolor');
var cols = root.querySelectorAll('.cc-col');
var sample = root.querySelector('#cc-sample');
var ruleVal = root.querySelector('#cc-rule-val');
var nameInput = root.querySelector('#cc-name-input');
var hexPicker = root.querySelector('#cc-hex-picker');
var hexInput = root.querySelector('#cc-hex-input');
var rInput = root.querySelector('#cc-r-input');
var gInput = root.querySelector('#cc-g-input');
var bInput = root.querySelector('#cc-b-input');
var alphaInput = root.querySelector('#cc-alpha-input');
var rVal = root.querySelector('#cc-r-val');
var gVal = root.querySelector('#cc-g-val');
var bVal = root.querySelector('#cc-b-val');
var alphaVal = root.querySelector('#cc-alpha-val');
function setActive(mode) {
cols.forEach(function(c) {
c.classList.toggle('is-active', c.dataset.mode === mode);
});
}
function applyName() {
var val = nameInput.value;
sample.style.color = val;
ruleVal.textContent = val;
setActive('name');
}
function applyHex() {
var val = hexInput.value;
if (!/^#[0-9a-fA-F]{6}$/.test(val)) return;
sample.style.color = val;
ruleVal.textContent = val;
hexPicker.value = val;
setActive('hex');
}
function applyHexFromPicker() {
hexInput.value = hexPicker.value;
applyHex();
}
function applyRgba() {
var r = Number(rInput.value);
var g = Number(gInput.value);
var b = Number(bInput.value);
var a = (Number(alphaInput.value) / 100).toFixed(2);
var css = a === '1.00'
? 'rgb(' + r + ', ' + g + ', ' + b + ')'
: 'rgba(' + r + ', ' + g + ', ' + b + ', ' + a + ')';
sample.style.color = css;
ruleVal.textContent = css;
rVal.textContent = r;
gVal.textContent = g;
bVal.textContent = b;
alphaVal.textContent = alphaInput.value + '%';
setActive('rgba');
}
nameInput.addEventListener('change', applyName);
hexInput.addEventListener('input', applyHex);
hexPicker.addEventListener('input', applyHexFromPicker);
[rInput, gInput, bInput, alphaInput].forEach(function(el) {
el.addEventListener('input', applyRgba);
});
// clicking a column (not its inputs) activates that mode using its current value
cols.forEach(function(col) {
col.addEventListener('click', function(e) {
var tag = e.target.tagName;
if (tag === 'SELECT' || tag === 'INPUT') return;
var mode = col.dataset.mode;
if (mode === 'name') applyName();
if (mode === 'hex') applyHex();
if (mode === 'rgba') applyRgba();
});
});
applyName();
})();
</script>
</div>.demo {
font-family: system-ui, sans-serif;
padding: 16px;
}
.demo h1 {
color: #2563eb;
margin: 0 0 8px;
}
.demo p {
color: #4b5563;
margin: 0;
}document.querySelector('.demo h1')?.addEventListener('click', () => {
alert('Hello from live preview!');
});🖋️ 2. Font Family – font-family Property
This lets you choose the style of the text, like Arial, Times New Roman, or something fancy like cursive.
Example:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Font Family Anatomy</title>
<style>
.infographic-fontfamily {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #ffffff;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
box-sizing: border-box;
margin: 0 auto;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background: var(--paper);
color: var(--ink);
border-radius: 14px;
overflow: hidden;
}
.infographic-fontfamily[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
}
.ha-layout { display: flex; flex-direction: column; gap: 1.5rem; }
.ha-code-wrap {
background: #0b0b0b;
border: 1px solid #2a2a2a;
border-radius: 10px;
overflow: hidden;
}
.ha-filetabs {
display: flex;
background: #161616;
border-bottom: 1px solid #2a2a2a;
}
.ha-filetab {
border: none;
background: transparent;
color: #8a8a8a;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.78rem;
font-weight: 700;
padding: 0.6rem 1rem;
cursor: pointer;
border-bottom: 2px solid transparent;
transition: color 0.15s ease, border-color 0.15s ease, background 0.15s ease;
}
.ha-filetab:hover { color: #e5e5e5; }
.ha-filetab.ha-tab-on {
color: #ffffff;
border-bottom-color: #5b8def;
background: #0b0b0b;
}
.ha-code {
padding: 1rem 1.8rem 1rem 0.9rem;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.8rem;
line-height: 1.85;
overflow-x: auto;
}
.ha-codepane { display: none; }
.ha-codepane.ha-pane-on { display: block; }
.ha-line {
display: block;
white-space: pre;
color: #8a8a8a;
border-radius: 5px;
padding: 0.05rem 0.4rem;
}
.ha-line.ha-clickable {
cursor: pointer;
color: #e5e5e5;
transition: background 0.15s ease, box-shadow 0.15s ease;
}
.ha-line.ha-clickable:hover { background: #1c2333; }
.ha-line.ha-active {
background: #1c2333;
box-shadow: inset 3px 0 0 #5b8def;
color: #ffffff;
}
.ha-tag { color: #60a5fa; font-weight: 700; }
.ha-sel { color: #f9a8d4; font-weight: 700; }
.ha-prop { color: #c586c0; }
.ha-val { color: #ce9178; }
.ha-str { color: #9ece6a; }
.ha-browser {
border: 1px solid var(--line);
border-radius: 10px;
overflow: hidden;
background: var(--paper);
}
.ha-browser-bar {
background: var(--paper-alt);
padding: 0.5rem 0.7rem;
display: flex;
align-items: center;
gap: 0.5rem;
border-bottom: 1px solid var(--line);
}
.ha-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--line); }
.ha-tab {
background: var(--paper);
border: 1px solid var(--line);
border-bottom: none;
border-radius: 6px 6px 0 0;
font-size: 0.72rem;
color: var(--ink-soft);
padding: 0.25rem 0.6rem;
}
.ha-urlrow {
background: var(--paper-alt);
padding: 0.35rem 0.7rem 0.6rem;
font-size: 0.72rem;
color: var(--ink-soft);
font-family: "SFMono-Regular", Consolas, monospace;
}
.ha-screen {
background: #ffffff;
color: #111;
padding: 1.6rem 1.4rem;
min-height: 90px;
}
.ha-out-h1 {
font-family: Georgia, "Times New Roman", serif;
font-weight: 700;
font-size: 1.4rem;
margin: 0;
padding: 0.15rem 0.4rem;
margin-left: -0.4rem;
border-radius: 6px;
transition: font-family 0.3s ease, background 0.2s ease, outline 0.2s ease;
}
.ha-out-h1.ha-arial {
font-family: Arial, sans-serif;
}
.ha-out-lit {
background: var(--accent-soft);
outline: 2px solid var(--accent);
}
</style>
</head>
<body>
<div class="infographic-fontfamily" id="ha-root">
<div class="ha-inner">
<div class="ha-layout">
<div class="ha-code-wrap">
<div class="ha-filetabs">
<button class="ha-filetab ha-tab-on" id="tab-html">index.html</button>
<button class="ha-filetab" id="tab-css">style.css</button>
</div>
<div class="ha-code">
<div class="ha-codepane ha-pane-on" id="pane-html">
<span class="ha-line"><<span class="ha-tag">body</span>></span>
<span class="ha-line ha-clickable" data-part="h1"> <<span class="ha-tag">h1</span>>This heading uses Arial font.</<span class="ha-tag">h1</span>></span>
<span class="ha-line"></<span class="ha-tag">body</span>></span>
</div>
<div class="ha-codepane" id="pane-css">
<span class="ha-line ha-clickable" data-part="h1"><span class="ha-sel">h1</span> {</span>
<span class="ha-line ha-clickable" data-part="h1"> <span class="ha-prop">font-family</span>: <span class="ha-str">'Arial'</span>, <span class="ha-val">sans-serif</span>;</span>
<span class="ha-line ha-clickable" data-part="h1">}</span>
</div>
</div>
</div>
<div class="ha-browser">
<div class="ha-browser-bar">
<span class="ha-dot"></span><span class="ha-dot"></span><span class="ha-dot"></span>
<div class="ha-tab">🌐 Page Title</div>
</div>
<div class="ha-urlrow">127.0.0.1:5500/basicstructure.html</div>
<div class="ha-screen">
<h1 class="ha-out-h1" id="out-h1">This heading uses Arial font.</h1>
</div>
</div>
</div>
</div>
</div>
<script>
(function () {
const wrapper = document.getElementById('ha-root');
const bodyAttr = document.body.getAttribute('data-darkmode');
let dark;
if (bodyAttr === 'true') {
dark = true;
} else if (bodyAttr === 'false') {
dark = false;
} else {
const match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) wrapper.setAttribute('data-theme', 'dark');
})();
(function () {
const tabHtml = document.getElementById('tab-html');
const tabCss = document.getElementById('tab-css');
const paneHtml = document.getElementById('pane-html');
const paneCss = document.getElementById('pane-css');
tabHtml.addEventListener('click', () => {
tabHtml.classList.add('ha-tab-on');
tabCss.classList.remove('ha-tab-on');
paneHtml.classList.add('ha-pane-on');
paneCss.classList.remove('ha-pane-on');
});
tabCss.addEventListener('click', () => {
tabCss.classList.add('ha-tab-on');
tabHtml.classList.remove('ha-tab-on');
paneCss.classList.add('ha-pane-on');
paneHtml.classList.remove('ha-pane-on');
});
const outH1 = document.getElementById('out-h1');
document.querySelectorAll('.ha-line.ha-clickable').forEach(line => {
line.addEventListener('click', () => {
document.querySelectorAll('.ha-line').forEach(l => l.classList.remove('ha-active'));
line.classList.add('ha-active');
outH1.classList.add('ha-out-lit');
outH1.classList.add('ha-arial');
});
});
})();
</script>
</body>
</html>.demo {
font-family: system-ui, sans-serif;
padding: 16px;
}
.demo h1 {
color: #2563eb;
margin: 0 0 8px;
}
.demo p {
color: #4b5563;
margin: 0;
}document.querySelector('.demo h1')?.addEventListener('click', () => {
alert('Hello from live preview!');
});📝 Tip: Always add a backup font like sans-serif in case the main one isn’t available.
🚀 Try and Play Around
<div class="infographic-fontfamily">
<style>
.infographic-fontfamily {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #faf8f4;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
--code-bg: #1a1a1a;
--code-text: #f0ece4;
--display-font: 'Newsreader', serif;
--body-font: 'Inter', sans-serif;
--mono-font: 'IBM Plex Mono', monospace;
color: var(--ink);
font-family: var(--body-font);
max-width: 700px;
margin: 0 auto;
padding: clamp(1.25rem, 5vw, 2.5rem);
line-height: 1.5;
box-sizing: border-box;
background: transparent;
}
.infographic-fontfamily[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
--code-bg: #1a1a22;
--code-text: #e8e3d8;
}
.infographic-fontfamily *, .infographic-fontfamily *::before, .infographic-fontfamily *::after {
box-sizing: border-box;
}
.infographic-fontfamily h1 {
font-family: var(--display-font);
font-size: clamp(1.5rem, 5vw, 1.9rem);
margin: 0 0 1.25rem;
font-weight: 600;
color: var(--ink);
}
.infographic-fontfamily code { font-family: var(--mono-font); font-size: 0.85em; }
.ff-picker { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1.5rem; }
.ff-pill {
border: 1px solid var(--line);
background: var(--paper);
padding: 0.5rem 1rem;
font-size: 0.88rem;
cursor: pointer;
color: var(--ink);
transition: background 0.15s, border-color 0.15s, color 0.15s;
}
.ff-pill.is-active { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); font-weight: 600; }
.ff-stage {
border: 1px solid var(--line);
background: var(--paper-alt);
padding: 2.25rem 1.5rem;
text-align: center;
margin-bottom: 1.25rem;
transition: background 0.2s ease, border-color 0.2s ease;
}
.ff-stage p { margin: 0; font-size: clamp(1.6rem, 6vw, 2.2rem); color: var(--ink); }
.ff-code {
font-family: var(--mono-font);
font-size: 0.9rem;
background: var(--code-bg);
color: var(--code-text);
padding: 0.9rem 1.1rem;
transition: background 0.2s ease, color 0.2s ease;
}
.ff-code .tok-prop { color: #7ec4ff; }
.ff-code .tok-val { color: #ffd479; }
@media (prefers-reduced-motion: reduce) {
.infographic-fontfamily *, .infographic-fontfamily *::before, .infographic-fontfamily *::after {
animation-duration: 0.001ms !important;
transition-duration: 0.001ms !important;
}
}
</style>
<div class="ff-picker">
<button class="ff-pill is-active" data-stack="'Georgia', serif">Serif</button>
<button class="ff-pill" data-stack="'Arial', sans-serif">Sans-serif</button>
<button class="ff-pill" data-stack="'Courier New', monospace">Monospace</button>
<button class="ff-pill" data-stack="'Brush Script MT', cursive">Cursive</button>
<button class="ff-pill" data-stack="'Trebuchet MS', sans-serif">Trebuchet</button>
<button class="ff-pill" data-stack="'Impact', fantasy">Fantasy</button>
</div>
<div class="ff-stage">
<p id="ff-sample" style="font-family: 'Georgia', serif;">The quick brown fox</p>
</div>
<div class="ff-code" id="ff-code">
<span class="tok-prop">font-family</span>: <span class="tok-val" id="ff-code-val">'Georgia', serif</span>;
</div>
</div>
<script>
(function () {
var wrapper = document.currentScript.closest('.infographic-fontfamily')
|| document.querySelector('.infographic-fontfamily');
var bodyAttr = document.body.getAttribute('data-darkmode');
var dark;
if (bodyAttr === 'true') {
dark = true;
} else if (bodyAttr === 'false') {
dark = false;
} else {
var match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) wrapper.setAttribute('data-theme', 'dark');
})();
(function() {
var scripts = document.getElementsByTagName('script');
var thisScript = scripts[scripts.length - 1];
var root = thisScript.closest ? thisScript.closest('.infographic-fontfamily')
: document.querySelector('.infographic-fontfamily');
if (!root) root = document.querySelector('.infographic-fontfamily');
var pills = root.querySelectorAll('.ff-pill');
var sample = root.querySelector('#ff-sample');
var codeVal = root.querySelector('#ff-code-val');
pills.forEach(function(pill) {
pill.addEventListener('click', function() {
pills.forEach(function(p) { p.classList.remove('is-active'); });
pill.classList.add('is-active');
var stack = pill.dataset.stack;
sample.style.fontFamily = stack;
codeVal.textContent = stack;
});
});
})();
</script>
</div>.demo {
font-family: system-ui, sans-serif;
padding: 16px;
}
.demo h1 {
color: #2563eb;
margin: 0 0 8px;
}
.demo p {
color: #4b5563;
margin: 0;
}document.querySelector('.demo h1')?.addEventListener('click', () => {
alert('Hello from live preview!');
});🔠 3. Font Size – font-size Property
Use font-size to make your text bigger or smaller.
p { font-size: 18px; }You can use: px, em or rem and %
🚀 Try and Play Around
<div class="infographic-fontsize">
<style>
.infographic-fontsize {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #faf8f4;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
--code-bg: #1a1a1a;
--code-text: #f0ece4;
--display-font: 'Newsreader', serif;
--body-font: 'Inter', sans-serif;
--mono-font: 'IBM Plex Mono', monospace;
color: var(--ink);
font-family: var(--body-font);
max-width: 700px;
margin: 0 auto;
padding: clamp(1.25rem, 5vw, 2.5rem);
line-height: 1.5;
box-sizing: border-box;
background: transparent;
}
.infographic-fontsize[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
--code-bg: #1a1a22;
--code-text: #e8e3d8;
}
.infographic-fontsize *, .infographic-fontsize *::before, .infographic-fontsize *::after {
box-sizing: border-box;
}
.infographic-fontsize h1 {
font-family: var(--display-font);
font-size: clamp(1.5rem, 5vw, 1.9rem);
margin: 0 0 1.25rem;
font-weight: 600;
color: var(--ink);
}
.infographic-fontsize code { font-family: var(--mono-font); font-size: 0.85em; }
.fs-group { margin-bottom: 1.5rem; }
.fs-group-label {
font-size: 0.78rem;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--ink-soft);
margin-bottom: 0.5rem;
}
.fs-group-label code { color: var(--accent); }
.fs-picker { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.fs-pill {
border: 1px solid var(--line);
background: var(--paper);
padding: 0.5rem 1rem;
font-size: 0.88rem;
cursor: pointer;
color: var(--ink);
transition: background 0.15s, border-color 0.15s, color 0.15s;
}
.fs-pill.is-active { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); font-weight: 600; }
.fs-stage {
border: 1px solid var(--line);
background: var(--paper-alt);
padding: 2.25rem 1.5rem;
text-align: center;
margin-bottom: 0.5rem;
font-size: 16px;
transition: background 0.2s ease, border-color 0.2s ease;
}
.fs-stage p { margin: 0; font-family: var(--display-font); color: var(--ink); transition: font-size 0.15s; }
.fs-base-note {
font-size: 0.78rem;
color: var(--ink-soft);
text-align: center;
margin-bottom: 1.25rem;
}
.fs-code {
font-family: var(--mono-font);
font-size: 0.9rem;
background: var(--code-bg);
color: var(--code-text);
padding: 0.9rem 1.1rem;
transition: background 0.2s ease, color 0.2s ease;
}
.fs-code .tok-prop { color: #7ec4ff; }
.fs-code .tok-val { color: #ffd479; }
@media (prefers-reduced-motion: reduce) {
.infographic-fontsize *, .infographic-fontsize *::before, .infographic-fontsize *::after {
animation-duration: 0.001ms !important;
transition-duration: 0.001ms !important;
}
}
</style>
<div class="fs-group">
<div class="fs-group-label">Fixed — <code>px</code></div>
<div class="fs-picker">
<button class="fs-pill" data-size="14px">14px</button>
<button class="fs-pill" data-size="18px">18px</button>
<button class="fs-pill is-active" data-size="24px">24px</button>
<button class="fs-pill" data-size="32px">32px</button>
<button class="fs-pill" data-size="48px">48px</button>
<button class="fs-pill" data-size="64px">64px</button>
</div>
</div>
<div class="fs-group">
<div class="fs-group-label">Relative — <code>em</code> / <code>rem</code> / <code>%</code></div>
<div class="fs-picker">
<button class="fs-pill" data-size="1em">1em</button>
<button class="fs-pill" data-size="2em">2em</button>
<button class="fs-pill" data-size="1rem">1rem</button>
<button class="fs-pill" data-size="2rem">2rem</button>
<button class="fs-pill" data-size="100%">100%</button>
<button class="fs-pill" data-size="150%">150%</button>
</div>
</div>
<div class="fs-stage">
<p id="fs-sample" style="font-size: 24px;">The quick brown fox</p>
</div>
<div class="fs-base-note">Parent font-size: <code>16px</code> — em/% scale from this</div>
<div class="fs-code">
<span class="tok-prop">font-size</span>: <span class="tok-val" id="fs-code-val">24px</span>;
</div>
</div>
<script>
(function () {
var wrapper = document.currentScript.closest('.infographic-fontsize')
|| document.querySelector('.infographic-fontsize');
var bodyAttr = document.body.getAttribute('data-darkmode');
var dark;
if (bodyAttr === 'true') {
dark = true;
} else if (bodyAttr === 'false') {
dark = false;
} else {
var match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) wrapper.setAttribute('data-theme', 'dark');
})();
(function() {
var scripts = document.getElementsByTagName('script');
var thisScript = scripts[scripts.length - 1];
var root = thisScript.closest ? thisScript.closest('.infographic-fontsize')
: document.querySelector('.infographic-fontsize');
if (!root) root = document.querySelector('.infographic-fontsize');
var pills = root.querySelectorAll('.fs-pill');
var sample = root.querySelector('#fs-sample');
var codeVal = root.querySelector('#fs-code-val');
pills.forEach(function(pill) {
pill.addEventListener('click', function() {
pills.forEach(function(p) { p.classList.remove('is-active'); });
pill.classList.add('is-active');
var size = pill.dataset.size;
sample.style.fontSize = size;
codeVal.textContent = size;
});
});
})();
</script>
</div>.demo {
font-family: system-ui, sans-serif;
padding: 16px;
}
.demo h1 {
color: #2563eb;
margin: 0 0 8px;
}
.demo p {
color: #4b5563;
margin: 0;
}document.querySelector('.demo h1')?.addEventListener('click', () => {
alert('Hello from live preview!');
});🧠 Final Thoughts
Keep your fonts readable
Use contrasting colors for accessibility
Combine styles to match the vibe of your website