Advanced Components
  • Welcome
  • Start here
    • Setup
    • Dependencies
  • Getting Started
    • Front-end tooling
    • Create a new D9 theme
    • Component Architecture
    • Drupal Best Practices
    • Drupal Attributes
    • Twig Blocks
  • Basic Components
    • Global styles
    • Adding webfonts
    • Heading Component
      • Improving the Heading
    • Button Component
  • A component's lifecycle
    • Hero Component
    • Include statements
    • Drupal prep
    • Drupal entities
    • Homepage content type
    • View modes
    • Add Hero to homepage
    • Drupal cache & twig debugging
    • Twig template suggestions
    • Getting field values
    • Integrating the Hero
    • Drupal Libraries
    • Hero Image styles
  • Card component
    • Card Component
    • Component Variants
    • Card Variant
    • Author component
  • Drupal site building
    • Blog articles
    • View modes
    • Drupal Views
    • Author
    • Generate content
    • Adding Blog Lists to the Homepage
  • Drupal Integrations
    • Integrating the Card
      • Taxonomy terms
    • Integrating the Card Wide
    • Author integration
    • From our blog
    • Integrating From our blog
    • Featured Content
    • Integrating Featured Content
    • Blog image styles
    • Blog detail page
  • Extras
    • Image Styles
    • Navigation
  • Resources
    • Resources
Powered by GitBook
On this page
  • Exercise: Building the component
  • Component's stock content
  • Component's Markup
  • Component's styles
  • Compiling the code

Was this helpful?

  1. Basic Components

Heading Component

PreviousAdding webfontsNextImproving the Heading

Last updated 3 years ago

Was this helpful?

Following the methodology we are going to build a simple component or pattern. The Heading pattern is an atom which prints a string of text as the title for a page, paragraph, or other component.

As we saw in the page, most components will need the following files:

File type
Purpose

.twig

Component's HTML and Twig logic

.scss

Component's styles

.json or .yml

Component's stock content

Some components may also include:

File type
Purpose

.js

Component's interactive behavior

.md

Component's annotations or specs details

Exercise: Building the component

Component's stock content

Let's start by first identifying the content for the component. Since this is a title field, we only need a string of text. We'll dive into more complex components in future exercises.

NOTE: All components will be created inside src/patterns/components.

On a typical Drupal project the full path may look something like this: <project-root>/web/themes/custom/<your-theme-name>/src/patterns/components/

  1. Inside components create a new folder called heading

  2. Inside the heading folder create a new file called heading.json

  3. Inside heading.json add the following code:

{
  "title": "Welcome to Mediacurrent training!"
}

We just created key/value pair for the heading with a key of title and value of Welcome to the best training workshop!.

Component's Markup

Now let's write some HTML to be able to see the Heading component in the browser.

  1. Inside the heading folder create a new file called heading.twig

  2. Inside heading.twig add the following code:

<h1 class="heading">{{ title }}</h1>

We created a h1 heading in which we pass the value of title from the json file.

Component's styles

We don't need to write any CSS for this component, but let's at least create a Sass file for when we need to write styles.

  1. Inside the heading folder create a new file called heading.scss

  2. Inside heading.scss add this code:

// Import site utilities
@import '../../global/utils/init';

.heading {
  color: $color-gray;

  &.center {
    text-align: center;
  }

  &.section-header {
    margin-bottom: 20px;

    @media screen and (min-width: $bp-lg) {
      margin-bottom: 40px;
    }
  }

  // Styles for extra large headings.
  &.heading--large {
    color: $color-gray;
    font-size: 3rem;
    text-align: center;

    @media screen and (min-width: $bp-sm) {
      font-size: 4rem;
    }

    @media screen and (min-width: $bp-md) {
      font-size: 6rem;
    }
  }
}

// Removes underline when headings are links.
.heading a {
  text-decoration: none;
}
  • First we import the theme's utilities so we have access to any Sass variables, mixins, breakpoints, etc. We will do this with every new stylesheet we create.

  • The remaining code are styles for the heading which include styles for when we need to style headings differently. More on this later.

Compiling the code

Now that the Heading component is done, let's compile the code so we can see it in Pattern Lab.

While in your theme's root directory, run the following commands in your command line and press Return

npm run build

npm run watch

The build command above compiles all scss, twig and js. files, and should build the new Heading component in Pattern Lab. The watch command watches for changes to your code and automatically compiles them. This is great so you don't have to keep compiling your code every time.

At the bottom of the watch command you will notice a list of URLs. In your browser of choice open the following url: . This will open Pattern Lab where you can find the Heading pattern under components.

Atomic Design
Component Architecture
http://localhost:3000