Skip to content

Commit

Permalink
Major: Now using css normalization instead of css reset + building up…
Browse files Browse the repository at this point in the history
… default styles

We're pulling in http://github.com/necolas/normalize.css/ developed by Nicolas Gallagher along with Jonathan Neal.

normalize.css retains useful browser defaults and includes several common fixes to improve cross-browser (desktop and mobile) styling consistency.

Lots of research has gone into normalize, verifying what are the default user agent styles provided by each browser. We can very specifically change only the ones we need to instead of the bulldozer approach.

Why this is great news:

* Who likes being so damn redudant and declaring: em, i { font-style: italic; }
* By using normalization instead of a reset + building up default styles, we use less styles and save bytes
* Less noise in your dev tools: when debugging, you don't have to trawl through every reset selector to reach the actual style that is causing the issue.
* More details here: http://necolas.github.com/normalize.css/

We're really happy to get user feedback on this, as we think style normalization is a better direction than resetting; and want to make sure you do too. :) Leave a comment here or in the Google Group: http://h5bp.com/group

Fixes #412
Fixes #500
Fixes #534
Closes #456

Links #566
  • Loading branch information
necolas committed Jun 20, 2011
1 parent e9f342b commit ddaf66a
Showing 1 changed file with 168 additions and 139 deletions.
307 changes: 168 additions & 139 deletions css/style.css
Original file line number Diff line number Diff line change
@@ -1,181 +1,211 @@
/**
/*
* HTML5 ✰ Boilerplate
*
* style.css contains a reset, font normalization and some base styles.
*
* Credit is left where credit is due.
* Much inspiration was taken from these projects:
* - yui.yahooapis.com/2.8.1/build/base/base.css
* - camendesign.com/design/
* - praegnanz.de/weblog/htmlcssjs-kickstart
* What follows is the result of much research on cross-browser styling.
* Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal,
* Kroc Camen, and the H5BP dev community and team.
*/


/**
* html5doctor.com Reset Stylesheet (Eric Meyer's Reset Reloaded + HTML5 baseline)
* v1.6.1 2010-09-17 | Authors: Eric Meyer & Richard Clark
* html5doctor.com/html-5-reset-stylesheet/
/* =============================================================================
HTML5 element display
========================================================================== */

article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
audio[controls], canvas, video { display: inline-block; *display: inline; *zoom: 1; }


/* =============================================================================
Base
========================================================================== */

/*
* 1. Correct text resizing oddly in IE6/7 when body font-size is set using em units
* http://clagnut.com/blog/348/#c790
* 2. Force vertical scrollbar in non-IE
* 3. Remove Android and iOS tap highlight color to prevent entire container being highlighted
* www.yuiblog.com/blog/2010/10/01/quick-tip-customizing-the-mobile-safari-tap-highlight-color/
* 4. Prevent iOS text size adjust on device orientation change, without disabling user zoom
* www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/
*/

html, body, body div, span, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp,
small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li,
fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, figcaption, figure,
footer, header, hgroup, menu, nav, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
vertical-align: baseline;
}
html { font-size: 100%; overflow-y: scroll; -webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }

article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
display: block;
}
body { margin: 0; font-size: 13px; line-height: 1.231; }

