Table of Contents

§ 1.1 Base Type

For our base we use the following font settings on the HTML element to standardize the typographic scale in a consistent manner. We also make sure not to use united values for our line-heights per the recommendations of Mr. Eric Meyer himself.

Sass
// $Base Variables
// -------------------------------------//
// General base styles for type

//the serif boolean var can be redeclared from another stylesheet. However
//the var must be placed after your @import "typeplate.scss";
$typl8-serif-boolean: true !default;
$typl8-custom-font: false !default;
$typl8-font-family: if($typl8-serif-boolean, serif, sans-serif) !default;
$typl8-font-weight: normal !default;
$typl8-line-height: 1.65 !default;
$typl8-font-size: 112.5 !default;
$typl8-font-base: 16 * ($typl8-font-size/100) !default;
$typl8-measure: $typl8-font-base * $typl8-line-height;


// $Global Styles
// -------------------------------------//

html {
	@if $typl8-custom-font {
		font: $typl8-font-weight #{$typl8-font-size + "%"}/#{$typl8-line-height} $typl8-custom-font, $typl8-font-family;
	} @else {
		font: $typl8-font-weight #{$typl8-font-size + "%"}/#{$typl8-line-height} $typl8-font-family;
	}
}

body {
	color: $typl8-copy-color;
}
↑ back to top

§ 1.2 Typographic Scale

Establish clearly distinguishable heading levels with font-size. Don’t randomly pick font sizes, choose a type hierarchy that is harmonious and consistent. Do your best to use a modular scale that calculates those sizes from a ratio ensuring your design and typography can relate in a meaningful way. There’s an excellent calculator for this at modularscale.com.

By using culturally relevant, historically pleasing ratios to create modular scales and basing the measurements in our compositions on values from those scales, we can achieve a visual harmony not found in layouts that use arbitrary, conventional, or easily divisible numbers.

Tim Brown

Heading Giga

Heading Mega

Heading Alpha

Heading Beta

Heading Gamma

Heading Delta

Heading Epsilon

Heading Zeta

HTML
<!--
Custom header classes. These classes can be used on various elements
of your choosing. Classes depicted below are strictly for example
purposes and not a requirement.

If you'd like to manipulate the size of other typographic elements,
feel free to include the Sass '@extend' with your selector.
For example…

p {
	@extend .typl8-alpha;
}
-->
<h1 class="typl8-giga">Heading Giga</h1>
<h1 class="typl8-mega">Heading Mega</h1>
<h1 class="typl8-alpha">Heading Alpha</h1>
<h2 class="typl8-beta">Heading Beta</h2>
<h3 class="typl8-gamma">Heading Gamma</h3>
<h4 class="typl8-delta">Heading Delta</h4>
<h5 class="typl8-epsilon">Heading Epsilon</h5>
<h6 class="typl8-zeta">Heading Zeta</h6>
Sass
$typl8-measure: $typl8-font-base * $typl8-line-height;

// $Typescale
// -------------------------------------//
// Greek heading names and scale using base font-size
//
// typl8-tera                    117 = 18 × 6.5
// typl8-giga                     90 = 18 × 5
// typl8-mega                     72 = 18 × 4
// typl8-alpha                    60 = 18 × 3.3333
// typl8-beta                     48 = 18 × 2.6667
// typl8-gamma                    36 = 18 × 2
// typl8-delta                    24 = 18 × 1.3333
// typl8-epsilon                  21 = 18 × 1.1667
// typl8-zeta                     18 = 18 × 1

$typl8-scale: (
  typl8-tera: 117,
  typl8-giga: 90,
  typl8-mega: 72,
  typl8-alpha: 60,
  typl8-beta: 48,
  typl8-gamma: 36,
  typl8-delta: 24,
  typl8-epsilon: 21,
  typl8-zeta: 18,
) !default;

