Dev Sample CSS · HTML structures

Article Develop

Technical showcase: layout shell (flow / below / sidebar), width helpers (w-*, w-breakout), covers *-block, and inner widgets on #page-article.

article-shell
w-breakout
*-block covers
bg-* / vh-*

Classic shell — DO / DONT

Three modes:

  • Classic tour.article-shell (alias .article-main) + sidebar. Reference: article-default.html.
  • Fullarticle.article-full, no sidebar; sections + w-*. Reference: article-full-width-ar.html.
  • Forbidden mix — half of the story in L/R, then full siblings, then more LEFT text. On mobile the sidebar jumps into the middle of reading.

Classic DOM (PC + mobile):

hero → article-shell → [ article-flow | article-sidebar | article-below ] → reviews (outside shell)

  • .article-flow — PC row 1 LEFT (beside sticky sidebar). Short intro: about, photos, highlights.
  • .article-sidebar — PC row 1 RIGHT, sticky. Mobile order: 3 (after all body text).
  • .article-below — PC full shell width (grid-column: 1 / -1). From itinerary downward. Mobile order: 2.
  • Reviews / outro — sibling after .article-shell, not between LEFT chunks.

Widths:

  • .w-shell / .w-content / .w-narrow — max-width inside the page (shell ≈ 1200px, content ≈ column without sidebar, narrow ≈ 720px).
  • .w-breakout — background / band to viewport width (escapes .article-shell). Put readable text in an inner .w-content / .w-shell.
  • *-box panels — same outer width helper; px-* on the outer wrapper, not on the coloured box itself when pairing boxes.

class="" order: semantics / layout / w-* first; then margin; then padding — e.g. w-breakout bg-white my-6 p-6.

Covers: suffix *-block.process-block, .stories-block (alias .stories-salon), .practical-block.

DONT: full-width sibling between parts of LEFT content while a sidebar exists; px-5 on section.ancestry-box when a sibling .practical-box sits inside a padded outer (widths diverge); Bulma my-* alone on empty divider nodes (use .my-*rem).

Demo — .article-flow

PC: this column sits beside the sticky sidebar (~ content width). Keep only the upper tour block here (about / media / highlights).

Photo grid

.photo-grid = layout. .pt-photos = lightbox behaviour. .photo-caption under each image.

Sample photo A

Caption under image A

Sample photo B

Caption under image B

Sample photo C

Caption under image C

Highlights

.highlights-grid / .highlight-item

.highlight-item
Second highlight

Demo — .article-below

PC: full shell width (not only the left column). Put itinerary and everything below the intro here. Mobile order: after flow, before sidebar.

Itinerary

.itinerary / .itin-row — space after </strong> in .itin-desc.

Stop A
.itin-desc title Body text after the strong title.
Stop B
Second stop Short description sample.

Breakout — .w-breakout

Background across the viewport while still inside the shell. Inner .w-content keeps text readable.

.w-breakout.bg-white + inner .w-content — use for included blocks / white bands that must reach the screen edges.

Stat — .stat-highlight

01
.stat-number + .stat-label — accent callout.

.practical-box

.prac-label
.prac-text — dark practical panel.

.ancestry-box

CTA / research panel — same column width as .practical-box here (both full below).

Dividers — empty div

Empty separator between sections. Bulma my-6 on an empty block collapses — use shared .my-3rem / .my-6rem / .my-9rem. Height via .vh-0-25 / .vh-0-50 / .vh-1. Colour via .bg-*. Width via .w-shell (or .w-content). In class="": layout first, then margin, then padding if any — e.g. vh-0-25 bg-gold w-shell my-6rem.

.vh-0-25.bg-gold.w-shell.my-3rem

.vh-0-50.bg-gold.w-content.my-3rem

.vh-1.bg-dark.w-shell.my-3rem

.vh-0-25.bg-red.w-narrow.my-3rem

Default between major article blocks:

<div class="vh-0-25 bg-gold w-shell my-6rem"></div>

Full page (no sidebar) — .w-shell

On article.article-full pages there is no shell grid. Sibling section elements use helpers from _shared.scss:

  • .w-shell — full article shell (--article-shell, ~1200px)
  • .w-content — classic content-column width (shell − sidebar − gap)
  • .w-narrow — narrow readable / optional tight CTA
  • .w-breakout — viewport-wide band (see demo in .article-below above)

Cover blocks use the shared suffix *-block.

.process-block

Cover structure (full-bleed background + inner width). Inner grid: .process-grid.process-item + .process-num.

1

Step title

.process-item body copy.

2

Step title

.process-item body copy.

3

Step title

.process-item body copy.

4

Step title

.process-item body copy.

.stories-block

Preferred cover name (suffix -block, same family as .process-block). Legacy alias: .stories-salon. Inner: .stories-grid / .story-card / carousel + read-more (JS pt-article-stories).

.story-body h3

Lead paragraph always visible.

.story-more — expanded by .read-more-btn.

Second card

Cards use .photo-carousel, .carousel-slide, .carousel-btn, .carousel-dot.

Practical full — .practical-block + .practical-box

.practical-block = optional outer cover. Width helper + Bulma px-* belong on the outer section — not on the *-box itself. Inner .practical-box then matches sibling boxes.

Label A
Detail text for practical information.
Label B
Second practical row.

CTA — .ancestry-box

Same outer (.w-content + px-5) as practical above; box class only on the inner panel so widths match.

Background helpers — .bg-*

Shared helpers: .bg-white, .bg-cream, .bg-dark, .bg-dark-2, .bg-gold, .bg-red, … Combine with cover *-block + inner .w-shell.

.bg-dark-2 + .w-content — narrower full-bleed band.

.reviews-section

★★★★★

".review-text — quote body."

.review-author
.review-source
★★★★★

"Second review card sample for grid layout."

Author Name
TripAdvisor · Sample
★★★★★

"Third card. Optional class fade-in on the section (JS adds .visible)."

Author Name
Viator · Sample

Class cheatsheet

Page shell: body#page-articlemain > articlesection / .article-shell

Hero: .article-hero, .article-hero-bg, .article-hero-overlay, .article-hero-content, .breadcrumb, .article-badge (.badge-battle / .badge-history / .badge-rating), .hero-quick-facts / .quick-fact.

Classic layout: .article-shell (alias .article-main) → .article-flow + .article-sidebar + .article-below; reviews outside shell. Mobile order: flow → below → sidebar.

Covers (*-block): .process-block, .stories-block (alias .stories-salon), .practical-block, .reviews-section.

Inner widgets: .process-grid, .stories-grid, .story-card, .photo-carousel, .practical-box, .ancestry-box, .stat-highlight, .photo-grid, .itinerary, .highlights-grid.

Dividers: empty divvh-0-25|vh-0-50|vh-1 + bg-* + w-shell|w-content|w-narrow + my-3rem|my-6rem|my-9rem (not Bulma my-* on empty nodes).

Widths / chrome: .w-shell, .w-content, .w-narrow, .w-breakout (viewport), .bg-*, Bulma m/p (margin before padding at end of class="").

Ready to Book Your Private Tour from Paris?

Contact us today — we respond within 24 hours. All tours include private door-to-door pickup from Paris.