blockquote, q { quotes: none; }
body, button, input, select, textarea { font-family: sans-serif; color: #222; }

blockquote:before, blockquote:after,
q:before, q:after { content: ""; content: none; }
/*
* Improve image quality when scaled in IE7
* code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
*/

img { border: 0; -ms-interpolation-mode: bicubic; }

ins { background-color: #ff9; color: #000; text-decoration: none; }
/*
* These selection declarations have to be separate
* No text-shadow: twitter.com/miketaylr/status/12228805301
* Also: hot pink!
*/

mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; }
::-moz-selection { background: #fe57a1; color: #fff; text-shadow: none; }
::selection { background: #fe57a1; color: #fff; text-shadow: none; }

del { text-decoration: line-through; }

abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; }
/* =============================================================================
Links
========================================================================== */

table { border-collapse: collapse; border-spacing: 0; }
a { color: #00e; }
a:visited { color: #551a8b; }
a:focus { outline: thin dotted; }

hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
/* Improve readability when focused and hovered in all browsers: people.opera.com/patrickl/experiments/keyboard/test */
a:hover, a:active { outline: 0; }

This comment has been minimized.

Copy link
@anselmh

anselmh Jun 21, 2011

Contributor

I think outline: 0; is bad practice. You finally cannot navigate through a website with just your keyboard then. What's about accessibilty here?

This comment has been minimized.

Copy link
@mathiasbynens

mathiasbynens Jun 21, 2011

Member

Note that only outline: 0 applies only for the :hover and :active states – :focus (which is what you’re talking about) will still get the outline just fine.

This comment has been minimized.

Copy link
@anselmh

anselmh Jun 21, 2011

Contributor

Sorry about that. Do you know about screenreaders? Whats happening in a flyout-menu?

This comment has been minimized.

Copy link
@blackfalcon

blackfalcon Jun 21, 2011

I am getting confused with what is considered 'best practice'? In the Boilerplate template you advocate paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ In this revised reset, normalize you are now reverting back to CSS hacks for IE?

This comment has been minimized.

Copy link
@mathiasbynens

mathiasbynens Jun 22, 2011

Member

@blackfalcon There’s nothing wrong with safe CSS hacks like the ones that are used here.

This comment has been minimized.

Copy link
@roblarsen

roblarsen Jun 22, 2011

Member

Does anyone know what that hack is actually FOR? That's inherited code from, what, Yahoo? What's the purpose? (I've always been curious)

This comment has been minimized.

Copy link
@necolas

necolas Jun 22, 2011

Author Member

@roblarsen Have a read of the link that is included in the CSS comment

This comment has been minimized.

Copy link
@ChrisMcKee

ChrisMcKee Jun 22, 2011

Member

No real issues with using the safe-hacks in this form (setting base-styles); and I as a rule hate hacks. Looks tidy :D



/**
* Font normalization inspired by YUI Library's fonts.css: developer.yahoo.com/yui/
*/
/* =============================================================================
Typography
========================================================================== */

body { font: 13px/1.231 sans-serif; *font-size: small; } /* Hack retained to preserve specificity */
abbr[title] { border-bottom: 1px dotted; }

/* Normalize monospace sizing:
en.wikipedia.org/wiki/MediaWiki_talk:Common.css/Archive_11#Teletype_style_fix_for_Chrome */
pre, code, kbd, samp { font-family: monospace, sans-serif; }
b, strong { font-weight: bold; }

blockquote { margin: 1em 40px; }

/**
* Minimal base styles.
*/
dfn { font-style: italic; }

/* 1) Always force a scrollbar in non-IE
2) Remove iOS text size adjust without disabling user zoom: www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/ */
html { overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }

hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }

ins { background: #ff9; color: #000; text-decoration: none; }

/* Accessible focus treatment: people.opera.com/patrickl/experiments/keyboard/test */
a:hover, a:active { outline: 0; }
mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }

a, a:active, a:visited { color: #607890; }
a:hover { color: #036; }
/* Redeclare monospace font family: en.wikipedia.org/wiki/User:Davidgothberg/Test59 */
pre, code, kbd, samp { font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 1em; }

ul, ol { margin-left: 2em; }
ol { list-style-type: decimal; }
/* Improve readability of pre-formatted text in all browsers */
pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }

/* Remove margins for navigation lists */
nav ul, nav li { margin: 0; list-style:none; list-style-image: none; }
q { quotes: none; }
q:before, q:after { content: ""; content: none; }

small { font-size: 85%; }
b, strong, th { font-weight: bold; }

td { vertical-align: top; }

/* Set sub, sup without affecting line-height: gist.github.com/413930 */
sub, sup { font-size: 75%; line-height: 0; position: relative; }
/* Position subscript and superscript content without affecting line-height: gist.github.com/413930 */
sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
sup { top: -0.5em; }
sub { bottom: -0.25em; }

pre {
/* www.pathf.com/blogs/2008/05/formatting-quoted-code-in-blog-posts-css21-white-space-pre-wrap/ */
white-space: pre; white-space: pre-wrap; word-wrap: break-word;
padding: 15px;
}

.ie6 legend, .ie7 legend { margin-left: -7px; }
/* =============================================================================
Lists
========================================================================== */

/* 1) Make inputs and buttons play nice in IE: www.viget.com/inspire/styling-the-button-element-in-internet-explorer/
2) WebKit browsers add a 2px margin outside the chrome of form elements.
Firefox adds a 1px margin above and below textareas
3) Set font-size to match <body>'s, and font-family to sans-serif
4) Align to baseline */
button, input, select, textarea { width: auto; overflow: visible; margin: 0; font-size: 100%; font-family: sans-serif; vertical-align: baseline; }
ul, ol { margin: 1em 0; padding: 0 0 0 40px; }
dd { margin: 0 0 0 40px; }
nav ul, nav ol { list-style: none; margin: 0; padding: 0; }

/* 1) Remove default scrollbar in IE: www.sitepoint.com/blogs/2010/08/20/ie-remove-textarea-scrollbars/
2) Align to text-top */
textarea { overflow: auto; vertical-align:text-top; }

/* Hand cursor on clickable input elements */
label, input[type="button"], input[type="submit"], input[type="image"], button { cursor: pointer; }
/* =============================================================================
Figures
========================================================================== */

/* Remove extra padding and inner border in Firefox */
input::-moz-focus-inner,
button::-moz-focus-inner { border: 0; padding: 0; }
figure { margin: 0; }

/* Colors for form validity */
input:valid, textarea:valid { }
input:invalid, textarea:invalid { border-radius: 1px; -moz-box-shadow: 0 0 5px red; -webkit-box-shadow: 0 0 5px red; box-shadow: 0 0 5px red; }
.no-boxshadow input:invalid, .no-boxshadow textarea:invalid { background-color: #f0dddd; }

/* Bicubic resizing for non-native sized IMG:
code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ */
.ie7 img { -ms-interpolation-mode: bicubic; }
/* =============================================================================
Forms
========================================================================== */

form { margin: 0; }
fieldset { border: 0; margin: 0; padding: 0; }

/**
* You might tweak these..
/*
* 1. Correct color not inheriting in IE6/7/8/9
* 2. Correct alignment displayed oddly in IE6/7
*/

body, select, input, textarea {
/* #444 looks better than black: twitter.com/H_FJ/statuses/11800719859 */
color: #444;
/* Set your base font here, to apply evenly */
/* font-family: Georgia, serif; */
}
legend { border: 0; *margin-left: -7px; padding: 0; }

/* These selection declarations have to be separate
No text-shadow: twitter.com/miketaylr/status/12228805301
Also: hot pink! */
::-moz-selection { background: #fe57a1; color:#fff; text-shadow: none; }
::selection { background:#fe57a1; color:#fff; text-shadow: none; }
a:link { -webkit-tap-highlight-color: #FF5E99; } /* j.mp/webkit-tap-highlight-color */
/*
* 1. Correct font-size not inheriting in all browsers
* 2. Remove margins in FF3/4 S5 Chrome
* 3. Define consistent vertical alignment display in all browsers
*/

button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }

/**
* Primary styles
*
* Author:
/*
* 1. Define line-height as normal to match FF3/4 (set using !important in the UA stylesheet)
* 2. Correct inner spacing displayed oddly in IE6/7
*/

button, input { line-height: normal; *overflow: visible; }

/*
* 1. Display hand cursor for clickable form elements
* 2. Allow styling of clickable form elements in iOS
*/

button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; }

/*
* Consistent box sizing and appearance
*/

input[type="checkbox"], input[type="radio"] { box-sizing: border-box; }

input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }
input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }

/*
* Remove inner padding and border in FF3/4
* www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/
*/

button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }

/* Remove default vertical scrollbar in IE6/7/8/9 */
textarea { overflow: auto; vertical-align: top; }

/* Colors for form validity */
input:valid, textarea:valid { }
input:invalid, textarea:invalid { background-color: #f0dddd; }

This comment has been minimized.

Copy link
@anselmh

anselmh Jun 21, 2011

Contributor

Is there a specific logic for that order? I would order by elements here. So all input, all button attributes together, right?


/* =============================================================================
Tables
========================================================================== */

table { border-collapse: collapse; border-spacing: 0; }


/* =============================================================================
Primary styles
Author:
========================================================================== */







/**
* Non-semantic helper classes: please define your styles before this section.
*/









/* =============================================================================
Non-semantic helper classes
Please define your styles before this section.
========================================================================== */

/* For image replacement */
.ir { display: block; text-indent: -999em; overflow: hidden; background-repeat: no-repeat; text-align: left; direction: ltr; }
Expand All @@ -188,25 +218,25 @@ a:link { -webkit-tap-highlight-color: #FF5E99; } /* j.mp/webkit-tap-highlight-co
/* Hide only visually, but have it available for screenreaders: by Jon Neal.
www.webaim.org/techniques/css/invisiblecontent/ & j.mp/visuallyhidden */
.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }

/* Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: drupal.org/node/897638 */
.visuallyhidden.focusable:active,
.visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }

/* Hide visually and from screenreaders, but maintain layout */
.invisible { visibility: hidden; }

/* The Magnificent Clearfix: Updated to prevent margin-collapsing on child elements in most situations.
nicolasgallagher.com/micro-clearfix-hack/ */
/* Contain floats: nicolasgallagher.com/micro-clearfix-hack/ */
.clearfix:before, .clearfix:after { content: ""; display: table; }
.clearfix:after { clear: both; }
.clearfix { zoom: 1; }



/**
* Placeholder media queries for responsive design. Modify as design requires.
* These follow after, and will override, the primary ('mobile first') styles
*/
/* =============================================================================
PLACEHOLDER Media Queries for Responsive Design.
These override the primary ('mobile first') styles
Modify as content requires.
========================================================================== */

@media only screen and (min-width: 480px) {
/* Style adjustments for viewports 480px and over go here */
Expand All @@ -220,23 +250,22 @@ a:link { -webkit-tap-highlight-color: #FF5E99; } /* j.mp/webkit-tap-highlight-co



/**
* Print styles.
*
* Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/
*/
/* =============================================================================
Print styles.
Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/
========================================================================== */

@media print {
* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important;
-ms-filter: none !important; } /* Black prints faster: sanbeiji.com/archives/953 */
a, a:visited { color: #444 !important; text-decoration: underline; }
a[href]:after { content: " (" attr(href) ")"; }
abbr[title]:after { content: " (" attr(title) ")"; }
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } /* Don't show links for images, or javascript/internal links */
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
thead { display: table-header-group; } /* css-discuss.incutio.com/wiki/Printing_Tables */
tr, img { page-break-inside: avoid; }
img { max-width: 100% !important; }
@page { margin: 0.5cm; }
p, h2, h3 { orphans: 3; widows: 3; }
h2, h3 { page-break-after: avoid; }
* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: sanbeiji.com/archives/953 */
a, a:visited { color: #444 !important; text-decoration: underline; }
a[href]:after { content: " (" attr(href) ")"; }
abbr[title]:after { content: " (" attr(title) ")"; }
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } /* Don't show links for images, or javascript/internal links */
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
thead { display: table-header-group; } /* css-discuss.incutio.com/wiki/Printing_Tables */
tr, img { page-break-inside: avoid; }
img { max-width: 100% !important; }
@page { margin: 0.5cm; }
p, h2, h3 { orphans: 3; widows: 3; }
h2, h3{ page-break-after: avoid; }
}

8 comments on commit ddaf66a

@seedprod
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How do you set fonts sizes with the new css, still use %'s in this table http://developer.yahoo.com/yui/fonts/ ?

@paulmist
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Solid work! I'd also like to get an answer to johnnytee's question though. Please, and thank you.

@necolas
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@blackfalcon The base CSS can't be dependent on conditional classnames or modernizr classes because H5BP can be downloaded and without those components.

@johnnytee @paulmist You can still use that table as a guide when setting % or em unit font-sizes because the base font size has not been altered in this update.

@seedprod
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@necolas thx for the reply, good to know :)

@jeef3
Copy link

@jeef3 jeef3 commented on ddaf66a Jun 22, 2011

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Like! I've seen a few reset CSS's and use them reluctantly where normalisation was all I actually wanted. Nice work!

@viveleroi
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's a basic example of how many common elements look - one file using the previous raw boilerplate css and one using the this commits: http://experiments.botsko.net/tests/html5-boilerplate-css/

@arxpoetica
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Total fan of this approach. Much more modular/cascading/simple.

@AHenderson
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reset was bloating the CSS, but I liked not having to think about zeroing out margins on elements like headings and paragraphs.

Please sign in to comment.