$typl8-headings: (
  h1: typl8-mega,
  h2: typl8-alpha,
  h3: typl8-beta,
  h4: typl8-gamma,
  h5: typl8-delta,
  h6: typl8-zeta
) !default;

// $Typescale Unit
// -------------------------------------//

$typl8-typescale-unit: rem !default;

// $Context Calculator
// -------------------------------------//
// target / context = result
//
// @example             p { font-size: typl8-context-calc(24, 16, px); }

@function typl8-context-calc($scale, $base, $value) {
	@return ($scale/$base)#{$value};
}

// $Measure-Margin
// -------------------------------------//
// divide 1 unit of measure by given font-size & return relative value

@function typl8-measure-margin($scale, $measure, $value) {
	$pixelValue: $measure/$scale;
	$remValue: $pixelValue * $typl8-font-base;

	@if $value == rem {
		@return $pixelValue#{$value};
	} @else if $value == em {
		@return ($remValue/$scale)#{$value};
	} @else {
		@return $remValue#{$value};
	}
}

// $Typescale Mixin
// -------------------------------------//

@mixin typl8-typescale($scale, $base, $value, $measure:"") {
	@if $value == rem {
		font-size: $scale#{px};
		font-size: typl8-context-calc($scale, $base, $value);
	} @else if $value == em {
		font-size: typl8-context-calc($scale, $base, $value);
	} @else {
		font-size: $scale#{px};
	}

	@if $measure != "" {
		@if $value == rem {
			margin-bottom: typl8-measure-margin($scale, $measure, $value: px);
			margin-bottom: typl8-measure-margin($scale, $measure, $value);
		} @else if $value == em {
			margin-bottom: typl8-measure-margin($scale, $measure, $value: em);
		} @else {
			margin-bottom: typl8-measure-margin($scale, $measure, $value);
		}
	}
}

// $Headings Styles
// -------------------------------------//
// Heading scale. Call from actual headings or other elements.
// Special Props to Harry Roberts for this trick.
//
// @markup                      <h6 class="typl8-giga">Awesome Headline</h6>
//                              <p class="typl8-tera">A story about a dude</p>
// optimizeLegibility           Enables ligatures and kerning
// single line height           Fixes large spaces when a heading wraps two lines

%typl8-hN {
  text-rendering: optimizeLegibility;
  line-height: 1;
  margin-top: 0;
  color: $typl8-heading-color;
}

@include typl8-headings;
@include typl8-headings-style;
↑ back to top

§ 1.3 Color

