Bhylu

Tooltip Arrows — Code Challenge

Put draw a decorative tooltip arrow into practice. Rebuild the example from its HTML, then compare your result with the CSS solution. Change the content and the viewport before calling it finished.

How it works

  • A triangle can be formed from border edges on a zero-sized pseudo-element. Position it relative to the hint box rather than the page.
  • A decorative effect should leave the content understandable when the effect is unavailable. Provide a readable background and normal document flow first.
  • Inspect clipping, stacking, and contrast when adding layers; appearance changes do not always change the layout box.

Your task

Use the HTML below to explore this rule: A triangle can be formed from border edges on a zero-sized pseudo-element. Position it relative to the hint box rather than the page. Write your own CSS before opening the solution. Then replace the heading with a longer one and verify that the content is still readable.

Review the CSS solution

.badge { position: relative; background: #dbe9db; padding: 10px; }
.badge::after { content: ""; position: absolute; inset-block-start: 100%; inset-inline-start: 14px; border: 6px solid transparent; border-top-color: #dbe9db; }

A solution to compare

The HTML supplies the content; the CSS below styles it. Open both together in the playground, then change the lesson rules at the end of the stylesheet.

HTML

<article class="card"><span class="badge">This Saturday</span><h2>Neighbourhood repair club</h2><p>Bring a small project. Share a useful skill.</p><a href="#booking">View the workshop</a></article>
CSS

body { margin: 0; padding: 24px; font-family: system-ui, sans-serif; color: #25332d; background: #f4f7f2; }
.card { padding: 20px; background: white; border: 1px solid #d4dfd6; }
h2 { margin-top: 0; }
p { line-height: 1.6; }
a { color: #17634c; }
.badge { display: inline-block; margin-bottom: 12px; font-size: .8rem; }
.layout { display: grid; gap: 16px; }
.photo { width: 100%; height: 160px; background: linear-gradient(135deg, #e4af6b, #668cba); }
button, input, select { font: inherit; padding: 8px; }
label { display: block; margin-block: 12px 4px; }

/* This lesson */
.badge { position: relative; background: #dbe9db; padding: 10px; }
.badge::after { content: ""; position: absolute; inset-block-start: 100%; inset-inline-start: 14px; border: 6px solid transparent; border-top-color: #dbe9db; }

A triangle can be formed from border edges on a zero-sized pseudo-element. Position it relative to the hint box rather than the page.