mjml

SKILL.md

MJML Expert

MJML (Mailjet Markup Language) is a markup language designed to reduce the pain of coding responsive emails. It compiles to responsive HTML that works across email clients.

Document Structure

Every MJML document follows this hierarchy:

<mjml>
  <mj-head>
    <!-- Head components: styles, fonts, attributes, preview text -->
  </mj-head>
  <mj-body>
    <!-- Body components: sections, columns, content -->
  </mj-body>
</mjml>

Component Hierarchy

MJML enforces a strict nesting structure:

mjml
├── mj-head
│   ├── mj-attributes (define defaults and classes)
│   ├── mj-style (CSS styles)
│   ├── mj-font (external fonts)
│   ├── mj-title (document title)
│   ├── mj-preview (inbox preview text)
│   └── mj-breakpoint (responsive breakpoint)
└── mj-body
    ├── mj-wrapper (optional: wraps multiple sections)
    │   └── mj-section
    └── mj-section (rows)
        ├── mj-group (prevents column stacking on mobile)
        │   └── mj-column
        └── mj-column (responsive columns)
            ├── mj-text
            ├── mj-image
            ├── mj-button
            ├── mj-divider
            ├── mj-spacer
            ├── mj-social
            ├── mj-navbar
            ├── mj-table
            ├── mj-raw
            ├── mj-accordion
            ├── mj-carousel
            └── mj-hero

Critical rule: Content blocks (text, image, button, etc.) must always be inside mj-column. Columns must be inside mj-section or mj-group.

Column Sizing

Auto Sizing

By default, columns divide available width equally. Standard email width is 600px:

  • 2 columns = 300px each
  • 3 columns = 200px each
  • 4 columns = 150px each

Manual Sizing

Override with explicit width attribute:

<mj-section>
  <mj-column width="33%"><!-- Narrow --></mj-column>
  <mj-column width="67%"><!-- Wide --></mj-column>
</mj-section>

Both pixel and percentage values are supported.

Common Attributes

Most components support these attributes:

Attribute Description Example
padding Spacing inside element 10px 25px
background-color Background color #ffffff
width Element width 100% or 300px
align Horizontal alignment left, center, right
vertical-align Vertical alignment top, middle, bottom
font-family Text font Arial, sans-serif
font-size Text size 14px
color Text color #333333
line-height Line spacing 1.5 or 22px

Using Classes

Define reusable styles with mj-class:

<mj-head>
  <mj-attributes>
    <mj-class name="primary" background-color="#4A90D9" color="#ffffff" />
    <mj-class name="heading" font-size="24px" font-weight="bold" />
  </mj-attributes>
</mj-head>

<mj-body>
  <mj-section>
    <mj-column>
      <mj-button mj-class="primary">Click me</mj-button>
      <mj-text mj-class="heading">Welcome</mj-text>
    </mj-column>
  </mj-section>
</mj-body>

Background Images

Sections and wrappers support background images:

<mj-section background-url="https://example.com/bg.jpg"
            background-size="cover"
            background-repeat="no-repeat">
  <mj-column>
    <mj-text color="#ffffff">Content over image</mj-text>
  </mj-column>
</mj-section>

Full-Width Sections

By default, sections are constrained to 600px. Use full-width for edge-to-edge backgrounds:

<mj-section full-width="full-width" background-color="#f4f4f4">
  <!-- Content still constrained, but background extends full width -->
</mj-section>

Responsive Behavior

  • Columns automatically stack vertically on mobile (below breakpoint)
  • Use mj-group to prevent stacking for specific column groups
  • Default breakpoint is 480px; customize with mj-breakpoint
  • Images scale responsively by default

Reference Documentation

For complete component specifications with all attributes:

  • Body components: ${CLAUDE_SKILL_ROOT}/references/body-components.md
  • Head components: ${CLAUDE_SKILL_ROOT}/references/head-components.md
  • Layout patterns: ${CLAUDE_SKILL_ROOT}/references/patterns.md
Weekly Installs
14
First Seen
Jan 27, 2026
Installed on
gemini-cli13
codex13
opencode12
github-copilot12
kimi-cli12
amp12