Just like in print, don’t use the darkest black available in your body text (#000). Instead, go for something softer, like #444. You can use a slightly darker color for titles like (#222) for example. Since these values are considered a de facto standard in practice, they're not necessarily ordained by law.

_typeplate.scss
// $Color Variables
// -------------------------------------//
$typl8-body-copy-color: #444 !default;
$typl8-heading-color: #222 !default;

body {
	color: $typl8-body-copy-color;
}

h1,
h2,
h3,
h4,
h5,
h6 {
	color: $typl8-heading-color;
}
↑ back to top

§ 1.4 Word-Wrap

The word-wrap CSS property is used to specify whether or not the browser may break lines within words in order to prevent overflow when an otherwise unbreakable string is too long to fit in its containing box.

Example:

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odio iste voluptates saepe ipsa magni repellendus explicabo numquam expedita dolore eveniet accusantium iure sit consequatur? Dolore minus vel blanditiis velit deserunt! We’ll also be checking a few things like the longest word in the world “Methionylthreonylthreonylglutaminylarginylisoleucine” and other stuff like links that are way long such as “Methionylthreonylthreonylglutaminylarginylisoleucine” and other long links like http://192.168.1.100/somedirectory/stayout/of/my/shit

Sass
// $Wordwrap
// -------------------------------------//
// Control word wrapping and breaks in your text.
//
// 'normal'                     Lines may only break at normal word break points.
// 'break-word'                 Unbreakable words may be broken at arbitrary points.
//
// @example                     article { @extend %typl8-breakword; }

%typl8-breakword {
	word-wrap: break-word;
}

%typl8-normal-wrap {
	word-wrap: normal;
}

%typl8-inherit-wrap {
	word-wrap: auto;
}

// $Global Styles
// -------------------------------------//

body {
	@extend %typl8-breakword;
}
↑ back to top

§ 2.1 Indenting

On the web, paragraphs are commonly set in blocks, with top and bottom margins. Historically, paragraphs are set using indentation, which makes it easier to scan long-form text and are (we think) more conducive to readability.

For the curious, here's a few example sites using the paragraph indentation approach we've chosen for our starter kit…Mark Boulton, Nice Web Type, Andy Rutledge and Nathan Ford just to name a few.

Authors choosing to opt out of our default styling may feel free to change the boolean variable in the Sass port to remove this opinionated default as depicted in the example below. CSS people you'll have to settle for the manual route to customize.

I crawled out almost immediately, and crouched, my feet still in the water, under a clump of furze. The horse lay motionless (his neck was broken, poor brute!) and by the lightning flashes I saw the black bulk of the overturned dog cart and the silhouette of the wheel still spinning slowly. In another moment the colossal mechanism went striding by me, and passed uphill towards Pyrford.

Seen nearer, the Thing was incredibly strange, for it was no mere insensate machine driving on its way. Machine it was, with a ringing metallic pace, and long, flexible, glittering tentacles (one of which gripped a young pine tree) swinging and rattling about its strange body.

It picked its road as it went striding along, and the brazen hood that surmounted it moved to and fro with the inevitable suggestion of a head looking about. Behind the main body was a huge mass of white metal like a gigantic fisherman’s basket, and puffs of green smoke squirted out from the joints of the limbs as the monster swept by me. And in an instant it was gone.

So much I saw then, all vaguely for the flickering of the lightning, in blinding highlights and dense black shadows.

As it passed it set up an exultant deafening howl that drowned the thunder—“Aloo! Aloo!”—and in another minute it was with its companion, half a mile away, stooping over something in the field. I have no doubt this Thing in the field was the third of the ten cylinders they had fired at us from Mars.

Sass
// $Paragraphs Variables
// -------------------------------------//
// Controls paragraphs vertical whitespace
// for subsequent paragraphs.
//
// $typl8-paragraph-spacing             [<'false'> | <'true'>]

$typl8-paragraph-spacing: false !default;
$typl8-indent-val: 1.5em !default;

// $Parargraphs Styles
// -------------------------------------//

p {
	margin: auto auto $typl8-indent-val;
	@if $typl8-paragraph-spacing == false {
		& + p {
			text-indent: $typl8-indent-val;
			margin-top: -$typl8-indent-val;
		}
	}
}
↑ back to top

§ 2.2 Hyphenation

Responsive or not, there’s no reason why we shouldn’t all be designing and building sites on flexible foundations. In a fluid layout, browser width and typographic measure are linked: the wider the viewport, the more characters per line. Keeping in mind that a range of 45-75 characters per line is generally accepted as safe for comfortable reading, there are a few things that can be done to avoid extra long lines of text in fluid layouts. Robert Bringhurst recommends for us to leave at least two characters behind and take at least three forward.

Since hyphens is an inherited property, it isn’t sufficient to set it for a limited number of elements and assume you’re done. You have to make sure you’ve turned it off for the elements that shouldn’t be hyphenated.

Eric Meyer
Sass
// $Hypens
// -------------------------------------//
$typl8-prefixes: -webkit-, -moz-, -ms-, '';

// $Hypens Mixin
// -------------------------------------//
// @notes
// http://caniuse.com/#search=hyphens
// http://trentwalton.com/2011/09/07/css-hyphenation
//
// @values              [ none | manual | auto ]

@mixin typl8-hyphens($val) {
	@each $prefix in $typl8-prefixes {
		#{$prefix}hyphens: $val;
	}
}

// $Hyphenation Styles
// -------------------------------------//
// @notes
// http://meyerweb.com/eric/thoughts/2012/12/17/where-to-avoid-css-hyphenation

body {
	// Ala Trent Walton
	// http://trentwalton.com/2011/09/07/css-hyphenation
	@include typl8-hyphens(auto);
}

input,
abbr,
acronym,
blockquote,
code,
kbd,
q,
samp,
var {
	@include typl8-hyphens(none);
}
↑ back to top

§ 3.1 Small Capitals

Small caps help to make abbreviations way easier to read but won’t stand out from the text. We highly suggest this bit of typographic flare with your content. True small capitals are now possible on the web, but alas they are still a bitch and will also depend on the type face in use. Definitely check out Open Typography for those typefaces and services that provide authentic small caps.

Lorem ipsum dolor sit amet, consectetur HTML adipisicing elit. CSS Laboriosam voluptatem a beatae accusantium accusamus dolor provident error consectetur quibusdam suscipit neque temporibus. Velit omnis voluptatum quasi tempora reiciendis expedita reprehenderit.

HTML
<abbr title="hyper text markup language">HTML</abbr>
Sass
// $Small-Caps Variables
// -------------------------------------//

$typl8-smcps-color: gray !default;
$typl8-smcps-weight: 600 !default;

// $Smallcaps Mixin
// -------------------------------------//
// @notes
// http://caniuse.com/#search=font-variant
// http://blog.hypsometry.com/articles/true-small-capitals-with-font-face
// 'font-variant' depends on the font family in use.
// Some font-families don't support small caps
// or don't provide them with their Webfont.

@mixin typl8-smallcaps($color, $font-weight) {
	@each $prefix in $typl8-prefixes {
		#{$prefix}font-variant: small-caps;
	}
	font-weight: $font-weight;
	text-transform: lowercase;
	color: $color;
}

// $Smallcaps Styles
// -------------------------------------//

abbr {
	@include typl8-smallcaps($typl8-smcps-color, $typl8-smcps-weight);
	&[title]:hover {
		cursor: help;
	}
}
↑ back to top

§ 3.2 Drop Capitals

A Drop Cap is the art of using an uppercase glyph to mark the start of copy. A technique that has been around for almost two thousand years!

There now is your insular city of the Manhattoes, belted round by wharves as Indian isles by coral reefs—commerce surrounds it with her surf. Right and left, the streets take you waterward. Its extreme downtown is the battery, where that noble mole is washed by waves, and cooled by breezes, which a few hours previous were out of sight of land. Look at the crowds of water-gazers there.

HTML
<!-- Add the drop-cap class to your element -->
<p class="typl8-drop-cap">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Unde in aliquid rem. Esse laboriosam nisi quas eveniet atque consequatur perferendis nostrum dignissimos magni cum suscipit delectus nam placeat qui rem.</p>
Typeplate Sass Helper
// $DropCap
// -------------------------------------//

$typl8-dropcap-float-position: left !default;
$typl8-dropcap-font-size: 4em !default;
$typl8-dropcap-font-family: inherit !default;
$typl8-dropcap-txt-indent: 0 !default;
$typl8-dropcap-margin: 10px 10px 0 0 !default;
$typl8-dropcap-padding: 0 20px !default;
$typl8-dropcap-color: inherit !default;
$typl8-dropcap-line-height: 1 !default;
$typl8-dropcap-bg: transparent !default;

// $Dropcap Mixin
// -------------------------------------//
// Add styling to intro paragraphs using a dropcap
//
// @markup              <p class="typl8-drop-cap">Lorem ipsum dolor sit amet</p>
// @example             .dropcap { @include typl8-dropcap; }

@mixin typl8-dropcap(
	$float-position,
	$font-size,
	$font-family,
	$txt-indent,
	$margin,
	$padding,
	$color,
	$line-height,
	$bg
	) {
	&:first-letter {
		float: $float-position;
		margin: $margin;
		padding: $padding;
		font-size: $font-size;
		font-family: $font-family;
		line-height: $line-height;
		text-indent: $txt-indent;
		background: $bg;
		color: $color;
	}
}

// $Dropcap Helper
// -------------------------------------//

.typl8-drop-cap {
	@include dropcap(
		$typl8-dropcap-float-position,
		$typl8-dropcap-font-size,
		$typl8-dropcap-font-family,
		$typl8-dropcap-txt-indent,
		$typl8-dropcap-margin,
		$typl8-dropcap-padding,
		$typl8-dropcap-color,
		$typl8-dropcap-line-height,
		$typl8-dropcap-bg
	);
}

// @notes
// combats our sibling paragraph syling and indentation
p + .typl8-drop-cap {
	text-indent: 0;
	margin-top: 0;
}
↑ back to top

§ 3.3 Unicode Ampersands

With the unicode-range property we can avoid using verbose markup and only target the characters we like according to the unicode unique identifier. We also harness the power of the %placeholder in Sass allowing like minded selectors to string together this shared property in a DRY way from one single declaration. Copy and paste the Sass below into Codepen and check out the output for yourself. Hint: create multiple classes.

Amper & Sands

Sass
// $Ampersands Variables
// -------------------------------------//

$typl8-amp-fontface: Ampersand !default;
$typl8-amp-fontfamily: Verdana, sans-serif !default;
$typl8-amp-src: local('Georgia'), local('Garamond'), local('Palatino'), local('Book Antiqua') !default;
$typl8-amp-fallback: local('Georgia') !default;

// $Unicode-Range-Ampersand font-face
// -------------------------------------//

@font-face {
	font-family: '#{$typl8-amp-fontface}';
	src: $typl8-amp-src;
	unicode-range: U+0026;
}

@font-face {
	font-family: '#{$typl8-amp-fontface}'; // fallback
	src: $typl8-amp-fallback;
	unicode-range: U+270C;
}

// $Ampersands Extend
// -------------------------------------//
// Call your custom ampersand on any element.
//
// @markup                  <h6 class="ampersand">Dewey Cheat 'em & Howe</h6>
// @example                 .ampersand { @extend %typl8-amp-placeholder; }

%typl8-amp-placeholder {
	@include typl8-ampersand($typl8-amp-fontface, $typl8-amp-fontfamily);
}

// $Ampersand Mixin
// -------------------------------------//

@mixin typl8-ampersand($typl8-amp-fontfamily...) {
	font-family: $typl8-amp-fontfamily;
}
↑ back to top

§ 4.5 Icon Font Helper

The Icon Font Helper is a special tool for those that use custom icon fonts, but don't wanna change all the reference links for the font files –especially the multitude of file types required (EOT, TTF, SVG, & WOFF). With so many URIs and file types it can become extremely tedious. By taking advantage of the Icon Font Helper authors can write in one line using a Sass loop and Compass' @include font-face helper function. This setup requires a bit of configuration on an authors part depending on specific project needs and workflows.

Sass
// $Icon-Font-Helper Variables
// -------------------------------------//
// Link single or multiple icon font sets. Requires Compass
//
// single icon font             $typl8-icon-fonts: (icon-name);
// multiple icon fonts          $typl8-icon-fonts: (icon-name1, icon-name2, icon-name3);

$typl8-icon-fonts: null !default;

// $Icon-Font-Helper Mixin
// -------------------------------------//
// Loading multiple icon fonts using Compass
//
// 1. Install Compass.
// 2. Create a 'fonts' directory in the root of your project.
// 3. Specify within your 'config.rb' the following line…
//      fonts_dir = "name-of-your-fonts-directory" ( i.e. fonts_dir = "fonts" )
// 4. Set your '$typl8-icon-fonts' variable as noted

@if ($typl8-icon-fonts != null) {
	@each $font in $typl8-icon-fonts {
		@include font-face($font,
			font-files(
				'#{$font}/#{$font}.woff',
				'#{$font}/#{$font}.ttf',
				'#{$font}/#{$font}.svg', svg
				),
			  '#{$font}/#{$font}.eot'
		)
	}
}
CSS Output
@font-face {
	font-family: "icon-font-name";
	src: url('//fonts/icon-font-name/icon-font-name.eot');
	src: url('//fonts/icon-font-name/icon-font-name.eot?#iefix') format('eot'), url('//fonts/icon-font-name/icon-font-name.woff') format('woff'), url('//fonts/icon-font-name/icon-font-name.ttf') format('truetype'), url('//fonts/icon-font-name/icon-font-name.svg') format('svg');
}

@font-face {
	font-family: "another-icon-font-name";
	src: url('//fonts/another-icon-font-name/another-icon-font-name.eot');
	src: url('//fonts/another-icon-font-name/another-icon-font-name.eot?#iefix') format('eot'), url('//fonts/another-icon-font-name/another-icon-font-name.woff') format('woff'), url('//fonts/another-icon-font-name/another-icon-font-name.ttf') format('truetype'), url('//fonts/another-icon-font-name/another-icon-font-name.svg') format('sag');
}
↑ back to top

§ 3.4 Small Print

The small element is used to represent side comments or what’s commonly referred to as ‘small print’: disclaimers, caveats, legal restrictions, or copyrights. It can also be used for attributions or satisfying licensing requirements.

small is now for side comments, which are the inline equivalent of aside—content which is not the main focus of the page. A common example is inline legalese, such as a copyright statement in a page footer, a disclaimer, or licensing information. It can also be used for attribution. Don’t use it for block-level content (paragraphs, lists, etc.), as this would be considered main content.

small text does not need to be smaller than surrounding text — if all you want is smaller text use CSS instead. Use small only on inline content.

Oli Studholme

Buy one widget, get one free! (While supplies last. Offer expires on the vernal equinox. Not valid in Ohio.)

HTML
<small>(While supplies last. Offer expires on the vernal equinox. Not valid in Ohio.)</small>
Sass
// $Small-Print Variables
// -------------------------------------//

$typl8-small-print-size: 65% !default;

// $Legal Text Styles
// -------------------------------------//

small {
	font-size: $typl8-small-print-size;
}
↑ back to top

§ 4.1 Code Blocks

Monospace fonts just as you desire for all your code block dreams! Monospace fonts or “fixed pitch” fonts, contain characters that all have the same character width. ‘l’, ‘1’ and ‘i’ are easily distinguished with monospace, ‘0’, ‘o’ and ‘O’ are easily distinguished and clear punctuation characters, especially braces, parenthesis and brackets.

HTML
 /* Code Block Example within Markup */
h1 {
	background: red;
	color: blue;
	padding: 1em;
	margin: 3em;
	border: 2px solid black;
}
Sass
// $Code Mixin
// -------------------------------------//

@mixin typl8-white-space($wrap-space) {
	@if $wrap-space == 'pre-wrap' {
		white-space: #{-moz-}$wrap-space;
		white-space: $wrap-space;
	} @else {
		white-space: $wrap-space;
	}
}

// $Codeblock Styles
// -------------------------------------//

pre {
	@include typl8-white-space(pre);

	code {
		@extend %typl8-normal-wrap;
		@include typl8-white-space(pre-wrap);
	}
}

code {
	@include typl8-white-space(pre);
	font-family: monospace;
}
↑ back to top

§ 4.2 Figures

Fig. 4.2 | Type Anatomy, a diagram and anatomy of typography.
HTML
<figure>
	<figcaption>
		<strong>Fig. 4.2 | </strong>Type Anatomy, an excerpt from Mark Boulton's book<cite title="http://designingfortheweb.co.uk/book/part3/part3_chapter11.php">“Designing for the Web”</cite>
	</figcaption>
</figure>
↑ back to top

§ 4.3 Block Quotes

The blockquote element represents a section that is being quoted from another source. Good blockquotes should include a citation, but one is not required. Stylistically, these can look a lot like pull-quotes by using :before and :after pseudo elements for the curly quotes, or, authors can include them inline.

The contents of blockquote are limited to headings and paragraphs. header, footer, or cite tags are not allowed. For more examples, see A List Apart's sample blockquote patterns.

Embracing the fluid & flexible aspect of responsive web design was an easy decision, but I’ve been less sure-footed when it comes to balancing that with setting type on the web

Trent Walton
HTML
<figure>
	<blockquote cite="">
		<p></p>
	</blockquote>
	<figcaption>
		<cite>
			<small><a href=""></a></small>
		</cite>
	</figcaption>
</figure>
Sass
// $Citations Variables
// -------------------------------------//

$typl8-cite-display: block !default;
$typl8-cite-align: right !default;
$typl8-cite-font-size: inherit !default;

// $Blockquote Mixin
// -------------------------------------//
// "-" is your citation flourish.
//
// I always say important things because I'm so smart
//                           - Super Important Person
//
// @example                 .your-class-name { @include blockquote("-"); }

@mixin typl8-blockquote($citation-flourish) {
	p {
		&:last-of-type {
			margin-bottom: -#{$typl8-line-height/2}em;
		}
	}

	+ figcaption {
		@extend %typl8-cite;

		&:before {
			content: $citation-flourish;
		}
	}
}

@mixin typl8-cite-style($display, $text-align, $font-size) {
	display: $display;
	font-size: $font-size;
	text-align: $text-align;
}
↑ back to top

§ 4.4 Pull Quotes

Pull quotes are tricky, but with this little ditty they’re not so difficult or tedious anymore. The example is an improvement based upon the 24 ways article discussing swooshy curly quotes without images. This particular example depicted takes advantage of psuedo selectors and the <aside> tag.

HTML
<aside class="typl8–pull–quote">
	<blockquote>
		<p></p>
	</blockquote>
</aside>
Sass
// $Pull-Quotes Variables
// -------------------------------------//

$typl8-pull-quote-fontsize: 4em !default;
$typl8-pull-quote-opacity: 0.5 !default;
$typl8-pull-quote-color: #dc976e !default;


// $Pull-Quotes Mixin
// -------------------------------------//

@mixin typl8-pull-quotes($fontsize, $opacity, $color) {
	position: relative;
	padding: typl8-context-calc($fontsize, $fontsize, em);

	&:before,
	&:after {
		height: typl8-context-calc($fontsize, $fontsize, em);
		opacity: $opacity;
		position: absolute;
		font-size: $fontsize;
		color: $color;
	}

	&:before {
		content: '“';
		top:  0;
		left: 0;
	}

	&:after {
		content: '”';
		bottom: 0;
		right: 0;
	}
}

// $Pull-Quotes Helper
// -------------------------------------//
// @notes
// http://24ways.org/2005/swooshy-curly-quotes-without-images

.typl8-pull-quote {
	@include typl8-pull-quotes(
		$typl8-pull-quote-fontsize,
		$typl8-pull-quote-opacity,
		$typl8-pull-quote-color
	);
}
↑ back to top

§ 4.7 Footnotes

The sites we’ve built to display on a desktop, smartphone, or a tablet today could be on a TV Screen, coffee table display, or mega space yacht projection system tomorrow. Do yourself a favor and heed the advice of the Dao: A fully-scalable web1

  1. Style sheets that use relative units can more easily scale from one output environment to another. Most of the time I use em and rem.
HTML
<!-- Footnote Markup : Replace ‘X” with your unique number for each footnote -->
<article>
	<p><sup><a href="#fn-itemX" id="fn-returnX"></a></sup></p>
	<footer>
		<ol class="foot-notes">
			<li id="fn-itemX"><a href="#fn-returnX">↩</a></li>
		</ol>
	</footer>
</article>
↑ back to top

§ 4.8 Definition Lists

The dl element is for another type of list called a definition list. Instead of list items, the content of a dl consists of dt (Definition Term) and dd (Definition Description) pairs.

TypePlate offers several different patterns for definition lists. In all three of the examples below, the contents of dts are wrapped in b tags, and a class of .micro is given to the contents of dds. First is the default format for definitions lists.

a) Multi-line Definitions (default)

