Body layout

The Body component can be used to create a centered layout to add your content. This should be added to the body element in the markup.

github location npm version

Usage

The vf-body layout should be added to the body element in your mark up and therefore should only be added once.

This layout component sets a maximum width to the 'page' and centers it. The maximum width of the page is set as a default to 80em or 1280px but can be changed using the CSS custom property --vf-body-width if needed. As the web is, by default, a fluid medium the vf-body needs to give some inline spacing when the browswer viewport is smaller than 1280px like on a tablet or mobile device. This is made possible using padding: 0 1em which is the same as padding-left: 1em; padding-right: 1em.

<body class="vf-body | vf-stack vf-stack--400">...</body>

<body> <div class="my-app | vf-body"> ... </div> </body>

CSS

.vf-body {
  display: block;
  margin: 0 auto;
  max-width: 80em;
  max-width: var(--vf-body-width, 80em);
  padding: 0 1em;
}

Variants

This is for example purposes only. Please use the vf-body class on the body element only.

Nunjucks syntax

Depending on your environment you'll want to use render or include. As a rule of thumb: server-side use include, precompiled browser use render. If you're using vf-eleventy you should use include.

Using include

You'll need to pass a context object from your code or Yaml file (example), as well as the path to the Nunjucks template. Nunjucks' include is an abstraction of render and provides some additional portability.


{% set context fromYourYamlFile %}
- or -
{% set context = { 
"component-type" : "layout",
 }
%}
{% include "../path_to/vf-body/vf-body.njk" %}
                

Using render

This approach is best for bare-bones Nunjucks environments, such as precompiled templates with the Nunjucks slim runtime where include is not be available.


{% render '@vf-body', {
  "component-type" : "layout",}
%}
                
HTML
<div class="vf-body">
  <div class="vf-box vf-box--normal vf-box-theme--primary">
    <p class="vf-ui-color--white vf-u-margin--0 vf-u-type__text-body--2">This is for example purposes only. Please use the <code>vf-body</code> class on the <code>body</code> element only.</p>
  </div>
</div>
              

Examples

Installation info

This component is distributed with npm. After installing npm, you can install the vf-body with this command.

$ yarn add --dev @visual-framework/vf-body

Sass/CSS

The source files included are written in Sass(scss). You can point your Sass include-path at your node_modules directory and import it like this.

@import "@visual-framework/vf-body/index.scss";

Make sure you import Sass requirements along with the modules. You can use a project boilerplate or the vf-sass-starter

Changelog

Changelog

1.2.0

  • removes box-sizing: border-box;
  • adds a little more to the documentation.

1.1.0

  • Makes the max-width a factor of 16px.
  • adds box-sizing so that the padding doesn't effect the max-width.
  • includes a fix for when a vf-body is (for some reason) nested inside another vf-body

1.0.0

  • Initial stable release

Assets



File system location: components/vf-body

Find an issue on this page? Propose a change or discuss it.

AI Assistant

Welcome! I'm here to help

Try asking me:

Disclaimer: This chatbot is designed to assist you with general information and basic inquiries. See our disclaimer notes.

Review AI generated content for accuracy. Leave feedback.

Close chat and delete conversation?

Are you sure you want to close the chat?
Your current conversation history will be permanently deleted.