Some notes HTML & CSS lessons from here
- Basic HTML & CSS refresher
- Lessons
- 1. Introduction
- 2. Basic HTML
- 3. Basic CSS
- 4. The box model
- 5. Positioning content
- positioning with floats
- floating in practice
- clearing & containing floats
- clearing floats
- containing floats (clearfix)
- keep track of float and always clear/contain them
- positioning with inline-block
- inline block vs spaces
- creating a reusable layout
- uniquely positioning elements
position: relative
position: absolute
- 6. Typography
- 7. Backgrounds
- 8. Lists
- 9. Adding Media
- 10. Forms
- 11. Tables
- 12. Best Practices
- element:
a
- tag:
<a>..</a>
- attribute: e.g. href
<a href="http://shayhowe.com/">Shay Howe</a>
<br> <embed> <hr> <img> <input> <link> <meta> <param> <source> <wbr>
<!DOCTYPE html>
<html lang="en">
<head></head>
<body></body>
</html>
do it
- selector:
p
(type selector),.class
,#id
- property:
p { font-size: ...; }
- value:
p { font-size: 16px; }
preferably single file, in head
<head>
<link rel="stylesheet" href="main.css">
</head>
- reset browser defaults
- has to come at the top of your CSS file
- popular: Eric Meyer’s reset
- Normalize.css - more advanced
- read this post
- screen readers, seo, shorter code, easier styling
- block-level elements begin on a new line
- stacking one on top of the other
- occupy any available width
- may be nested inside one another and may wrap inline-level elements
- larger pieces of content, such as paragraphs
- inline-level elements do not begin on a new line
- they fall into the normal flow of a document, lining up one after the other
- only maintain the width of their content
- inline-level elements may be nested inside one another
- however, they cannot wrap block-level elements
- smaller pieces of content, such as a few words
- solely for styling, no semantic value
- with class or id for layout, styling
- class or id value should not conatin styling references but meaning (e.g orange vs social)
div
block element, large groupings of contentspan
inline element, smaller groupings of text- HTML comments start with
<!-- and end with -->
- CSS comments start with
/* and end with */
- block-level elements
- six different rankings,
<h1>
through<h6>
- break up content and establish hierarchy
- not to increase font size (your CSS reset prevents that anyways)
- block level
- pretty self explanatory
<strong>
- strong importance<b>
- stylistically offset<em>
- italicise text, thereby placing emphasis on it
div
s have no semantic value, but HTML introduces structural elements<header>
,<nav>
,<article>
,<section>
,<aside>
, and<footer>
- header - structural element, outlines the heading of a segment of a page
- header could include a heading, introductory text, maybe even nav
- head - not displayed on a page, outlines metadata
- h1-h6 - multiple levels of text heading throughout the page
- div - solely styling, no value to the outline of the document
- article - content could stand on it's own, can be redistributed independently
- section - thematic grouping of content
- begin with an ampersand
&
and end with a semicolon;
- name or numeric code between
- copypastecharacter.com
a
- anchor, link from one web page or resource to another- inline element - but the only one which can wrap a block element (HTML5)
- href (hyperlink reference) attribute, required, specifies destination
- relative path vs absolute urls
- mailto: links, with subject, body, cc
target="_blank"
opens link a new window- link to part of the same page: id attribute on element, then
<a>
withhref=id-value
- styles cascade from the top of a style sheet to the bottom
- styles are added or overwritten, latter takes precedence
- calculated using specificity point values
- id selectors - class selectors - type selectors
- type selector: lowest 0-0-1
- class selector: medium 0-1-0
- id selector: highest 1-0-0
- three columns for selector counts
- higher specificity wins even if it appears earlier in the stylesheet
- multiple selectors can be specified
- key selector - rightmost, straight before the
{
- prequalifiers - all the other left to the key selector
- no space between selectors - e.g type.class not best practice (type element with class) - just use class
- specificity weights added up per selector type
- use multiple classes (space separated in HTML)
- helps keeping specificity weights low
- defined in the sRGB color space
- 4 ways to represent them: keywords, hexadecimal, RGB and HSL
- keywords mapped to rgb values (e.g.
black
isrgb(0, 0, 0)
) - hexa: six character notation - 2 chars for r, g, b respectively, 0 black, f white
- Adobe Kuler
- rgb() function: with 3 params 0-255, 0 black, 255 white
- rgba() function: rgb + alpha 0-1 with decimal, 0 transparent, 1 opaque
- hexa was really popular, now rgba gaining popularity
- hsl() function: 3 params, not all browsers support it
- hue: 0-360, color wheel degree
- saturation: 0-100%, 0 greyscale, 100 fully saturated
- lightness: 0-100%, 0 black, 100 white
- hsla() function: HSL + alpha
- absolute or relative with different units
- pixels:
px
, absolute, 96 pixels in an inch but exact measurement may vary - relative: rely on the length of another measurement
- percentages:
%
, relative, defined in relation to the length of another object, e.g. parent element em
: calculated based on an element’s font size, 1 em = element's font size pixels- when a font size is not explicitly stated for an element, the
em
unit will be relative to the font size of the closest parent element with a stated font size
- determines how elements are displayed (block, inline and more)
- every element has a default display property value which can be overwritten
- common values are block, inline, inline-block, and none
inline-block
: allow an element to behave as a block-level element (accepting all box model properties) but displayed inline with other elementsnone
completely hides an element and render the page as if that element and nested elements doesn’t exist
- every element on a page is a rectangular box and may have width, height, padding, borders, and margins
- the core of the box is defined by the width and height of an element
- the width and height of an element may be determined by the display property, by the contents of the element, or by specified width and height properties
- padding and then border expand the dimensions of the box outward from the element’s width and height.
- any margin we have specified will follow the border.
- each part of the box model corresponds to a CSS property: width, height, padding, border, and margin.
- total width = margin-right + border-right + padding-right + width + padding-left + border-left + margin-left
- total height = margin-top + border-top + padding-top + height + padding-bottom + border-bottom + margin-bottom
- every element has default width and height (might be 0px)
width
andheight
may be specified - but only for non-inline elements- block width: block-level elements have a default width of 100%, consuming the entire horizontal space available
- inline width: inline and inline-block elements expand and contract horizontally to accommodate their content
- height: all elements expand and contract vertically to accommodate their content
- inline-level elements cannot have a fixed size, (no width and height is accepted)
- browsers have their own default margin and padding
- a CSS reset tones the default down to zero and build up our own margin and padding
margin
: set the amount of space that surrounds an element- the margin outside of any border and are completely transparent in color
- vertical margins, top and bottom, are not accepted by inline-level elements
- margins work like normal for block and inline-block elements
- provide spacing directly within an element
- falls inside of an element’s border
- padding works vertically on inline-level elements
- inline vertical padding may blend into the line above or below the given element
- padding works like normal for block and inline-block elements
- shorthand with 1 value: setting it on all four sides
- shorthand with 2 values: top and bottom first, then left and right
- shorthand with 4 values: top, right, bottom, and left, moving clockwise
- longhand: e.g margin-top, padding-left
- use longhand for 1 or 2 values
- use shorthand for 3 or more
- they are completely transparent and don't accept any color values
- they show the background colors of relative elements (since they're transparent)
- margins - background color of the parent element
- padding - background color of the element the padding is applied to
- fall between the padding and margin, outline around the element
- has width, style, and color (shorthand order or border-width, etc)
- width, color: standard length and color values
- style: solid, double, dashed, dotted, and none
- individual borders and properties can also be specified: border-top, border-left-width
- enables rounded corners
- accepts length units: radius by which the corners of an element are to be rounded
- one value shorthand: all corners
- two values shorthand: top-left/bottom-right and top-right/bottom-left
- four values shorthand: clockwise, starting from top-left
- longhand: e.g border-top-right-radius
- additive by default
- CSS3 introduces
box-sizing
- values: content-box, padding-box, and border-box
- content-box: actual width, height: element width, any margin, padding border added on top
- padding-box: actual width, height: element width + padding (width 400 + 20 padding will be 400 px wide)
- border-box: actual width, height: element width + padding + border (width 400 + 20 padding + 5 px border will be 400 px wide)
- use border-box to make maths simpler (also helps when mixing percentages with px)
- drawback of using box-sizing: older browser don't support it
- browsers gradually began to support different CSS3 properties and values by the way of vendor prefixes (e.g
-webkit-box-sizing
) - as parts of the CSS3 specification are finalized and new browser versions are released, these vendor prefixes become less and less relevant
- Mozilla Firefox: -moz-
- Microsoft Internet Explorer: -ms-
- Webkit (Google Chrome and Apple Safari): -webkit-
- Chrome: Alt+Cmd+I
- universal selector: * - catch-all to select all elements
- :before and :after pseudo-elements: dynamically generated with CSS
- the float property allows us to take an element, remove it from the normal flow of a page
- and position it to the left or right of its parent element
- all other elements on the page will then flow around the floated element
- used on multiple elements: creating a layout by floating elements directly next to or opposite each other
- multi-column layouts can be created
- common float values are:
left
andright
- floated elements will float all the way to the edge of its parent element
- no parent: floated element floats to the edge of the page
- floated element width defaults to the width of the content within it
- use the
width
property to specify width - use
margin
to prevent elements touching each other - floated inline elements change their display value to block and accept width, height
- floats have pitfalls, originally for wrapping content around images and not layout
- styles next to a parent of a floated element might break
- margin and padding can blend into a floated element
- unwanted content can wrap around floated content
- to prevent unwanted content from wrapping around floated elements, we need to clear, or contain, those floats
- clearing floats returns the page to its normal flow
clear
property, values:left
,right
,both
- left clear left floats, right clear right floats, both clears both sides
- clear property applied on an element after floated elements to return the page to it's normal flow
- effects similar to clearing (return to normal flow) but also makes sure styles are rendered correctly
- to contain floats, the floated elements must have a parent (container)
- the flow of the document will remain unaffected outside of the container
- containing everything within element with class
group
:
.group:before,
.group:after {
content: "";
display: table;
}
.group:after {
clear: both;
}
.group {
clear: both;
*zoom: 1;
}
- :before and :after pseudo-elements
- dynamically generated elements above and below the element with the class of group
- with no content but styles to clear floats
- also known as clearfix but the class group better represents the content
display: inline-block
: placing elements next to one another within a line- but also accepts width, height, padding, border, margin (as opposed to inline)
- taking full advantage of the box model without having to worry about clearing any floats
- inline-block elements are displayed on the same line, they also include a single space between them
- low tech, simple solution: no space between start and end tags
- another low tech solution: s tart HTML comment after end tag, close comment before start tag
- best to write modular styles that may be reused elsewhere
- floats vs inline-block is open to debate
- one approach: inline-block elements to create the grid—or layout—of
- and float to wrap around content (as originally intended)
- new CSS specs: watch out for
flex-
andgrid-
based properties—that
- precisely positioning elements: floats or inline-block might not do the job
- typically, most positioning can be handled without this
- can use the
position
property with box offset properties - position: how an element is positioned on a page, if it appears in the normal flow of the document
- box offset properties moving elements to
top right bottom
orleft
- default position value is
static
static
means the element appears in the normal flow and doesn't accept box offset properties- other position values are: relative and absolute
- element appears within the normal flow a page
- leaving space for an element as intended
- also allows an element’s display position to be modified with the box offset properties
- box offset properties identify where an element will be moved from given its original position
- e.g. left: 20px - pushes element to the right by 20px
- element does not appear within the normal flow a page
- original space and position of the element is not preserved
- elements are moved in relation to their closest relatively positioned parent element
- should a relatively positioned parent element not exist, the element will be positioned in relation to the element
- embedded fonts allow using any font you like but important to learn about typography
- typeface is what we see, how text looks, feels, and reads, the artistic value
- font: the file containing a typeface, method of delivering artistic value
color
property- add it to body element to set the color for all text on the page
- which font to use
- comma separated font names, left to right fallback
- font names with multiple word to be wrapped in double quotes
- last font should be a keyword, system default font for e.g. either
sans-serif
orserif
- can be set using common length values
- normal, italic, oblique, and inherit
- normal, small-caps, and inherit
- how bold is our text
- keyword values: normal, bold, bolder, lighter, and inherit
- or numeric values: 100, 200, ... 900 (from thinnest to thickest)
- normal = 400, bold = 700
- check that the font comes with a specific weight before using a value, otherwise falls back to closest
- the distance between two lines of text (leading)
- typically just set it to 1.5 times font-size, using value 1.5 or 150%
- or if using a baseline grid might want to specify in pixels
- may also be used to vertically center text within an element (buttons, alerts, other single line text)
font: font-style font-variant font-weight font-size/line-height font-family, font-family
- everything optional apart from font-size and font-family
- pseudo-selector
- maybe added at the end of a selector to style when an element is in a specific state
:hover
pseudo-class styles an element when a user hovers over that
- five values: left, right, center, justify, and inherit
- none, underline, overline, line-through, and inherit
- multiple values may be specified with space separation
- indent first line of text
- accepts length values
- positive value indents inwards, negative outwards
- params: the shadow’s horizontal offset, vertical offset, blur radius, color (opacity as well, e.g rgba)
- positive offsets right and bottom, negative offsets left and top
- multiple shadow can be specified as comma separated
box-shadow
accepts same values plus optional fourth length: spread, + optional first value: inset
- changes text inline without the need for typeface variant (not like font-variant)
- values: none, capitalize, uppercase, lowercase, and inherit
- capitalize makes first letter uppercase
- adjust the space (or tracking) between the letters on the page
- positive - further apart, negative - closer
- use relative value to ensure it works across different font sizes
- spacing between words
- few fonts pre-installed on every device
- Arial
- Courier New, Courier
- Garamond
- Georgia
- Lucida Sans, Lucida Grande, Lucida
- Palatino Linotype
- Tahoma
- Times New Roman, Times
- Trebuchet
- Verdana
- upload fonts to a server (check font lincence!)
- include them on a website via the CSS
@font-face
at-rule - surround embedded font-family name with quotation marks within any CSS reference
- Google Fonts
@font-face {
font-family: "Lobster";
src: local("Lobster"), url("lobster.woff") format("woff");
}
<cite>
- reference a creative work, author, or resource (typically title, author, URL)<q>
- short, inline quotations, inline<blockquote>
- longer external quotations, block- q, blockquote: the browser will insert the proper quotation marks (it even respects the global lang attribute)
- q, blockquote: optional cite attribute - doesn't change appearance
- blockquote can usually include citation: both cite attrubite and cite element
- Backgrounds can be a solid color, an image, a gradient, or these combined.
background
- shorthand for setting background properties
- background-color: accepts color values (or use background shorthand)
- transparent backgrounds (hsla, rgba) - might not be supported by all browsers, specify two background-color props, a safe fallback color first
- background-image: (or background shorthand) - accepts image source identified by url() function (usual href rules, needs to be quouted)
- a background image repeated indefinitely, both vertically and horizontally to fill up the element (if image is smaller)
background-repeat property
: repeat, repeat-x, repeat-y, and no-repeat
- background images are positioned in the top-left corner by default
background position
: horizontal offset vertical offset- shorthand: use one value and it'll apply both vertically and horizontally
- can also use percentages and
top, right, bottom, left
keywords - 0 0 is the same as top left, 100% 0 is top right, 100% 100% is bottom right
- advantage of percentages: 50% - centering
background:
shorthand: color, image, position, repeat values - space separated
- CSS3, supported by all modern browsers
- most browser no longer require vendor prefixes for this but worth adding them just in case
- linear-gradient() function within the background or background-image property
- linear-gradient() function accepts two values: start and end color, browser takes care of transition
- -webkit-linear-gradient() -moz-linear-gradient()
- always specify a solid fallback color before the gradient (in a separate property)
- also supports direction as first argument (degree (0-360) e.g. 45deg, or keyword e.g.
to right bottom
)
- radial-gradient() function
- from inside to outside of an element
- paramaters include location, size, radius, and so on
- there are a number of CSS3 gradient generators to help out
- gradient functions are like varargs
- multiple colors comma separeted at the end
- by default color stops are at equal distance but it can also be specified: color distance-in-percentage, next-color distance
- since CSS3 background or background-image accepts multiple comma separated bacgkround images
- first image comes foremost, last in the background
background-size
property - accepts two lengthsauto
keyword value for one of the parameters to keep aspect ratio- percentage values are in relation to the element's size and not the image
cover
keyword value: resize background image to cover element (might be cut off)- ``contain` keyword value: resize to fit into the element (might not occupy the full element)
background-clip
- surface area a background image will coverbackground-origin
- where the background-position should originate- border-box, padding-box, and content-box keyword values may be used for both of these
- background-clip: border-box by default, background image can extend into any border
- background-origin: padding-box by default, beginning of a background image can extend into the padding
HTML has 3 types of lists: unordered, ordered, and description lists
<ul>
unordered list block-level element<li>
list items- by default most browsers add a solid dot list item marker and margin and padding
<ol>
ordered list element- works pretty much similarly to
<ul>
but order matters - by default most browser use numbers as list item markers
start
attribute on<ol>
element tells where to start counting from (e.g paginated list)start
attribute only accepts integersreversed
boolean attribute (no value required, present=true) tells if the numbers should be in reverse ordervalue
attribute on an individual<li>
within an<ol>
changes its value within the list- any item appearing after the one with the value is calculated accordingly
- description lists are used to outline multiple terms and their descriptions (e.g. glossary)
- description list block-level element,
<dl>
- an item consists of one or more description terms
<dt>
followed by one or more descriptions<dd>
- in most browsers by default, the
- element will include vertical margins and the
- element includes a left margin
- always start the new list within an li and should be fine
- the
list-style-type
property sets the content of a list item marker - can change both unordedered and ordered list to anything you like
- common values: none, disc, circle, square, decimal, decimal-leading-zero, lower-roman, upper-roman, lower-greek, lower-alpha / lower-latin, upper-alpha / upper-latin
- set list-style-type to none
- add small backround image (0 50% no-repeat)
- add padding-left to push content right
- list-style-position property can have values: inside, outside, inherit
- default is outside - no content is wrapped around the marked
- list-style-type followed by list-style-position - space separated
- make
<li>
s inline-block - marker is automatically set to none
- single spaces can be removed by adding comment between lis
- inline-block is better than inline as allows specifying margins, paddings
- changing to inline-block or inline removes the marker
- floating keeps to marker
- need to add margin or padding to prevent markers overlapping content
- always clear or contain floats
<img>
inline element- img element is a self-containing or empty element, single, doesn't wrap around any content
- src attribute and value must exist with a valid URL
- alt (alternative text) attribute, which describes the contents of an image
- alt text is picked up by search engines, assistive technologies and also displayed if the image can't be
- most commonly supported formats are gif, jpg, and png
- jpg format provides quality images with high color counts but still decent file size (e.g photos)
- png format is great for images with transparencies or low color counts (e.g. icons)
- important to tell the browser the size of the image evene before it's loaded - so it can reserve space for it and render faster
- img tag accepts width and height attributes in HTML
- CSS width and height overrides inline width and height
- setting only width or height automatically adjusts the image size preserving aspect ratio
- setting both works as well, might distort the image
- setting width and height in HTML might have some semantic value but images usually resized in CSS
- by default appears in the same line as the content surrounding it (inline)
- increases the height of the line it appears to match image height
- when set to
display: block
then in it;s own line (as usual) - or flush left or right (by floating - it's original purpose)
- usually need margin around a floated image (can also create a frame with background, padding)
- use
<img>
if image holds semantic value and relevant to the content of the page - use background image when image is part of design or UI and not directly relevant
- src attribute sepcifying source URL
- requires a closing tag
- several other attributes like autoplay, controls, loop (all boolean, no value just key required, attribute names self-explanatory)
- if controls attribute is not present nothing is displayed
- preload attribute - values: none, auto (default, all data preloaded), metadata (any metadata, e.g length)
- different browsers support different formats
- we can get rid of the src attribute and wrap a number of
<source>
elements with an audio tag - source element have
src
andtype
(e.g. audio/ogg, audio/mpeg) attributes - browser picks the one it recognizes
- as last fallback arbitrary HTML can be added
- media.io, mirovideoconverter for conversion
- pretty similar to audio but with the video element
- same src, autoplay, controls, loop, preload and fallback mechanism
- displayed, even if controls is not present
- size to be specified in CSS (using width and height properties)
- poster attribute accepts an image URL to be shown before the video is played
- an additional fallback option miht be a Youtube or Vimeo iframe
- by default controls are browser specific
- custom look and feel can be added with javascript
- embedding another HTML page in the current one
- iframe element, src attribute specifies the URL, may be relative to current page
- iframe contents don't inherit styles from the page including them
- links are opened within the frame
seamless
boolean attribute changes above behaviour (but not supported by older browsers)
<figure>
, block-level, identify and wrap self-contained content, often media- may surround image, video, etc, or multiple of those (if they form a group)
- if the figure element is moved it shouldn't disrupt the content of the page
<figcaption>
element adds caption within a figure element- may appear before or after media, or anywhere within figure but only once
- serves as caption for all content within the figure element
- may also be used to replace img elements alt attribute
- forms aquire user input
- different elements are used to capture different types of data
<form>
element wraps all the elements included in the formaction
attribute: URL where the form should be sent tomethod
attribute: HTTP method used for submitting the form
<input>
element withtype
attribute valuetext
name
attribute is used as the name of the control and also sent to the server- input element is self contained
- originally the only type attribute values were text and password
- HTML5 adds the following for semantic clarity: color, date, datetime, email, month, number, range, search, tel, time, url, week
- iOS might make user input for some of these easier
<textarea>
element, capture multiline text input- no
type
attribute as it only supports text name
attribute is similar to input element- two sizing attributes (
cols
androws
) but use CSS width and height instead
- allow user to make quick choice from a small list of options
- only one option can be choosen
<input>
element withtype="radio"
value
attribute specifies to value sent to the servername
attribute should be the same for all checkboxes in a groupchecked
boolean atrribute can be used to pre-select an option- input is still self-closing, value seen by user is outside it:
<input type="radio" name="day" value="Friday" checked> Friday
- really similar to radio buttons, but
- allows multiple choice, all values are sent to the server
<input>
withtype="checkbox"
- when you have a longer list of options
- a
<select>
element wraps all of the options marked up by<option>
elements - the
name
attribute is on the select element - the
value
attribute is on the option element - the option element wraps the user visible text
- selected boolean attribute marks the selected options
- boolean attribute
multiple
on select element allows multiple selection - size of select element can be controlled via CSS
- submit button can be added using input with
type="submit"
- value attribute specifies button text
- submit input is self contained, can't wrap more content
- button element performs the same but not self-closing like input
- can wrap button text (no value attrubite needed)
hidden input
- input with
"type="hidden"
is not shown on the page but still submitted - can obviously still be viewed in page source, so not for secure stuff
- input with
"type="file"
can be used to attach files to a form - each browser comes with default styles for this, which can't be overriden CSS, JS help here
- provide caption or headings for from controls
- using
<label>
element withfor
attribute matching theid
attribute of the form element - clicking the label brings the linked form element into focus
- label may also wrap input elements and in this case the
for
andid
atrributes may be omitted
- group related form controls and label by wrapping them with
<fieldset>
- block level element, default CSS has a border
<legend>
element provides caption or heading forfieldset
element- should be the first element after the opening
fieldset
tag - appears on the top left of the fieldset border
- turns of element of control so that it's not interactive and values are not sent to the server
- can be applied to input or fieldset (form?)
- if input has type hidden and the disabled attribute as well then hidden is ignored
- HTML 5 attribute, provides hint
- disappears as soon as the control is clicked or gains focus (hence different from
value
) value
for prepopulating data andplaceholder
for suggestions
- boolean attribute introduced in HTML5
- enforces that form control contains a value before submitting
- error message is shown if no value but currently the browsers control the error message styling
- invalid elements and form controls can be styled using
:optional
and:required
pseudo classes - validation also respect input types (e.g.
type="email"
should be a valid email)
accept autocomplete autofocus formaction formenctype formmethod formnovalidate formtarget max maxlength min pattern readonly selectionDirection step
- to mark up structured, tabular data
- was abused back when didn't all support CSS
- table content is wrapped in a
<table>
element - a table may contain many rows that are marked up with the
<tr>
element - table cells are added into rows using the
<td>
element
- using the
<th>
element instead of td marks a cell as a table header - table header adds semantic value to the content
scope
atribute on a th specifies the what the header relates to- potential scope values are
col
,row
,colgroup
, androwgroup
- the headers attribute may be used to associate a cell to a header
- above is done by specifying the linked
<th>
's id attribute in the cell's (td or th) headers attribute
- provides a title for the table using the
<caption>
element - the caption element has to be the first element after the opening table tag
- content of a table maybe broken to groups: head, body and foot
<thead>
element wraps the heading row(s) of the table and comes after any caption and before any tbody elements<tbody>
element wraps the primary data rows<tfoot>
element wraps the rows outlining the table- before HTML5 tfoot had to come directly after thead
- td or th can have a
colspan
orrowspan
attribute - colspan specifies how many columns the cell should span across (default is one)
- rowspan is the same as colspan but for rows
- adding border to table-cell can cause borders stacking up (on the inside)
border-collapse
property for tables have 3 values: collapse, separate, and inherit- collapse collapses/condenses the borders to one border, separate stack them up against each other
- when using
border-collapse: separate
(or wasn't defined) you can specify the space between borders - use this instead of a margin to avoid more space between cells than on the sides
- accepts a length value and separates borders by that length
- when two lengths are specified the first is horizontal, second is vertical spacing
- make sure border-collapse is collapse
- add border bottom to th and tr
- set no border to
th:last-child
- use
tr:nth-child(even)
to set color - make sure
border-collapse: separate;
andborder-spacing: 0;
is set on the table to avoid issue because td includes a border by default but th doesn't - only set right and bottom borders since border-collapse is separate
td:first-child
gets a left border
- moving text around horizontally -
text-align
property as seen in typography - moving text around vertically -
vertical-align
property vertical-align
only works on display inline and table-cell elements- most used
vertical-align
values aretop
,middle
, andbottom
vertical-align
positions text in relation to the table cell, for table-cell elements- or to the closest parent element, for inline-level elements
- Write Standards-Compliant Markup
- Make Use of Semantic Elements
- Use the Proper Document Structure - html, head, body
- Keep the Syntax Organized
- Use lowercase letters within element names, attributes, and values
- Indent nested elements
- Strictly use double quotes, not single or completely omitted quotes
- Remove the forward slash at the end of self-closing elements
- Omit the values on Boolean attributes
- Use Practical ID & Class Values (with no reference to styling)
- Use the Alternative Text Attribute on Images (unless they're of no relevalnce to the content, then use background images)
- Separate Content from Style (no inline styles ever)
- Avoid a Case of “Divitis” (use HTML5 structural elements and keep the number of elements to the minimum anyways)
- Continually Refactor Code
- Organize Code with Comments (maybe even TOC at the top of the file)
- Write CSS Using Multiple Lines & Spaces (readibilty, version control)
- Use Proper Class Names (modular, semantic, all lowercase with hyphens)
- Build Proficient Selectors (low specificity, no ids)
- Use Specific Classes When Necessary (instead of lot of nested selectors)
- Use Shorthand Properties & Values (unless setting only one property)
- Use Shorthand Hexadecimal Color Values (and lowercase characters)
- Drop Units from Zero Values
- Group & Align Vendor Prefixes (and place an unprefixed version of our property and value last)
- Modularize Styles for Reuse
- Mozilla Developer Network
- Opera.Dev
- HMTL5 doctor
- DevDocs - instant docs search
- Pears - common patterns of markup and style
- HTML Dog
- WTF HMTL CSS
- Web Style Guide
- Bootstrap
- Foundation
- Skeleton Framework
- Google HTML/CSS Style Guide
- GitHub Styleguide
- Google Web Fundamentals