This is a term
this is the definition of that term, which both live in a dl.
Another Term
And it gets a definition too, which is this line
This is a 2nd definition for a single term. A dt may be followed by multiple dds.
HTML
<dl>
	<dt><b></b></dt>
	<dd></dd>
</dl>

b) Inline Definitions

The second format for definition lists is lining. This style is more robust, with support for multiple terms defined by a single definition, and applies proper punctuation (: ,) where appropriate:

This is a term
this is the definition of that term, which both live in a dl.
Another Term
And it gets a definition too, which is this line
this is a 2nd definition for a single term.
Term
Other Defined Term
dt terms may stand on their own without an accompanying dd, but in that case they share descriptions with the next available dt. You may not have a dd without a parent dt.
HTML
<dl class="typl8-lining">
	<dt><b></b></dt>
	<dd></dd>
</dl>
Sass
// $Definition-Lists Mixin
// -------------------------------------//
// @notes
// http://lea.verou.me/2012/02/flexible-multiline-definition-lists-with-2-lines-of-css
// http://lea.verou.me/2012/02/flexible-multiline-definition-lists-with-2-lines-of-css

@mixin typl8-definition-list-style($style) {
	@if $style == lining {
		dt,
		dd {
			display: inline;
			margin: 0;
		}

		dt,
		dd {
			& + dt {
				&:before {
					content: "\A";
					white-space: pre;
				}
			}
		}

		dd {
			& + dd {
				&:before {
					content: ", ";
				}
			}
			&:before {
					content: ": ";
					margin-left: -0.2rem; //removes extra space between the dt and the colon
			}
		}
	}
}

