<\/figure>\n\n\n\nBut when I think more deliberately about their positioning and styling, captions become an active part of the design. They can help guide attention, highlight important points, and bring a bit more personality to the page.<\/p>\n\n\n\n
No rule says captions must sit below an image. Why not treat them as design elements in their own right? I might position a caption to the left or right of an image.<\/p>\n\n\n\n
figure {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 1rem;\n}\n\nfigure img {\n grid-column: 1 \/ 6;\n}\n\nfigcaption {\n grid-column: 6;\n}<\/code><\/pre>\n\n\n\n <\/figure>\n\n\n\nOr let it overlap part of the picture itself:<\/p>\n\n\n\n
figure {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 1rem;\n}\n\nfigure img {\n grid-column: 1 \/ 6;\n grid-row: 1;\n}\n\nfigcaption {\n grid-column: 5 \/ -1;\n grid-row: 1;\n}<\/code><\/pre>\n\n\n\n <\/figure>\n\n\n\nCaptions connect images and text. Done well, they can elevate as well as explain. They don\u2019t have to look conventional either; you can style them to look like pull quotes or side notes.<\/p>\n\n\n\n <\/figure>\n\n\n\nI might design a caption to echo a pull quote, or combine it with graphic elements to make it feel less like a label and more like part of the story it\u2019s helping to tell.<\/p>\n\n\n
The power of whitespace<\/h3>\n\n\n Until now, I\u2019ve concentrated on the images themselves \u2014 how they\u2019re captioned, positioned, and sized. But there\u2019s something else that\u2019s just as important: the space around<\/em> them.<\/p>\n\n\n\nWhitespace isn\u2019t empty space; it\u2019s active. It shapes how content feels, how it flows, and how it\u2019s read. The margins, padding, and negative space around an image influence how much attention it attracts and how comfortably it sits within a page.<\/p>\n\n\n\nTight spacing creates tension.<\/figcaption><\/figure>\n\n\n\nTighter spacing is useful when grouping images, but it also creates tension. In contrast, generous margins give an image more breathing room.<\/p>\n\n\n\n
figure {\n margin-block: 3rem;\n}<\/code><\/pre>\n\n\n\nGenerous margins create pauses.<\/figcaption><\/figure>\n\n\n\nLike a line break in a poem or a pause in conversation, whitespace slows things down and gives people natural moments to pause while reading.<\/p>\n\n\n
Conclusion<\/h3>\n\n\n Images in long-form content aren\u2019t just illustrations. They shape how people experience what they\u2019re reading \u2014 how they move through it, how it feels, and what they remember. By thinking beyond the default rectangle, we can use images to create rhythm, personality, and even moments of surprise.<\/p>\n\n\n\n
Whether it\u2019s by breaking the grid, choosing full-bleed over inline, wrapping text, or designing playful captions, it\u2019s about being deliberate. So next time you\u2019re laying out a long article, don\u2019t wonder, \u201cWhere can I put an image?<\/em>\u201d Ask, \u201cHow can this image help shape someone\u2019s experience?<\/em>\u201d<\/p>\n","protected":false},"excerpt":{"rendered":"Images in long-form content can (and often should) do more than illustrate. They help set the pace, influence how readers feel, and add character that words alone can\u2019t always convey.<\/p>\n","protected":false},"author":288748,"featured_media":388544,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"inline_featured_image":false,"c2c_always_allow_admin_comments":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"enabled":false},"version":2},"_share_on_mastodon":"1","_share_on_mastodon_status":"Solid wisdom from @malarkeymastodon.social:\r\n\r\n\"Images in long-form content can (and often should) do more than illustrate. They help set the pace, influence how readers feel, and add character that words alone can\u2019t always convey.\"\r\n\r\n%permalink%"},"categories":[4],"tags":[585,19094],"class_list":["post-388519","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles","tag-images","tag-ui-ix-design"],"acf":{"show_toc":"Yes"},"share_on_mastodon":{"url":"https:\/\/mastodon.social\/@csstricks\/115090535433745122","error":""},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2025\/08\/image-long-form-content-caption.jpg?fit=1200%2C600&ssl=1","jetpack-related-posts":[{"id":283784,"url":"https:\/\/css-tricks.com\/did-you-know-that-css-custom-properties-can-handle-images-too\/","url_meta":{"origin":388519,"position":0},"title":"Did you know that CSS Custom Properties can handle images too?","author":"Robin Rendle","date":"February 27, 2019","format":false,"excerpt":"So you might be aware of CSS Custom Properties that let you set a variable, such as a theme color, and then apply it to multiple classes like this: :root { --theme: #777; } .alert { background: var(\u2014-theme); } .button { background: var(\u2014-theme); } Well, I had seen this pattern\u2026","rel":"","context":"In "Articles"","block_context":{"text":"Articles","link":"https:\/\/css-tricks.com\/category\/articles\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2019\/02\/alert-themes.png?fit=1200%2C600&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2019\/02\/alert-themes.png?fit=1200%2C600&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2019\/02\/alert-themes.png?fit=1200%2C600&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2019\/02\/alert-themes.png?fit=1200%2C600&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2019\/02\/alert-themes.png?fit=1200%2C600&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":6997,"url":"https:\/\/css-tricks.com\/expanding-images-html5\/","url_meta":{"origin":388519,"position":1},"title":"Expanding Images using HTML5’s contenteditable tabindex","author":"Chris Coyier","date":"August 9, 2010","format":false,"excerpt":"HTML5 has a new attribute, contenteditable, which can be applied to any element which allows it to be edited directly in the browser window. Think of text input with a predefined value, but it can literally be any element. Form elements like text inputs support the :focus pseudo class, which\u2026","rel":"","context":"In "Articles"","block_context":{"text":"Articles","link":"https:\/\/css-tricks.com\/category\/articles\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2010\/08\/firefoxresizing.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2010\/08\/firefoxresizing.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2010\/08\/firefoxresizing.jpg?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":883,"url":"https:\/\/css-tricks.com\/script-style-exclusive-automatically-generate-a-photo-gallery-from-a-directory-of-images\/","url_meta":{"origin":388519,"position":2},"title":"Script & Style Exclusive: Automatically Generate a Photo Gallery from a Directory of Images","author":"Chris Coyier","date":"August 15, 2008","format":false,"excerpt":"UPDATE: Script & Style is closed, but an updated version of this article is now on David Walsh's site. Just a quick note that I wrote up a tutorial (with demo and download) on how to Automatically Generate a Photo Gallery from a Directory of Images as an exclusive for\u2026","rel":"","context":"In "Articles"","block_context":{"text":"Articles","link":"https:\/\/css-tricks.com\/category\/articles\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/csstricks-uploads\/photogallery.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":367370,"url":"https:\/\/css-tricks.com\/designing-for-long-form-articles\/","url_meta":{"origin":388519,"position":3},"title":"Designing for Long-Form Articles","author":"Daniel Schwarz","date":"August 10, 2022","format":false,"excerpt":"Designing a beautiful \u201carticle\u201d is wrought with tons of considerations. Unlike, say, a homepage, a long-form article is less about designing an interface than it is designing text in a way that creates a relaxed and comfortable reading experience. That\u2019s because articles deal with long-form content which, in turn, tends\u2026","rel":"","context":"In "Articles"","block_context":{"text":"Articles","link":"https:\/\/css-tricks.com\/category\/articles\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2022\/08\/long-form-content-collage.png?fit=1200%2C600&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2022\/08\/long-form-content-collage.png?fit=1200%2C600&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2022\/08\/long-form-content-collage.png?fit=1200%2C600&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2022\/08\/long-form-content-collage.png?fit=1200%2C600&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2022\/08\/long-form-content-collage.png?fit=1200%2C600&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":790,"url":"https:\/\/css-tricks.com\/raw-contact-forms-with-captcha-from-csskarma\/","url_meta":{"origin":388519,"position":4},"title":"“Raw” Contact Forms (with CAPTCHA) from CSSKarma","author":"Chris Coyier","date":"June 11, 2008","format":false,"excerpt":"Tim Wright from CSSKarma has taken my Contact Form and done some cool stuff to it. For one thing, the design is way stripped down so if you are looking to \"start from scratch\" with your form design, you would probably be better off starting with Tim's examples than mine.\u2026","rel":"","context":"In "Articles"","block_context":{"text":"Articles","link":"https:\/\/css-tricks.com\/category\/articles\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/csstricks-uploads\/contact-form-example.jpg?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/csstricks-uploads\/contact-form-example.jpg?resize=350%2C200 1x, https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/csstricks-uploads\/contact-form-example.jpg?resize=525%2C300 1.5x"},"classes":[]},{"id":777,"url":"https:\/\/css-tricks.com\/creating-a-unique-contact-for\/","url_meta":{"origin":388519,"position":5},"title":"Part 2: Building a Unique Contact Form","author":"Chris Coyier","date":"May 27, 2008","format":false,"excerpt":"I'm calling this Part 2, because last week I began this adventure over on Tutorial Blog where we first designed a unique contact form: Photoshopping a Unique Contact Form Here we are going to pick up where that left off and actually build this thing with HTML\/CSS, as well as\u2026","rel":"","context":"In "Articles"","block_context":{"text":"Articles","link":"https:\/\/css-tricks.com\/category\/articles\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/csstricks-uploads\/contact-final.jpg?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/csstricks-uploads\/contact-final.jpg?resize=350%2C200 1x, https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/csstricks-uploads\/contact-final.jpg?resize=525%2C300 1.5x"},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/posts\/388519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/users\/288748"}],"replies":[{"embeddable":true,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/comments?post=388519"}],"version-history":[{"count":9,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/posts\/388519\/revisions"}],"predecessor-version":[{"id":388955,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/posts\/388519\/revisions\/388955"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/media\/388544"}],"wp:attachment":[{"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/media?parent=388519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/categories?post=388519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/tags?post=388519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}