This guest post was written by Jay Slagle, an independent consultant and certified MadCap Software Advanced Developer who is passionate about using CSS to enhance the power of MadCap Flare. After discovering MadCap Software tools over a decade ago while working as a technical writer in Seattle, he has designed and implemented Flare projects for clients in government, law, education, healthcare, and technology. When he’s not occupied with all things Flare, Jay writes fiction under the pen name JB Strand.

Creating visually striking styles for note, tip, and warning paragraphs is a great way to highlight important information and liven up your MadCap Flare documentation. In this article, I'll show you how to use CSS pseudo-elements, borders, and background images to design single-paragraph notes for HTML5 outputs. You may be surprised at how much stylistic panache you can add to a paragraph style without resorting to layout techniques like tables and divs.

Classic Autonumber Approach

A common method of creating note paragraphs in Flare (one you may be familiar with if you've ever used Adobe FrameMaker) is to use an autonumber. Instead of specifying a numbering scheme, the autonumber simply adds a text prefix such as "Note" to the paragraph:

NoteAutonumber

This type of note style includes the Flare attribute mc-auto-number-format to define the text and provide basic formatting such as bolded text:

p.Note {     

width: 600px;     

padding: 10px;     

background-color: var(--GrayExtraLight);     

mc-auto-number-format: '{b}Note: {/b}';

}

CSS "Before" Pseudo-Element

CSS provides an alternate way to do this through pseudo-elements. The ::before pseudo-element adds content before the actual paragraph text. You can easily use it to insert a prefix as in the previous example:

NotePseudoBeforeBasic

For the main element class, omit the Flare mc-auto-number-format attribute. Next, define a separate pseudo-element using the element class name appended with ::before. For this pseudo-element, you can include CSS attributes such as the content attribute that provides the prefix text:

p.Note::before {     

content: 'Note: ';     

font-weight: bold;

}

Pseudo-Element Styling

The preceding pseudo-element example doesn't provide much advantage over the autonumber example. But when you use CSS pseudo-elements, you have a wealth of styling options for creating more sophisticated note styles:

NotePseudoBeforeStyled

In the main element class defined below, the text-indent attribute moves the first line of the paragraph eight pixels to the left. This compensates for the eight pixels of padding added to the left side of the paragraph. The result is that the purple background of the note prefix aligns flush with the paragraph's left edge:

p.Note {     

width: 600px;     

text-indent: -8px;     

padding: 6px 10px 6px 8px;     

background-color: var(--GrayExtraLight);

}

The ::before pseudo-element specifies the background color of the prefix as well as the values for the font family, color, size, spacing, weight, style, and case. The margin and padding values align everything:

p.Note::before {     

content: 'Note';     

font-family: var(--FontSansSerif);     

font-weight: bold;     

font-style: italic;     

font-size: 12pt;     

line-height: 12pt;     

text-transform: uppercase;     

letter-spacing: 2px;     

color: var(--YellowLight);     

background-color: var(--PurpleDark);    

 padding: 8px 6px 1px 6px;     

margin-right: 6px;

}

Tip: In the Flare GUI, the pseudo-element text can render slightly askew depending on which attributes you include. Generate the HTML output to see exactly how the note style renders in a browser.

Pseudo-Element as Pseudo-Heading

By default, the ::before pseudo-element works like a run-in heading (in CSS parlance, an inline-block element). But you can also make the pseudo-element appear to be a separate paragraph above the content paragraph. This is a great two-for-one deal. You assign a single CSS class to a single paragraph and you get a second paragraph for free:

NotePseudoBeforeAdvanced

Here, the main paragraph class does not use text-indent and it adjusts the padding as needed:

p.Note {     

width: 600px;     

padding: 6px 12px;     

background-color: var(--GrayExtraLight);

}

The display attribute set to block makes the pseudo-element function like a separate paragraph. The following markup also sets the pseudo-element width a hundred pixels narrower than the paragraph element so that the dotted border is not as wide as the paragraph text:

p.Note::before {     

content: 'Note';     

display: block;     

font-family: var(--FontSansSerif);     

font-weight: bold;     

font-size: 13pt;     

color: var(--PurpleDark);     

border-bottom: 2px dotted var(--PurpleDark);     

width: 500px;     

text-transform: uppercase;     

letter-spacing: 3px;     

text-align: center;     

margin: 4px auto 10px auto;    

 padding-bottom: 4px;

}

Setting the left and right margins to auto centers the pseudo-paragraph. The text-align attribute then centers the prefix text within the pseudo-paragraph.

CSS "After" Pseudo-Element

The bookend to the ::before pseudo-element is the ::after pseudo-element that adds content after the actual paragraph text. Here, the ::after pseudo-element creates a bottom border within the note paragraph. Three paragraphs for the price of one!

NotePseudoAfter

The ::after pseudo-element includes the content attribute with a blank space as its value so that the bottom border appears without any added text. The other attributes mimic those of the ::before pseudo-element:

p.Note::after {     

content: ' ';     

display: block;     

border-bottom: 2px dotted var(--PurpleDark);     

width: 500px;     

margin: 4px auto 10px auto;     

padding: 4px 20px;

}

Note Borders

Paragraph borders can also furnish ways to create distinctive note styles. Here are a few examples with their borders exaggerated to highlight the border styles.

Dashed Border

The most common border styles are solid, dotted, and dashed. Here's a thick dashed border.

NoteDashed

p.Note {     

border-radius: 6px;     

border: 6px dashed var(--PurpleMedium);

}

Highly Rounded Border

Use the border-radius attribute with a high value to round off boxy notes.

NoteRounded

p.Note {     

border-radius: 50px;     

border: 8px solid var(--PurpleMedium);

}

Accent Border

Using a border on one side creates a simple accent.

NoteAccentBorder

p.Note {     

border-radius: 0;     

border-left: 8px solid var(--PurpleMedium);

}

Exotic Border Types

CSS provides several different border types that may suit your needs.

NoteInsetBorder

p.Note {     

border-radius: 0;     

border: 8px inset var(--PurpleMedium);

}

Note Background Images

It is easy to add an icon to a note using the CSS background attributes. If you include a background color with the note paragraph, use a PNG, GIF, or SVG image with a transparent background for the icon:

NoteBackground

If the icon appears on the left side of the element, use enough left padding (40px here) to make space for the image:

p.Note {     

width: 600px;     

padding: 5px 10px 5px 40px;    

background-image: url('../Images/note.png');     

background-repeat: no-repeat;    

 background-position: 4px 10px;     

min-height: 48px;     

background-color: var(--GrayExtraLight);

}

Background Image and Repetition

Specify the relative URL to the background image file using the background-image attribute. Because background images tile across the element by default, specify background-repeat: no-repeat.

Background Positioning

CSS provides different values for positioning a background. The default is to place the image at the upper, left-hand corner of the element box. The background-position values shown above tweak the layout by moving the image 4 pixels to the right (horizontal offset) and 10 pixels down (vertical offset).

Minimum Height

The min-height value compensates for the fact that the note element height depends on the amount of text and does not take into account the background, so a single-line note can cut off the background image:

NoteBackgroundCutoff

To rectify this, set min-height to at least the height of the background image plus the top and bottom padding values.

Summary

Border styles, background images, and the CSS ::before and ::after pseudo-elements are powerful tools for designing single-paragraph note styles. In the next article, I'll demonstrate how to create note styles that can encapsulate multiple elements such as numbered lists and tables.