// $Definition Helper
// -------------------------------------//

.typl8-lining {
	@include typl8-definition-list-style(lining);
}

c) Dictionary-style Definition

The third format for definition lists is dictionary. This style is more a formal, applying proper punctuation where necessary and includes ordinal indicators:

This is a term
this is the definition of that term, which both live in a dl.
Another Term
And it gets a definition too, which is this line
this is a 2nd definition for a single term.
Term
Other Defined Term
dt terms may stand on their own without an accompanying dd, but in that case they share descriptions with the next available dt. You may not have a dd without a parent dt.
HTML
<dl class="typl8-dictionary-style">
	<dt><b></b></dt>
		<dd></dd>
	<dt><b></b></dt>
		<dd></dd>
		<dd></dd>
	<dt><b></b></dt>
		<dd></dd>
</dl>
Sass
// $Definition-Lists Variables
// -------------------------------------//
// @notes
// http://lea.verou.me/2012/02/flexible-multiline-definition-lists-with-2-lines-of-css
// http://lea.verou.me/2012/02/flexible-multiline-definition-lists-with-2-lines-of-css
@mixin typl8-definition-list-style($style) {
	@if $style == dictionary-style {
		dt {
			display: inline;
			counter-reset: definitions;
			& + dt {
				&:before {
					content: ", ";
					margin-left: -0.2rem; // removes extra space between the dt and the comma
				}
			}
		}

		dd {
			display: block;
			counter-increment: definitions;
			&:before {
				content: counter(definitions, decimal) ". ";
			}
		}
	}
}

// $Definition Helper
// -------------------------------------//

.typl8-dictionary-style {
	@include typl8-definition-list-style(dictionary-style);
}
↑ back to top