CSSNotesForProfessionals 1 100
CSSNotesForProfessionals 1 100
CSS
Notes for Professionals
200+ pages
of professional hints and tricks
Disclaimer
GoalKicker.com This is an unocial free book created for educational purposes and is
not aliated with ocial CSS group(s) or company(s).
Free Programming Books All trademarks and registered trademarks are
the property of their respective owners
Contents
About ................................................................................................................................................................................... 1
Chapter 1: Getting started with CSS .................................................................................................................... 2
Section 1.1: External Stylesheet ..................................................................................................................................... 2
Section 1.2: Internal Styles ............................................................................................................................................ 3
Section 1.3: CSS @import rule (one of CSS at-rule) ................................................................................................... 4
Section 1.4: Inline Styles ................................................................................................................................................. 4
Section 1.5: Changing CSS with JavaScript ................................................................................................................. 4
Section 1.6: Styling Lists with CSS ................................................................................................................................. 5
Chapter 2: Structure and Formatting of a CSS Rule .................................................................................. 7
Section 2.1: Property Lists ............................................................................................................................................. 7
Section 2.2: Multiple Selectors ...................................................................................................................................... 7
Section 2.3: Rules, Selectors, and Declaration Blocks ............................................................................................... 7
Chapter 3: Comments ................................................................................................................................................. 8
Section 3.1: Single Line ................................................................................................................................................... 8
Section 3.2: Multiple Line ............................................................................................................................................... 8
Chapter 4: Selectors ................................................................................................................................................... 9
Section 4.1: Basic selectors ........................................................................................................................................... 9
Section 4.2: Attribute Selectors .................................................................................................................................... 9
Section 4.3: Combinators ............................................................................................................................................ 12
Section 4.4: Pseudo-classes ....................................................................................................................................... 13
Section 4.5: Child Pseudo Class ................................................................................................................................. 15
Section 4.6: Class Name Selectors ............................................................................................................................ 16
Section 4.7: Select element using its ID without the high specificity of the ID selector ....................................... 17
Section 4.8: The :last-of-type selector ...................................................................................................................... 17
Section 4.9: CSS3 :in-range selector example .......................................................................................................... 17
Section 4.10: A. The :not pseudo-class example & B. :focus-within CSS pseudo-class ......................................... 18
Section 4.11: Global boolean with checkbox:checked and ~ (general sibling combinator) .................................. 19
Section 4.12: ID selectors ............................................................................................................................................ 20
Section 4.13: How to style a Range input .................................................................................................................. 21
Section 4.14: The :only-child pseudo-class selector example ................................................................................. 21
Chapter 5: Backgrounds ......................................................................................................................................... 22
Section 5.1: Background Color ................................................................................................................................... 22
Section 5.2: Background Gradients ........................................................................................................................... 24
Section 5.3: Background Image ................................................................................................................................. 25
Section 5.4: Background Shorthand .......................................................................................................................... 26
Section 5.5: Background Size ..................................................................................................................................... 27
Section 5.6: Background Position .............................................................................................................................. 31
Section 5.7: The background-origin property .......................................................................................................... 32
Section 5.8: Multiple Background Image .................................................................................................................. 34
Section 5.9: Background Attachment ....................................................................................................................... 35
Section 5.10: Background Clip .................................................................................................................................... 36
Section 5.11: Background Repeat ............................................................................................................................... 37
Section 5.12: background-blend-mode Property ..................................................................................................... 37
Section 5.13: Background Color with Opacity ........................................................................................................... 38
Chapter 6: Centering ................................................................................................................................................. 39
Section 6.1: Using Flexbox ........................................................................................................................................... 39
Section 6.2: Using CSS transform .............................................................................................................................. 40
Section 6.3: Using margin: 0 auto; ............................................................................................................................. 41
Section 6.4: Using text-align ....................................................................................................................................... 42
Section 6.5: Using position: absolute ......................................................................................................................... 42
Section 6.6: Using calc() ............................................................................................................................................. 43
Section 6.7: Using line-height ..................................................................................................................................... 43
Section 6.8: Vertical align anything with 3 lines of code ......................................................................................... 44
Section 6.9: Centering in relation to another item ................................................................................................... 44
Section 6.10: Ghost element technique (Michał Czernow's hack) ........................................................................... 45
Section 6.11: Centering vertically and horizontally without worrying about height or width ............................... 46
Section 6.12: Vertically align an image inside div ..................................................................................................... 47
Section 6.13: Centering with fixed size ....................................................................................................................... 47
Section 6.14: Vertically align dynamic height elements .......................................................................................... 49
Section 6.15: Horizontal and Vertical centering using table layout ........................................................................ 49
Chapter 7: The Box Model ...................................................................................................................................... 51
Section 7.1: What is the Box Model? .......................................................................................................................... 51
Section 7.2: box-sizing ................................................................................................................................................. 52
Chapter 8: Margins .................................................................................................................................................... 55
Section 8.1: Margin Collapsing .................................................................................................................................... 55
Section 8.2: Apply Margin on a Given Side ............................................................................................................... 57
Section 8.3: Margin property simplification .............................................................................................................. 58
Section 8.4: Horizontally center elements on a page using margin ...................................................................... 58
Section 8.5: Example 1: ................................................................................................................................................ 59
Section 8.6: Negative margins ................................................................................................................................... 59
Chapter 9: Padding .................................................................................................................................................... 61
Section 9.1: Padding Shorthand ................................................................................................................................. 61
Section 9.2: Padding on a given side ........................................................................................................................ 62
Chapter 10: Border ..................................................................................................................................................... 63
Section 10.1: border-radius ......................................................................................................................................... 63
Section 10.2: border-style ........................................................................................................................................... 64
Section 10.3: Multiple Borders .................................................................................................................................... 65
Section 10.4: border (shorthands) ............................................................................................................................. 66
Section 10.5: border-collapse ..................................................................................................................................... 66
Section 10.6: border-image ........................................................................................................................................ 67
Section 10.7: Creating a multi-colored border using border-image ...................................................................... 67
Section 10.8: border-[left|right|top|bottom] .............................................................................................................. 68
Chapter 11: Outlines ................................................................................................................................................... 69
Section 11.1: Overview .................................................................................................................................................. 69
Section 11.2: outline-style ............................................................................................................................................ 69
Chapter 12: Overflow ................................................................................................................................................ 71
Section 12.1: overflow-wrap ........................................................................................................................................ 71
Section 12.2: overflow-x and overflow-y ................................................................................................................... 72
Section 12.3: overflow: scroll ....................................................................................................................................... 73
Section 12.4: overflow: visible ..................................................................................................................................... 73
Section 12.5: Block Formatting Context Created with Overflow ............................................................................. 74
Chapter 13: Media Queries ...................................................................................................................................... 76
Section 13.1: Terminology and Structure ................................................................................................................... 76
Section 13.2: Basic Example ........................................................................................................................................ 77
Section 13.3: mediatype .............................................................................................................................................. 77
Section 13.4: Media Queries for Retina and Non Retina Screens ........................................................................... 78
Section 13.5: Width vs Viewport ................................................................................................................................. 79
Section 13.6: Using Media Queries to Target Dierent Screen Sizes ..................................................................... 79
Section 13.7: Use on link tag ....................................................................................................................................... 80
Section 13.8: Media queries and IE8 ........................................................................................................................... 80
Chapter 14: Floats ...................................................................................................................................................... 81
Section 14.1: Float an Image Within Text ................................................................................................................... 81
Section 14.2: clear property ........................................................................................................................................ 82
Section 14.3: Clearfix .................................................................................................................................................... 83
Section 14.4: In-line DIV using float ............................................................................................................................ 84
Section 14.5: Use of overflow property to clear floats ............................................................................................ 86
Section 14.6: Simple Two Fixed-Width Column Layout ............................................................................................ 86
Section 14.7: Simple Three Fixed-Width Column Layout ......................................................................................... 87
Section 14.8: Two-Column Lazy/Greedy Layout ...................................................................................................... 88
Chapter 15: Typography ......................................................................................................................................... 89
Section 15.1: The Font Shorthand ............................................................................................................................... 89
Section 15.2: Quotes .................................................................................................................................................... 90
Section 15.3: Font Size ................................................................................................................................................. 90
Section 15.4: Text Direction ......................................................................................................................................... 90
Section 15.5: Font Stacks ............................................................................................................................................ 91
Section 15.6: Text Overflow ......................................................................................................................................... 91
Section 15.7: Text Shadow .......................................................................................................................................... 91
Section 15.8: Text Transform ...................................................................................................................................... 92
Section 15.9: Letter Spacing ........................................................................................................................................ 92
Section 15.10: Text Indent ............................................................................................................................................ 93
Section 15.11: Text Decoration ..................................................................................................................................... 93
Section 15.12: Word Spacing ....................................................................................................................................... 94
Section 15.13: Font Variant .......................................................................................................................................... 94
Chapter 16: Flexible Box Layout (Flexbox) ..................................................................................................... 96
Section 16.1: Dynamic Vertical and Horizontal Centering (align-items, justify-content) ...................................... 96
Section 16.2: Sticky Variable-Height Footer ........................................................................................................... 102
Section 16.3: Optimally fit elements to their container .......................................................................................... 103
Section 16.4: Holy Grail Layout using Flexbox ........................................................................................................ 104
Section 16.5: Perfectly aligned buttons inside cards with flexbox ........................................................................ 105
Section 16.6: Same height on nested containers .................................................................................................... 107
Chapter 17: Cascading and Specificity .......................................................................................................... 109
Section 17.1: Calculating Selector Specificity ........................................................................................................... 109
Section 17.2: The !important declaration ................................................................................................................. 111
Section 17.3: Cascading ............................................................................................................................................. 112
Section 17.4: More complex specificity example .................................................................................................... 113
Chapter 18: Colors .................................................................................................................................................... 115
Section 18.1: currentColor .......................................................................................................................................... 115
Section 18.2: Color Keywords ................................................................................................................................... 116
Section 18.3: Hexadecimal Value ............................................................................................................................. 122
Section 18.4: rgb() Notation ...................................................................................................................................... 122
Section 18.5: rgba() Notation ................................................................................................................................... 123
Section 18.6: hsl() Notation ....................................................................................................................................... 123
Section 18.7: hsla() Notation ..................................................................................................................................... 124
Chapter 19: Opacity ................................................................................................................................................. 126
Section 19.1: Opacity Property .................................................................................................................................. 126
Section 19.2: IE Compatibility for `opacity` .............................................................................................................. 126
Chapter 20: Length Units ...................................................................................................................................... 127
Section 20.1: Creating scalable elements using rems and ems ........................................................................... 127
Section 20.2: Font size with rem .............................................................................................................................. 128
Section 20.3: vmin and vmax ................................................................................................................................... 129
Section 20.4: vh and vw ............................................................................................................................................ 129
Section 20.5: using percent % .................................................................................................................................. 129
Chapter 21: Pseudo-Elements ............................................................................................................................. 131
Section 21.1: Pseudo-Elements ................................................................................................................................. 131
Section 21.2: Pseudo-Elements in Lists .................................................................................................................... 131
Chapter 22: Positioning .......................................................................................................................................... 133
Section 22.1: Overlapping Elements with z-index ................................................................................................... 133
Section 22.2: Absolute Position ................................................................................................................................ 134
Section 22.3: Fixed position ...................................................................................................................................... 135
Section 22.4: Relative Position ................................................................................................................................. 135
Section 22.5: Static positioning ................................................................................................................................ 135
Chapter 23: Layout Control ................................................................................................................................. 137
Section 23.1: The display property ........................................................................................................................... 137
Section 23.2: To get old table structure using div ................................................................................................. 139
Chapter 24: Grid ........................................................................................................................................................ 141
Section 24.1: Basic Example ..................................................................................................................................... 141
Chapter 25: Tables ................................................................................................................................................... 143
Section 25.1: table-layout ......................................................................................................................................... 143
Section 25.2: empty-cells ......................................................................................................................................... 143
Section 25.3: border-collapse .................................................................................................................................. 143
Section 25.4: border-spacing ................................................................................................................................... 144
Section 25.5: caption-side ........................................................................................................................................ 144
Chapter 26: Transitions ......................................................................................................................................... 145
Section 26.1: Transition shorthand ........................................................................................................................... 145
Section 26.2: cubic-bezier ......................................................................................................................................... 145
Section 26.3: Transition (longhand) ........................................................................................................................ 147
Chapter 27: Animations ......................................................................................................................................... 148
Section 27.1: Animations with keyframes ................................................................................................................ 148
Section 27.2: Animations with the transition property .......................................................................................... 149
Section 27.3: Syntax Examples ................................................................................................................................ 150
Section 27.4: Increasing Animation Performance Using the `will-change` Attribute .......................................... 151
Chapter 28: 2D Transforms ................................................................................................................................. 152
Section 28.1: Rotate ................................................................................................................................................... 152
Section 28.2: Scale .................................................................................................................................................... 153
Section 28.3: Skew ..................................................................................................................................................... 153
Section 28.4: Multiple transforms ............................................................................................................................ 153
Section 28.5: Translate ............................................................................................................................................. 154
Section 28.6: Transform Origin ................................................................................................................................ 155
Chapter 29: 3D Transforms ................................................................................................................................. 156
Section 29.1: Compass pointer or needle shape using 3D transforms ................................................................ 156
Section 29.2: 3D text eect with shadow ................................................................................................................ 157
Section 29.3: backface-visibility ............................................................................................................................... 158
Section 29.4: 3D cube ............................................................................................................................................... 159
Chapter 30: Filter Property ................................................................................................................................. 161
Section 30.1: Blur ........................................................................................................................................................ 161
Section 30.2: Drop Shadow (use box-shadow instead if possible) ...................................................................... 161
Section 30.3: Hue Rotate .......................................................................................................................................... 162
Section 30.4: Multiple Filter Values .......................................................................................................................... 162
Section 30.5: Invert Color ......................................................................................................................................... 163
Chapter 31: Cursor Styling .................................................................................................................................... 164
Section 31.1: Changing cursor type .......................................................................................................................... 164
Section 31.2: pointer-events ..................................................................................................................................... 164
Section 31.3: caret-color ............................................................................................................................................ 165
Chapter 32: box-shadow ....................................................................................................................................... 166
Section 32.1: bottom-only drop shadow using a pseudo-element ...................................................................... 166
Section 32.2: drop shadow ....................................................................................................................................... 167
Section 32.3: inner drop shadow ............................................................................................................................. 167
Section 32.4: multiple shadows ................................................................................................................................ 168
Chapter 33: Shapes for Floats ........................................................................................................................... 170
Section 33.1: Shape Outside with Basic Shape – circle() ........................................................................................ 170
Section 33.2: Shape margin ...................................................................................................................................... 171
Chapter 34: List Styles ........................................................................................................................................... 173
Section 34.1: Bullet Position ...................................................................................................................................... 173
Section 34.2: Removing Bullets / Numbers ............................................................................................................ 173
Section 34.3: Type of Bullet or Numbering ............................................................................................................. 173
Chapter 35: Counters .............................................................................................................................................. 175
Section 35.1: Applying roman numerals styling to the counter output ............................................................... 175
Section 35.2: Number each item using CSS Counter ............................................................................................. 175
Section 35.3: Implementing multi-level numbering using CSS counters ............................................................. 176
Chapter 36: Functions ............................................................................................................................................. 178
Section 36.1: calc() function ...................................................................................................................................... 178
Section 36.2: attr() function ...................................................................................................................................... 178
Section 36.3: var() function ...................................................................................................................................... 178
Section 36.4: radial-gradient() function .................................................................................................................. 179
Section 36.5: linear-gradient() function .................................................................................................................. 179
Chapter 37: Custom Properties (Variables) ................................................................................................ 180
Section 37.1: Variable Color ...................................................................................................................................... 180
Section 37.2: Variable Dimensions .......................................................................................................................... 180
Section 37.3: Variable Cascading ............................................................................................................................ 180
Section 37.4: Valid/Invalids ...................................................................................................................................... 181
Section 37.5: With media queries ............................................................................................................................. 182
Chapter 38: Single Element Shapes ................................................................................................................ 184
Section 38.1: Trapezoid ............................................................................................................................................. 184
Section 38.2: Triangles .............................................................................................................................................. 184
Section 38.3: Circles and Ellipses ............................................................................................................................. 187
Section 38.4: Bursts ................................................................................................................................................... 188
Section 38.5: Square ................................................................................................................................................. 190
Section 38.6: Cube ..................................................................................................................................................... 190
Section 38.7: Pyramid ............................................................................................................................................... 191
Chapter 39: Columns ............................................................................................................................................... 193
Section 39.1: Simple Example (column-count) ....................................................................................................... 193
Section 39.2: Column Width ..................................................................................................................................... 193
Chapter 40: Multiple columns ............................................................................................................................ 195
Section 40.1: Create Multiple Columns .................................................................................................................... 195
Section 40.2: Basic example .................................................................................................................................... 195
Chapter 41: Inline-Block Layout ........................................................................................................................ 196
Section 41.1: Justified navigation bar ...................................................................................................................... 196
Chapter 42: Inheritance ........................................................................................................................................ 197
Section 42.1: Automatic inheritance ........................................................................................................................ 197
Section 42.2: Enforced inheritance .......................................................................................................................... 197
Chapter 43: CSS Image Sprites ......................................................................................................................... 198
Section 43.1: A Basic Implementation ...................................................................................................................... 198
Chapter 44: Clipping and Masking .................................................................................................................. 199
Section 44.1: Clipping and Masking: Overview and Dierence ............................................................................. 199
Section 44.2: Simple mask that fades an image from solid to transparent ....................................................... 201
Section 44.3: Clipping (Circle) .................................................................................................................................. 201
Section 44.4: Clipping (Polygon) .............................................................................................................................. 202
Section 44.5: Using masks to cut a hole in the middle of an image .................................................................... 203
Section 44.6: Using masks to create images with irregular shapes .................................................................... 204
Chapter 45: Fragmentation ................................................................................................................................ 206
Section 45.1: Media print page-break ..................................................................................................................... 206
Chapter 46: CSS Object Model (CSSOM) ....................................................................................................... 207
Section 46.1: Adding a background-image rule via the CSSOM ........................................................................... 207
Section 46.2: Introduction ......................................................................................................................................... 207
Chapter 47: Feature Queries .............................................................................................................................. 208
Section 47.1: Basic @supports usage ...................................................................................................................... 208
Section 47.2: Chaining feature detections .............................................................................................................. 208
Chapter 48: Stacking Context ........................................................................................................................... 209
Section 48.1: Stacking Context ................................................................................................................................. 209
Chapter 49: Block Formatting Contexts ....................................................................................................... 212
Section 49.1: Using the overflow property with a value dierent to visible ........................................................ 212
Chapter 50: Vertical Centering .......................................................................................................................... 213
Section 50.1: Centering with display: table .............................................................................................................. 213
Section 50.2: Centering with Flexbox ...................................................................................................................... 213
Section 50.3: Centering with Transform ................................................................................................................. 214
Section 50.4: Centering Text with Line Height ........................................................................................................ 214
Section 50.5: Centering with Position: absolute ..................................................................................................... 214
Section 50.6: Centering with pseudo element ........................................................................................................ 215
Chapter 51: Object Fit and Placement ........................................................................................................... 217
Section 51.1: object-fit ................................................................................................................................................ 217
Chapter 52: CSS design patterns ..................................................................................................................... 220
Section 52.1: BEM ....................................................................................................................................................... 220
Chapter 53: Browser Support & Prefixes ...................................................................................................... 222
Section 53.1: Transitions ............................................................................................................................................ 222
Section 53.2: Transform ........................................................................................................................................... 222
Chapter 54: Normalizing Browser Styles ..................................................................................................... 223
Section 54.1: normalize.css ....................................................................................................................................... 223
Section 54.2: Approaches and Examples ............................................................................................................... 223
Chapter 55: Internet Explorer Hacks .............................................................................................................. 226
Section 55.1: Adding Inline Block support to IE6 and IE7 ....................................................................................... 226
Section 55.2: High Contrast Mode in Internet Explorer 10 and greater ............................................................... 226
Section 55.3: Internet Explorer 6 & Internet Explorer 7 only ................................................................................. 227
Section 55.4: Internet Explorer 8 only ..................................................................................................................... 227
Chapter 56: Performance ..................................................................................................................................... 228
Section 56.1: Use transform and opacity to avoid trigger layout ........................................................................ 228
Credits ............................................................................................................................................................................ 231
You may also like ...................................................................................................................................................... 236
About
Please feel free to share this PDF with anyone for free,
latest version of this book can be downloaded from:
https://goalkicker.com/CSSBook
This CSS Notes for Professionals book is compiled from Stack Overflow
Documentation, the content is written by the beautiful people at Stack Overflow.
Text content is released under Creative Commons BY-SA, see credits at the end
of this book whom contributed to the various chapters. Images may be copyright
of their respective owners unless otherwise specified
This is an unofficial free book created for educational purposes and is not
affiliated with official CSS group(s) or company(s) nor Stack Overflow. All
trademarks and registered trademarks are the property of their respective
company owners
The attribute rel of the <link> tag has to be set to "stylesheet", and the href attribute to the relative or absolute
path to the stylesheet. While using relative URL paths is generally considered good practice, absolute paths can be
used, too. In HTML5 the type attribute can be omitted.
It is recommended that the <link> tag be placed in the HTML file's <head> tag so that the styles are loaded before
the elements they style. Otherwise, users will see a flash of unstyled content.
Example
hello-world.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<h1>Hello world!</h1>
<p>I ♥ CSS</p>
</body>
</html>
style.css
h1 {
color: green;
text-decoration: underline;
}
p {
font-size: 25px;
font-family: 'Trebuchet MS', sans-serif;
}
Make sure you include the correct path to your CSS file in the href. If the CSS file is in the same folder as your HTML
file then no path is required (like the example above) but if it's saved in a folder, then specify it like this
href="foldername/style.css".
External stylesheets are considered the best way to handle your CSS. There's a very simple reason for this: when
you're managing a site of, say, 100 pages, all controlled by a single stylesheet, and you want to change your link
You can load as many CSS files in your HTML page as needed.
CSS rules are applied with some basic rules, and order does matter. For example, if you have a main.css file with
some code in it:
All your paragraphs with the 'green' class will be written in light green, but you can override this with another .css
file just by including it after main.css. You can have override.css with the following code follow main.css, for
example:
Now all your paragraphs with the 'green' class will be written in darker green rather than light green.
Other principles apply, such as the '!important' rule, specificity, and inheritance.
When someone first visits your website, their browser downloads the HTML of the current page plus the linked CSS
file. Then when they navigate to another page, their browser only needs to download the HTML of that page; the
CSS file is cached, so it does not need to be downloaded again. Since browsers cache the external stylesheet, your
pages load faster.
<head>
<style>
h1 {
color: green;
text-decoration: underline;
}
p {
font-size: 25px;
font-family: 'Trebuchet MS', sans-serif;
}
</style>
</head>
<body>
<h1>Hello world!</h1>
<p>I ♥ CSS</p>
</body>
<style>
@import url('/css/styles.css');
</style>
The following line imports a CSS file named additional-styles.css in the root directory into the CSS file in which it
appears:
@import '/additional-styles.css';
Importing external CSS is also possible. A common use case are font files.
@import 'https://fonts.googleapis.com/css?family=Lato';
Inline styles override any CSS in a <style> tag or external style sheet. While this can be useful in some
circumstances, this fact more often than not reduces a project's maintainability.
The styles in the following example apply directly to the elements to which they are attached.
Inline styles are generally the safest way to ensure rendering compatibility across various email clients, programs
and devices, but can be time-consuming to write and a bit challenging to manage.
It's possible to add, remove or change CSS property values with JavaScript through an element's style property.
Note that style properties are named in lower camel case style. In the example you see that the css property font-
family becomes fontFamily in javascript.
As an alternative to working directly on elements, you can create a <style> or <link> element in JavaScript and
append it to the <body> or <head> of the HTML document.
jQuery
$('#element').css('margin', '5px');
$('#element').css({
margin: "5px",
padding: "10px",
color: "black"
});
jQuery includes two ways to change css rules that have hyphens in them (i.e. font-size). You can put them in
quotes or camel-case the style rule name.
$('.example-class').css({
"background-color": "blue",
fontSize: "10px"
});
See also
list-style-type defines the shape or type of bullet point used for each list-item.
disc
circle
square
decimal
lower-roman
upper-roman
none
li {
list-style-type: square;
}
The list-style-image property determines whether the list-item icon is set with an image, and accepts a value of
none or a URL that points to an image.
li {
list-style-image: url(images/bullet.png);
}
The list-style-position property defines where to position the list-item marker, and it accepts one of two values:
"inside" or "outside".
li {
list-style-position: inside;
}
/* Alternate Formatting */
span {
text-shadow:
yellow 0 0 3px,
green 4px 4px 10px;
}
So the blue color applies to all <div> elements and all <p> elements. Without the comma only <p> elements that are
a child of a <div> would be red.
<p>
elements of the blue class
element with the ID first
every <span> inside of a <div>
h1 {}
Note: The value of an ID must be unique in a web page. It is a violation of the HTML standard to use the
value of an ID more than once in the same document tree.
A complete list of selectors can be found in the CSS Selectors Level 3 specification.
Attribute selectors can be used with various types of operators that change the selection criteria accordingly. They
select an element using the presence of a given attribute or attribute value.
Notes:
1. The attribute value can be surrounded by either single-quotes or double-quotes. No quotes at all may also
work, but it's not valid according to the CSS standard, and is discouraged.
Details
[attribute]
div[data-color] {
color: red;
}
[attribute="value"]
div[data-color="red"] {
color: red;
}
[attribute*="value"]
Selects elements with the given attribute and value where the given attribute contains the given value anywhere (as
a substring).
[class*="foo"] {
color: red;
}
[attribute~="value"]
Selects elements with the given attribute and value where the given value appears in a whitespace-separated list.
[class~="color-red"] {
color: red;
}
[attribute^="value"]
Selects elements with the given attribute and value where the given attribute begins with the value.
[class^="foo-"] {
color: red;
}
[attribute$="value"]
Selects elements with the given attribute and value where the given attribute ends with the given value.
[class$="file"] {
color: red;
}
[attribute|="value"]
Selects elements with a given attribute and value where the attribute's value is exactly the given value or is exactly
the given value followed by - (U+002D)
[lang|="EN"] {
color: red;
}
[attribute="value" i]
Selects elements with a given attribute and value where the attribute's value can be represented as Value, VALUE,
vAlUe or any other case-insensitive possibility.
[lang="EN" i] {
color: red;
}
*[type=checkbox] // 0-1-0
Note that this means an attribute selector can be used to select an element by its ID at a lower level of specificity
than if it was selected with an ID selector: [id="my-ID"] targets the same element as #my-ID but with lower
specificity.
Note: Sibling selectors target elements that come after them in the source document. CSS, by its nature
(it cascades), cannot target previous or parent elements. However, using the flex order property, a
previous sibling selector can be simulated on visual media.
A descendant combinator, represented by at least one space character (), selects elements that are a descendant of
the defined element. This combinator selects all descendants of the element (from child elements on down).
div p {
color:red;
}
<div>
<p>My text is red</p>
<section>
<p>My text is red</p>
</section>
</div>
In the above example, the first two <p> elements are selected since they are both descendants of the <div>.
The child (>) combinator is used to select elements that are children, or direct descendants, of the specified
element.
<div>
<p>My text is red</p>
<section>
<p>My text is not red</p>
</section>
</div>
The above CSS selects only the first <p> element, as it is the only paragraph directly descended from a <div>.
The second <p> element is not selected because it is not a direct child of the <div>.
The adjacent sibling (+) combinator selects a sibling element that immediate follows a specified element.
p + p {
color:red;
}
The above example selects only those <p> elements which are directly preceded by another <p> element.
The general sibling (~) combinator selects all siblings that follow the specified element.
p ~ p {
color:red;
}
The above example selects all <p> elements that are preceded by another <p> element, whether or not they are
immediately adjacent.
Syntax
selector:pseudo-class {
property: VALUE;
}
List of pseudo-classes:
Name Description
:active Applies to any element being activated (i.e. clicked) by the user.
Allows you to build sets of related selectors by creating groups that the
:any
included items will match. This is an alternative to repeating an entire selector.
Selects the current active #news element (clicked on a URL
:target
containing that anchor name)
Applies to radio, checkbox, or option elements that are checked
:checked
or toggled into an "on" state.
Represents any user interface element that is the default among a group of
:default
similar elements.
:disabled Applies to any UI element which is in a disabled state.
:empty Applies to any element which has no children.
:enabled Applies to any UI element which is in an enabled state.
Used in conjunction with the @page rule, this selects the first page in a
:first
printed document.
:first-child Represents any element that is the first child element of its parent.
Applies when an element is the first of the selected element type
:first-of-type
inside its parent. This may or may not be the first-child.
Applies to any element which has the user's focus. This can be given by the
:focus
user's keyboard, mouse events, or other forms of input.
Can be used to highlight a whole section when one element inside it is focused. It matches
:focus-within
any element that the :focus pseudo-class matches or that has a descendant focused.
Applies to any element displayed in full-screen mode. It selects the whole stack
:full-screen
of elements and not just the top level element.
Applies to any element being hovered by the user's pointing device, but
:hover
not activated.
Applies radio or checkbox UI elements which are neither checked nor
:indeterminate unchecked, but are in an indeterminate state. This can be due to an
element's attribute or DOM manipulation.
The :in-range CSS pseudo-class matches when an element has
its value attribute inside the specified range limitations for this element.
:in-range
It allows the page to give a feedback that the value currently defined
using the element is inside the range limits.
Applies to <input> elements whose values are invalid according to
:invalid
the type specified in the type= attribute.
Applies to any element who's wrapping <body> element has a properly
:lang designated lang= attribute. For the pseudo-class to be valid, it must
contain a valid two or three letter language code.
:last-child Represents any element that is the last child element of its parent.
Applies when an element is the last of the selected element type inside
:last-of-type
its parent. This may or may not be the last-child.
The :visited pseudoclass can't be used for most styling in a lot of modern browsers anymore because
it's a security hole. See this link for reference.
"The :nth-child(an+b) CSS pseudo-class matches an element that has an+b-1 siblings before it in the
document tree, for a given positive or zero value for n" - MDN :nth-child
pseudo-selector 1 2 3 4 5 6 7 8 9 10
:first-child ✔
:nth-child(3) ✔
:nth-child(n+3) ✔✔✔✔✔✔✔✔
:nth-child(3n) ✔ ✔ ✔
<div class="warning">
<p>This would be some warning copy.</p>
</div>
You can also combine class names to target elements more specifically. Let's build on the example above to
showcase a more complicated class selection.
CSS
.important {
color: orange;
}
.warning {
color: blue;
}
.warning.important {
color: red;
}
HTML
<div class="warning">
<p>This would be some warning copy.</p>
</div>
In this example, all elements with the .warning class will have a blue text color, elements with the .important class
with have an orange text color, and all elements that have both the .important and .warning class name will have a
red text color.
Notice that within the CSS, the .warning.important declaration did not have any spaces between the two class
names. This means it will only find elements which contain both class names warning and important in their class
attribute. Those class names could be in any order on the element.
If a space was included between the two classes in the CSS declaration, it would only select elements that have
parent elements with a .warning class names and child elements with .important class names.
HTML:
<div id="element">...</div>
CSS
p:last-of-type {
background: #C5CAE9;
}
h1:last-of-type {
background: #CDDC39;
}
<div class="container">
<p>First paragraph</p>
<p>Second paragraph</p>
<p>Last paragraph</p>
<h1>Heading 1</h1>
<h2>First heading 2</h2>
<h2>Last heading 2</h2>
</div>
jsFiddle
The :in-range CSS pseudo-class matches when an element has its value attribute inside the specified range
limitations for this element. It allows the page to give a feedback that the value currently defined using the element
is inside the range limits.[1]
The following selector matches all <input> elements in an HTML document that are not disabled and don't have the
class .example:
HTML:
<form>
Phone: <input type="tel" class="example">
E-mail: <input type="email" disabled="disabled">
Password: <input type="password">
</form>
CSS:
input:not([disabled]):not(.example){
background-color: #ccc;
}
The :not() pseudo-class will also support comma-separated selectors in Selectors Level 4:
CSS:
input:not([disabled], .example){
background-color: #ccc;
}
HTML:
CSS:
div {
height: 80px;
}
input{
margin:30px;
To the very beginning of your document, add as much booleans as you want with a unique id and the hidden
attribute set:
<div id="footer">
<!-- ... -->
</div>
You can toggle the boolean by adding a label with the for attribute set:
The normal selector (like .color-red) specifies the default properties. They can be overridden by following true /
false selectors:
/* true: */
<checkbox>:checked ~ [sibling of checkbox & parent of target] <target>
/* false: */
<checkbox>:not(:checked) ~ [sibling of checkbox & parent of target] <target>
Note that <checkbox>, [sibling ...] and <target> should be replaced by the proper selectors. [sibling ...]
can be a specific selector, (often if you're lazy) simply * or nothing if the target is already a sibling of the checkbox.
#darkThemeUsed:checked ~ #container,
#darkThemeUsed:checked ~ #footer {
background: #333;
}
In action
<div id="exampleID">
<p>Example</p>
</div>
#exampleID {
width: 20px;
}
Note: The HTML specs do not allow multiple elements with the same ID
<input type="range"></input>
CSS
HTML:
<div>
<p>This paragraph is the only child of the div, it will have the color blue</p>
</div>
<div>
<p>This paragraph is one of the two children of the div</p>
<p>This paragraph is one of the two children of its parent</p>
</div>
CSS:
p:only-child {
color: blue;
}
The above example selects the <p> element that is the unique child from its parent, in this case a <div>.
It is possible to specify various combinations of images, colors, and gradients, and adjust the size, positioning, and
repetition (among others) of these.
transparent, specifies that the background color should be transparent. This is default.
Color names
CSS
div {
background-color: red; /* red */
}
HTML
The example used above is one of several ways that CSS has to represent a single color.
Hex code is used to denote RGB components of a color in base-16 hexadecimal notation. #ff0000, for example, is
bright red, where the red component of the color is 256 bits (ff) and the corresponding green and blue portions of
the color is 0 (00).
If both values in each of the three RGB pairings (R, G, and B) are the same, then the color code can be shortened
into three characters (the first digit of each pairing). #ff0000 can be shortened to #f00, and #ffffff can be
shortened to #fff.
body {
background-color: #de1205; /* red */
}
.main {
RGB / RGBa
RGB stands for Red, Green and Blue, and requires of three separate values between 0 and 255, put between
brackets, that correspond with the decimal color values for respectively red, green and blue.
RGBa allows you to add an additional alpha parameter between 0.0 and 1.0 to define opacity.
header {
background-color: rgb(0, 0, 0); /* black */
}
footer {
background-color: rgba(0, 0, 0, 0.5); /* black with 50% opacity */
}
HSL / HSLa
Another way to declare a color is to use HSL or HSLa and is similar to RGB and RGBa.
HSL stands for hue, saturation, and lightness, and is also often called HLS:
HSLa allows you to add an additional alpha parameter between 0.0 and 1.0 to define opacity.
li a {
background-color: hsl(120, 100%, 50%); /* green */
}
#p1 {
background-color: hsla(120, 100%, 50%, .3); /* green with 30% opacity */
}
body {
background: red;
background-image: url(partiallytransparentimage.png);
}
body {
background-color: red;
background-image: url(partiallytransparentimage.png);
}
body {
background-image: url(partiallytransparentimage.png);
background-color: red;
body {
background: red url(partiallytransparentimage.png);
}
They will all lead to the red color being shown underneath the image, where the parts of the image are transparent,
or the image is not showing (perhaps as a result of background-repeat).
body {
background-image: url(partiallytransparentimage.png);
background: red;
}
There are two types of gradient functions, linear and radial. Each type has a non-repeating variant and a repeating
variant:
linear-gradient()
repeating-linear-gradient()
radial-gradient()
repeating-radial-gradient()
linear-gradient()
For example, this creates a linear gradient that starts from the right and transitions from red to blue
.linear-gradient {
background: linear-gradient(to left, red, blue); /* you can also use 270deg */
}
You can create a diagonal gradient by declaring both a horizontal and vertical starting position.
.diagonal-linear-gradient {
background: linear-gradient(to left top, red, yellow 10%);
It is possible to specify any number of color stops in a gradient by separating them with commas. The following
examples will create a gradient with 8 color stops
.linear-gradient-rainbow {
background: linear-gradient(to left, red, orange, yellow, green, blue, indigo, violet)
}
radial-gradient()
.radial-gradient-simple {
background: radial-gradient(red, blue);
}
.radial-gradient {
background: radial-gradient(circle farthest-corner at top left, red, blue);
}
Value Meaning
circle Shape of gradient. Values are circle or ellipse, default is ellipse.
Keywords describing how big the ending shape must be. Values are closest-side, farthest-
farthest-corner
side, closest-corner, farthest-corner
top left Sets the position of the gradient center, in the same way as background-position.
Repeating gradients
Repeating gradient functions take the same arguments as the above examples, but tile the gradient across the
background of the element.
.bullseye {
background: repeating-radial-gradient(red, red 10%, white 10%, white 20%);
}
.warning {
background: repeating-linear-gradient(-45deg, yellow, yellow 10%, black 10%, black 20% );
}
Value Meaning
Angle unit. The angle starts from to top and rotates clockwise. Can be specified in deg, grad, rad, or
-45deg
turn.
Direction of gradient, default is to bottom. Syntax: to [y-axis(top OR bottom)] [x-axis(left OR
to left
right)] ie to top right
yellow 10% Color, optionally followed by a percentage or length to display it at. Repeated two or more times.
Note that HEX, RGB, RGBa, HSL, and HSLa color codes may be used instead of color names. Color names were used
for the sake of illustration. Also note that the radial-gradient syntax is much more complex than linear-gradient,
and a simplified version is shown here. For a full explanation and specs, see the MDN Docs
.myClass {
background-image: url('/path/to/image.jpg');
}
.myClass {
background-image: url('/path/to/image.jpg'),
url('/path/to/image2.jpg');
}
The images will stack according to their order with the first declared image on top of the others and so on.
Value Result
Specify background image's path(s) or an image resource specified with data URI
url('/path/to/image.jpg')
schema (apostrophes can be omitted), separate multiples by comma
none No background image
initial Default value
inherit Inherit parent's value
This following attributes are very useful and almost essential too.
The order of the values does not matter and every value is optional
Syntax
In this example, the background-color of the element would be set to green with pattern.png, if it is available,
overlayed on the colour, repeating as often as necessary to fill the element. If pattern.png includes any
transparency then the green colour will be visible behind it.
In this example we have a black background with an image 'picture.png' on top, the image does not repeat in either
axis and is positioned in the top left corner. The / after the position is to be able to include the size of the
background image which in this case is set as 600px width and auto for the height. This example could work well
with a feature image that can fade into a solid colour.
NOTE: Use of the shorthand background property resets all previously set background property values,
even if a value is not given. If you wish only to modify a background property value previously set, use a
longhand property instead.
The background-size property enables one to control the scaling of the background-image. It takes up to two
values, which determine the scale/size of the resulting image in vertical and and horizontal direction. If the property
is missing, its deemed auto in both width and height.
auto will keep the image's aspect ratio, if it can be determined. The height is optional and can be considered auto.
Therefore, on a 256 px × 256 px image, all the following background-size settings would yield an image with height
and width of 50 px:
background-size: 50px;
background-size: 50px auto; /* same as above */
background-size: auto 50px;
background-size: 50px 50px;
So if we started with the following picture (which has the mentioned size of 256 px × 256 px),
One can also use percentage values to scale the image with respect of the element. The following example would
yield a 200 px × 133 px drawn image:
#withbackground {
background-image: url(to/some/background.png);
width: 200px;
height: 200px;
padding: 0;
margin: 0;
}
The last example in the previos section lost its original aspect ratio. The circle got into an ellipse, the square into a
rectangle, the triangle into another triangle.
The length or percentage approach isn't flexible enough to keep the aspect ratio at all times. auto doesn't help,
since you might not know which dimension of your element will be larger. However, to cover certain areas with an
Sorry for the bad pun, but we're going to use a picture of the day by Biswarup Ganguly for demonstration. Lets say
that this is your screen, and the gray area is outside of your visible screen. For demonstration, We're going to
assume a 16 × 9 ratio.
We want to use the aforementioned picture of the day as a background. However, we cropped the image to 4x3 for
some reason. We could set the background-size property to some fixed length, but we will focus on contain and
cover. Note that I also assume that we didn't mangle the width and/or height of body.
contain
contain
Scale the image, while preserving its intrinsic aspect ratio (if any), to the largest size such that both its
width and its height can fit inside the background positioning area.
This makes sure that the background image is always completely contained in the background positioning area,
however, there could be some empty space filled with your background-color in this case:
cover
Scale the image, while preserving its intrinsic aspect ratio (if any), to the smallest size such that both its
width and its height can completely cover the background positioning area.
This makes sure that the background image is covering everything. There will be no visible background-color,
however depending on the screen's ratio a great part of your image could be cut off:
<div>
<div class="contain"></div>
<p>Note the grey background. The image does not cover the whole region, but it's fully
<em>contained</em>.
</p>
</div>
<div>
<div class="cover"></div>
<p>Note the ducks/geese at the bottom of the image. Most of the water is cut, as well as a part
of the sky. You don't see the complete image anymore, but neither do you see any background color;
the image <em>covers</em> all of the <code><div></code>.</p>
</div>
.myClass {
background-image: url('path/to/image.jpg');
background-position: 50% 50%;
}
The position is set using an X and Y co-ordinate and be set using any of the units used within CSS.
Unit Description
In addition to the shorthand property above, one can also use the longhand background properties background-
position-x and background-position-y. These allow you to control the x or y positions separately.
NOTE: This is supported in all browsers except Firefox (versions 31-48) 2. Firefox 49, to be released
September 2016, will support these properties. Until then, there is a Firefox hack within this Stack
Overflow answer.
Note: If the background-attachment property is set to fixed, this property has no effect.
Possible values:
CSS
.example {
width: 300px;
border: 20px solid black;
padding: 50px;
background: url(https://static.pexels.com/photos/6440/magazines-desk-work-workspace-medium.jpg);
background-repeat: no-repeat;
}
.example1 {}
HTML
<p>background-origin: border-box:</p>
<div class="example example2">
<h2>Lorem Ipsum Dolor</h2>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
<p>Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut
aliquip ex ea commodo consequat.</p>
</div>
<p>background-origin: content-box:</p>
<div class="example example3">
<h2>Lorem Ipsum Dolor</h2>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
<p>Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut
aliquip ex ea commodo consequat.</p>
</div>
Result:
https://www.w3.org/TR/css3-background/#the-background-origin
https://developer.mozilla.org/en-US/docs/Web/CSS/background-origin
#mydiv {
background-image: url(img_1.png), /* top image */
url(img_2.png), /* middle image */
url(img_3.png); /* bottom image */
background-position: right bottom,
left top,
right top;
background-repeat: no-repeat,
repeat,
no-repeat;
}
Images will be stacked atop one another with the first background on top and the last background in the back.
img_1 will be on top, the img_2 and img_3 is on bottom.
#mydiv {
background: url(img_1.png) right bottom no-repeat,
url(img_2.png) left top repeat,
url(img_3.png) right top no-repeat;
}
#mydiv {
background: url(image.png) right bottom no-repeat,
linear-gradient(to bottom, #fff 0%,#000 100%);
}
Demo
body {
background-image: url('img.jpg');
background-attachment: fixed;
}
Value Description
scroll The background scrolls along with the element. This is default.
fixed The background is fixed with regard to the viewport.
local The background scrolls along with the element's contents.
initial Sets this property to its default value.
inherit Inherits this property from its parent element.
Examples
background-attachment: scroll
The default behaviour, when the body is scrolled the background scrolls with it:
body {
background-image: url('image.jpg');
background-attachment: scroll;
}
background-attachment: fixed
The background image will be fixed and will not move when the body is scrolled:
body {
background-image: url('image.jpg');
background-attachment: fixed;
}
background-attachment: local
The background image of the div will scroll when the contents of the div is scrolled.
div {
Values
border-box is the default value. This allows the background to extend all the way to the outside edge of the
element's border.
padding-box clips the background at the outside edge of the element's padding and does not let it extend
into the border;
content-box clips the background at the edge of the content box.
inherit applies the setting of the parent to the selected element.
CSS
.example {
width: 300px;
border: 20px solid black;
padding: 50px;
background: url(https://static.pexels.com/photos/6440/magazines-desk-work-workspace-medium.jpg);
background-repeat: no-repeat;
}
.example1 {}
HTML
<p>background-origin: border-box:</p>
<div class="example example2">
<h2>Lorem Ipsum Dolor</h2>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
<p>Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut
aliquip ex ea commodo consequat.</p>
</div>
<p>background-origin: content-box:</p>
<div class="example example3">
<h2>Lorem Ipsum Dolor</h2>
div {
background-image: url("img.jpg");
background-repeat: repeat-y;
}
CSS Syntax: background-blend-mode: normal | multiply | screen | overlay | darken | lighten | color-dodge |
saturation | color | luminosity;
/* For IE 8*/
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000,
endColorstr=#99000000)";
<div class="container">
<img src="http://lorempixel.com/400/200" />
</div>
CSS:
View Result
HTML:
CSS:
html, body {
height: 100%;
}
body {
display: flex;
justify-content: center; /* horizontal center */
align-items: center; /* vertical center */
}
View Result
See Dynamic Vertical and Horizontal Centering under the Flexbox documentation for more details on flexbox and
what the styles mean.
Browser Support
Some recent browser versions, such as Safari 8 and IE10, require vendor prefixes.
For a more detailed look at flexbox browser support, see this answer.
Keep in mind that with this technique, the element could end being rendered at a non-integer pixel boundary,
making it look blurry. See this answer in SO for a workaround.
HTML
<div class="container">
<div class="element"></div>
</div>
CSS
.container {
position: relative;
}
.element {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
The transform property needs prefixes to be supported by older browsers. Prefixes are needed for Chrome<=35,
Safari<=8, Opera<=22, Android Browser<=4.4.4, and IE9. CSS transforms are not supported by IE8 and older
versions.
MORE INFORMATION
The element is being positioned according to the first non-static parent (position: relative, absolute, or
fixed). Explore more in this fiddle and this documentation topic.
For horizontal-only centering, use left: 50% and transform: translateX(-50%). The same goes for vertical-
only centering: center with top: 50% and transform: translateY(-50%).
Using a non-static width/height elements with this method of centering can cause the centered element to
appear squished. This mostly happens with elements containing text, and can be fixed by adding: margin-
right: -50%; and margin-bottom: -50%;. View this fiddle for more information.
HTML
<div class="containerDiv">
<div id="centeredDiv"></div>
</div>
<div class="containerDiv">
<p id="centeredParagraph">This is a centered paragraph.</p>
</div>
<div class="containerDiv">
<img id="centeredImage"
src="https://i.kinja-img.com/gawker-media/image/upload/s--c7Q9b4Eh--/c_scale,fl_progressive,q_80,w_
800/qqyvc3bkpyl3mfhr8all.jpg" />
</div>
CSS
.containerDiv {
width: 100%;
height: 100px;
padding-bottom: 40px;
}
#centeredDiv {
margin: 0 auto;
width: 200px;
height: 100px;
border: 1px solid #000;
}
#centeredParagraph {
width: 200px;
margin: 0 auto;
}
#centeredImage {
display: block;
width: 200px;
margin: 0 auto;
}
Result:
HTML
<p>Lorem ipsum</p>
CSS
p {
text-align: center;
}
This does not work for centering entire block elements. text-align controls only alignment of inline content like text in
its parent block element.
Automatic margins, paired with values of zero for the left and right or top and bottom offsets, will center an
absolutely positioned elements within its parent.
View Result
HTML
CSS
.parent {
position: relative;
height: 500px;
}
.center {
position: absolute;
margin: auto;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
Elements that don't have their own implicit width and height like images do, will need those values defined.
CSS
.center {
position: absolute;
height: 50px;
width: 50px;
background: red;
top: calc(50% - 50px / 2); /* height divided by 2*/
left: calc(50% - 50px / 2); /* width divided by 2*/
}
HTML
<div class="center"></div>
CSS
div {
height: 200px;
line-height: 200px;
}
View Result
Use these 3 lines to vertical align practically everything. Just make sure the div/image you apply the code to has a
parent with a height.
CSS
div.vertical {
position: relative;
top: 50%;
transform: translateY(-50%);
}
HTML
HTML
<div class="content">
<div class="position-container">
<div class="thumb">
<img src="http://lorempixel.com/400/200/">
</div>
<div class="details">
<p class="banner-title">text 1</p>
<p class="banner-text">content content content content content content content content
content content content content content content</p>
<button class="btn">button</button>
</div>
</div>
</div>
CSS
.content * {
box-sizing: border-box;
}
.content .position-container {
display: table;
}
.content .details {
display: table-cell;
vertical-align: middle;
Link to JSFiddle
The main points are the 3 .thumb, .details and .position-container containers:
The .details must have the real width set width: .... and display: table-cell, vertical-align:
middle.
The .thumb must have width: 100% if you want that it will take all the remaining space and it will be
influenced by the .details width.
The image (if you have an image) inside .thumb should have width: 100%, but it is not necessary if you have
correct proportions.
Set up a "ghost" element inside the container to be centered that is 100% height, then use vertical-align:
middle on both that and the element to be centered.
CSS
/* May want to do this if there is risk the container may be narrower than the element inside */
white-space: nowrap;
}
HTML
<div class="block">
<div class="centered"></div>
</div>
Demo
HTML
<div class="outer-container">
<div class="inner-container">
<div class="centered-content">
You can put anything here!
</div>
</div>
</div>
CSS
body {
margin : 0;
}
.outer-container {
position : absolute;
display: table;
width: 100%; /* This could be ANY width */
.inner-container {
display: table-cell;
vertical-align: middle;
text-align: center;
}
.centered-content {
display: inline-block;
text-align: left;
background: #fff;
padding: 20px;
border: 1px solid #000;
}
<div class="wrap">
<img src="http://lorempixel.com/400/200/" />
</div>
CSS
.wrap {
height: 50px;/* max image height */
width: 100px;
border: 1px solid blue;
text-align: center;
}
.wrap:before {
content:"";
display: inline-block;
height: 100%;
vertical-align: middle;
width: 1px;
}
img {
vertical-align: middle;
}
HTML
<div class="center">
Center vertically and horizontally
</div>
.center {
position: absolute;
background: #ccc;
left: 50%;
width: 150px;
margin-left: -75px; /* width * -0.5 */
top: 50%;
height: 200px;
margin-top: -100px; /* height * -0.5 */
}
You can center the element horizontally even if you don't know the height of the content:
HTML
<div class="center">
Center only horizontally
</div>
CSS
.center {
position: absolute;
background: #ccc;
left: 50%;
width: 150px;
margin-left: -75px; /* width * -0.5 */
}
You can center the element vertically if you know the element's height:
HTML
<div class="center">
Center only vertically
</div>
CSS
.center {
position: absolute;
background: #ccc;
top: 50%;
height: 200px;
margin-top: -100px; /* width * -0.5 */
}
HTML
<div class="vcenter--container">
<div class="vcenter--helper">
<div class="vcenter--content">
<!--stuff-->
</div>
</div>
</div>
CSS
.vcenter--container {
display: table;
height: 100%;
position: absolute;
overflow: hidden;
width: 100%;
}
.vcenter--helper {
display: table-cell;
vertical-align: middle;
}
.vcenter--content {
margin: 0 auto;
width: 200px;
}
HTML
<div class="wrapper">
<div class="parent">
<div class="child"></div>
</div>
</div>
.wrapper {
display: table;
vertical-align: center;
width: 200px;
height: 200px;
background-color: #9e9e9e;
}
.parent {
display: table-cell;
vertical-align: middle;
text-align: center;
}
.child {
display: inline-block;
vertical-align: middle;
text-align: center;
width: 100px;
height: 100px;
background-color: teal;
}
The browser creates a rectangle for each element in the HTML document. The Box Model describes how the
padding, border, and margin are added to the content to create this rectangle.
The perimeter of each of the four areas is called an edge. Each edge defines a box.
The innermost rectangle is the content box. The width and height of this depends on the element's
rendered content (text, images and any child elements it may have).
Next is the padding box, as defined by the padding property. If there is no padding width defined, the
padding edge is equal to the content edge.
Then we have the border box, as defined by the border property. If there is no border width defined, the
border edge is equal to the padding edge.
The outermost rectangle is the margin box, as defined by the margin property. If there is no margin width
defined, the margin edge is equal to the border edge.
Example
div {
border: 5px solid red;
margin: 50px;
padding: 20px;
This CSS styles all div elements to have a top, right, bottom and left border of 5px in width; a top, right, bottom and
left margin of 50px; and a top, right, bottom, and left padding of 20px. Ignoring content, our generated box will look
like this:
As there is no content, the content region (the blue box in the middle) has no height or width (0px by 0px).
The padding box by default is the same size as the content box, plus the 20px width on all four edges we're
defining above with the padding property (40px by 40px).
The border box is the same size as the padding box, plus the 5px width we're defining above with the border
property (50px by 50px).
Finally the margin box is the same size as the border box, plus the 50px width we're defining above with the
margin property (giving our element a total size of 150px by 150px).
Now lets give our element a sibling with the same style. The browser looks at the Box Model of both elements to
work out where in relation to the previous element's content the new element should be positioned:
The content of each of element is separated by a 150px gap, but the two elements' boxes touch each other.
If we then modify our first element to have no right margin, the right margin edge would be in the same position as
the right border edge, and our two elements would now look like this:
textarea {
width: 100%;
padding: 3px;
box-sizing: content-box; /* default value */
}
Since the padding will be added to the width of the textarea, the resulting element is a textarea that is wider than
100%.
Fortunately, CSS allows us to change the box model with the box-sizing property for an element. There are three
different values for the property available:
content-box: The common box model - width and height only includes the content, not the padding or
border
padding-box: Width and height includes the content and the padding, but not the border
border-box: Width and height includes the content, the padding as well as the border
To solve the textarea problem above, you could just change the box-sizing property to padding-box or border-
box. border-box is most commonly used.
textarea {
width: 100%;
padding: 3px;
box-sizing: border-box;
}
To apply a specific box model to every element on the page, use the following snippet:
html {
box-sizing: border-box;
}
*, *:before, *:after {
In this coding box-sizing:border-box; is not directly applied to *, so you can easily overwrite this property on
individual elements.
div{
margin: 10px;
}
<div>
some content
</div>
<div>
some more content
</div>
They will be 10px apart since vertical margins collapse over one and other. (The spacing will not be the sum of two
margins.)
span{
margin: 10px;
}
<span>some</span><span>content</span>
They will be 20px apart since horizontal margins don't collapse over one and other. (The spacing will be the sum of
two margins.)
.top{
margin: 10px;
}
.bottom{
margin: 15px;
}
<div class="top">
some content
These elements will be spaced 15px apart vertically. The margins overlap as much as they can, but the larger
margin will determine the spacing between the elements.
.outer-top{
margin: 10px;
}
.inner-top{
margin: 15px;
}
.outer-bottom{
margin: 20px;
}
.inner-bottom{
margin: 25px;
}
<div class="outer-top">
<div class="inner-top">
some content
</div>
</div>
<div class="outer-bottom">
<div class="inner-bottom">
some more content
</div>
</div>
What will be the spacing between the two texts? (hover to see answer)
The spacing will be 25px. Since all four margins are touching each other, they will collapse, thus using the
largest margin of the four.
div{
border: 1px solid red;
}
What will be the spacing between the two texts? (hover to see answer)
The spacing will be 59px! Now only the margins of .outer-top and .outer-bottom touch each other, and
are the only collapsed margins. The remaining margins are separated by the borders. So we have 1px +
10px + 1px + 15px + 20px + 1px + 25px + 1px. (The 1px's are the borders...)
HTML:
CSS
h1 {
margin: 0;
background: #cff;
}
div {
margin: 50px 0 0 0;
background: #cfc;
}
p {
margin: 25px 0 0 0;
background: #cf9;
}
In the example above, only the largest margin applies. You may have expected that the paragraph would be located
60px from the h1 (since the div element has a margin-top of 40px and the p has a 20px margin-top). This does not
happen because the margins collapse together to form one margin.
CSS allows you to specify a given side to apply margin to. The four properties provided for this purpose are:
margin-left
margin-right
margin-top
margin-bottom
The following code would apply a margin of 30 pixels to the left side of the selected div. View Result
HTML
<div id="myDiv"></div>
CSS
#myDiv {
margin-left: 30px;
height: 40px;
width: 40px;
background-color: red;
}
Parameter Details
margin-left The direction in which the margin should be applied.
30px The width of the margin.
Specifying Direction Using Shorthand Property
The standard margin property can be expanded to specify differing widths to each side of the selected elements.
The syntax for doing this is as follows:
The following example applies a zero-width margin to the top of the div, a 10px margin to the right side, a 50px
margin to the left side, and a 100px margin to the left side. View Result
HTML
<div id="myDiv"></div>
CSS
#myDiv {
margin: 0 10px 50px 100px;
height: 40px;
width: 40px;
background-color: red;
}
/*equals to:*/
margin:1px 1px;
/*equals to:*/
/*equals to:*/
Another exapmle:
p{
margin:10px 15px; /* 10px margin-top & bottom And 15px margin-right & left*/
/*equals to:*/
/*equals to:*/
#myDiv {
width:80%;
margin:0 auto;
}
In the example above we use the shorthand margin declaration to first set 0 to the top and bottom margin values
(although this could be any value) and then we use auto to let the browser allocate the space automatically to the
left and right margin values.
In the example above, the #myDiv element is set to 80% width which leaves use 20% leftover. The browser
distributes this value to the remaining sides so:
.parent {
width : 500px;
height: 300px;
}
.child {
width : 100px;
height: 100px;
margin-left: 10%; /* (parentWidth * 10/100) => 50px */
}
But that is not the case, when comes to margin-top and margin-bottom. Both these properties, in percentages,
aren't relative to the height of the parent container but to the width of the parent container.
So,
.parent {
width : 500px;
height: 300px;
}
.child {
width : 100px;
height: 100px;
margin-left: 10%; /* (parentWidth * 10/100) => 50px */
margin-top: 20%; /* (parentWidth * 20/100) => 100px */
}
div{
#over{
margin-left: -20px;
}
<div>Base div</div>
<div id="over">Overlapping div</div>
To save adding padding to each side individually (using padding-top, padding-left etc) can you write it as a
shorthand, as below:
Four values:
<style>
.myDiv {
padding: 25px 50px 75px 100px; /* top right bottom left; */
}
</style>
<div class="myDiv"></div>
Three values:
<style>
.myDiv {
padding: 25px 50px 75px; /* top left/right bottom */
}
</style>
<div class="myDiv"></div>
Two values:
<style>
.myDiv {
padding: 25px 50px; /* top/bottom left/right */
}
</style>
<div class="myDiv"></div>
One value:
<style>
.myDiv {
padding-top
padding-right
padding-bottom
padding-left
The following code would add a padding of 5px to the top of the div:
<style>
.myClass {
padding-top: 5px;
}
</style>
<div class="myClass"></div>
Every corner of an element can have up to two values, for the vertical and horizontal radius of that corner (for a
maximum of 8 values).
The first set of values defines the horizontal radius. The optional second set of values, preceded by a ‘/’ , defines the
vertical radius. If only one set of values is supplied, it is used for both the vertical and horizontal radius.
The 10px is the horizontal radius of the top-left-and-bottom-right. And the 5% is the horizontal radius of the top-
right-and-bottom-left. The other four values after '/' are the vertical radii for top-left, top-right, bottom-right and
bottom-left.
As with many CSS properties, shorthands can be used for any or all possible values. You can therefore specify
anything from one to eight values. The following shorthand allows you to set the horizontal and vertical radius of
every corner to the same value:
HTML:
<div class='box'></div>
CSS:
.box {
width: 250px;
height: 250px;
background-color: black;
border-radius: 10px;
}
Border-radius is most commonly used to convert box elements into circles. By setting the border-radius to half of
the length of a square element, a circular element is created:
.circle {
width: 200px;
height: 200px;
border-radius: 100px;
}
.circle {
width: 150px;
height: 150px;
border-radius: 50%;
}
If the width and height properties are not equal, the resulting shape will be an oval rather than a circle.
-webkit-border-top-right-radius: 4px;
-webkit-border-bottom-right-radius: 4px;
-webkit-border-bottom-left-radius: 0;
-webkit-border-top-left-radius: 0;
-moz-border-radius-topright: 4px;
-moz-border-radius-bottomright: 4px;
-moz-border-radius-bottomleft: 0;
-moz-border-radius-topleft: 0;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
border-bottom-left-radius: 0;
border-top-left-radius: 0;
Examples:
border-style: dotted;
border-style can also have the values none and hidden. They have the same effect, except hidden works for
border conflict resolution for <table> elements. In a <table> with multiple borders, none has the lowest priority
(meaning in a conflict, the border would show), and hidden has the highest priority (meaning in a conflict, the
border would not show).
.div1{
border: 3px solid black;
outline: 6px solid blue;
width: 100px;
height: 100px;
margin: 20px;
}
Using box-shadow:
.div2{
border: 5px solid green;
box-shadow: 0px 0px 0px 4px #000;
width: 100px;
height: 100px;
margin: 20px;
}
.div3 {
position: relative;
border: 5px solid #000;
width: 100px;
height: 100px;
margin: 20px;
}
.div3:before {
content: " ";
position: absolute;
border: 5px solid blue;
z-index: -1;
top: 5px;
left: 5px;
right: 5px;
bottom: 5px;
}
Instead of writing:
border-width: 1px;
border-style: solid;
border-color: #000;
These shorthands are also available for every side of an element: border-top, border-left, border-right and
border-bottom. So you can do:
table {
border-collapse: separate; /* default */
border-spacing: 2px; /* Only works if border-collapse is separate */
}
The image will be split into nine regions with 30x30 pixels. The edges will be used as the corners of the border while
the side will be used in between. If the element is higher / wider than 30px this part of the image will be stretched.
The middle part of the image defaults to be transparent.
HTML
<div class='bordered'>Border on all sides</div>
The above example would produce a border that comprises of 5 different colors. The colors are defined through a
linear-gradient (you can find more information about gradients in the docs). You can find more information
about border-image-slice property in the border-image example in same page.
(Note: Additional properties were added to the element for presentational purpose.)
You'd have noticed that the left border has only a single color (the start color of the gradient) while the right border
also has only a single color (the gradient's end color). This is because of the way that border image property works.
It is as though the gradient is applied to the entire box and then the colors are masked from the padding and
content areas, thus making it look as though only the border has the gradient.
Which border(s) have a single color is dependant on the gradient definition. If the gradient is a to right gradient,
the left border would be the start color of the gradient and right border would be the end color. If it was a to
bottom gradient the top border would be the gradient's start color and bottom border would be end color. Below is
If the border is required only on specific sides of the element then the border-width property can be used just like
with any other normal border. For example, adding the below code would produce a border only on the top of the
element.
Note that, any element that has border-image property won't respect the border-radius (that is the border won't
curve). This is based on the below statement in the spec:
A box's backgrounds, but not its border-image, are clipped to the appropriate curve (as determined by
‘background-clip’).
For example if you wanted to add a border to the left side of an element, you could do:
#element {
border-left: 1px solid black;
}
In addition, outlines can be non-rectangular in some browsers. This can happen if outline is applied on a span
element that has text with different font-size properties inside it. Unlike borders, outlines cannot have rounded
corners.
An outline is a line around an element. It is displayed around the margin of the element. However, it is
different from the border property.
p {
border: 1px solid black;
outline-color:blue;
line-height:30px;
}
.p1{
outline-style: dotted;
}
.p2{
outline-style: dashed;
}
.p3{
outline-style: solid;
}
HTML
CSS
div {
width:100px;
outline: 1px dashed #bbb;
}
#div1 {
overflow-wrap:normal;
}
#div2 {
overflow-wrap:break-word;
}
HTML
<div id="div1">
<strong>#div1</strong>: Small words are displayed normally, but a long word like <span
style="red;">supercalifragilisticexpialidocious</span> is too long so it will overflow past the
edge of the line-break
</div>
<div id="div2">
<strong>#div2</strong>: Small words are displayed normally, but a long word like <span
style="red;">supercalifragilisticexpialidocious</span> will be split at the line break and continue
on the next line.
</div>
HTML
<div id="div-x">
If this div is too small to display its contents,
the content to the left and right will be clipped.
</div>
<div id="div-y">
If this div is too small to display its contents,
the content to the top and bottom will be clipped.
</div>
CSS
div {
width: 200px;
height: 200px;
}
#div-x {
overflow-x: hidden;
}
<div>
This div is too small to display its contents to display the effects of the overflow property.
</div>
CSS
div {
width:100px;
height:100px;
overflow:scroll;
}
Result
The content above is clipped in a 100px by 100px box, with scrolling available to view overflowing content.
Most desktop browsers will display both horizontal and vertical scrollbars, whether or not any content is clipped.
This can avoid problems with scrollbars appearing and disappearing in a dynamic environment. Printers may print
overflowing content.
<div>
Even if this div is too small to display its contents, the content is not clipped.
</div>
CSS
div {
width:50px;
height:50px;
overflow:visible;
}
Result
CSS
img {
float:left;
margin-right: 10px;
}
div {
overflow:hidden; /* creates block formatting context */
}
HTML
<img src="http://placehold.it/100x100">
<div>
<p>Lorem ipsum dolor sit amet, cum no paulo mollis pertinacia.</p>
<p>Ad case omnis nam, mutat deseruisse persequeris eos ad, in tollit debitis sea.</p>
</div>
Result
A Media Query containing a Media Feature (and an implicit Media Type of "all")
@media (orientation: portrait) {
/* One or more CSS rules to apply when the query is satisfied */
}
1. The page must be viewed on a normal screen (not a printed page, projector, etc).
2. The width of the user's view port must be at least 720 pixels.
If these conditions are met, the styles inside the media query will be active, and the background color of the page
will be sky blue.
Media queries are applied dynamically. If on page load the conditions specified in the media query are met, the CSS
will be applied, but will be immediately disabled should the conditions cease to be met. Conversely, if the
conditions are initially not met, the CSS will not be applied until the specified conditions are met.
In our example, if the user's view port width is initially greater than 720 pixels, but the user shrinks the browser's
width, the background color will cease to be sky blue as soon as the user has resized the view port to less than 720
pixels in width.
@media print {
html {
background-color: white;
}
}
The above CSS code will give the DOM HTML element a white background color when being printed.
The mediatype parameter has an optional not or only prefix that will apply the styles to everything except the
specified mediatype or only the specified media type, respectively. For example, the following code example will
apply the style to every media type except print.
And the same way, for just showing it only on the screen, this can be used:
The list of mediatype can be understood better with the following table:
Background Information
There are two types of pixels in the display. One is the logical pixels and the other is the physical pixels. Mostly, the
physical pixels always stay the same, because it is the same for all the display devices. The logical pixels change
based on the resolution of the devices to display higher quality pixels. The device pixel ratio is the ratio between
physical pixels and logical pixels. For instance, the MacBook Pro Retina, iPhone 4 and above report a device pixel
ratio of 2, because the physical linear resolution is double the logical resolution.
The reason why this works only with WebKit based browsers is because of:
The width media feature describes the width of the rendering surface of the output device (such as the
width of the document window, or the width of the page box on a printer).
View-port is the width of the device itself. If your screen resolution says the resolution is 1280 x 720, your view-port
width is "1280px".
More often many devices allocate different pixel amount to display one pixel. For an example iPhone 6 Plus has
1242 x 2208 resolution. But the actual viewport-width and viewport-height is 414 x 736. That means 3 pixels are
used to create 1 pixel.
But if you did not set the meta tag correctly it will try to show your webpage with its native resolution which results
in a zoomed out view (smaller texts and images).
/* Styles in this block are only applied if the screen size is atleast 300px wide, but no more
than 767px */
}
/* Styles in this block are only applied if the screen size is atleast 768px wide, but no more
than 1023px */
}
/* Styles in this block are only applied if the screen size is over 1024px wide. */
}
This stylesheet is still downloaded but is applied only on devices with screen width larger than 600px.
To add support for IE8, you could use one of several JS solutions. For example, Respond can be added to add
media query support for IE8 only with the following code :
<!--[if lt IE 9]>
<script
src="respond.min.js">
</script>
<![endif]-->
CSS Mediaqueries is another library that does the same thing. The code for adding that library to your HTML would
be identical :
<!--[if lt IE 9]>
<script
src="css3-mediaqueries.js">
</script>
<![endif]-->
The alternative
If you don't like a JS based solution, you should also consider adding an IE<9 only stylesheet where you adjust your
styling specific to IE<9. For that, you should add the following HTML to your code:
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="style-ielt9.css"/>
<![endif]-->
Note :
Technically it's one more alternative: using CSS hacks to target IE<9. It has the same impact as an IE<9 only
stylesheet, but you don't need a separate stylesheet for that. I do not recommend this option, though, as they
produce invalid CSS code (which is but one of several reasons why the use of CSS hacks is generally frowned upon
today).
HTML:
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed
cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis
ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia
arcu eget nulla. </p>
<p>Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque
nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin
ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, suscipit quis, luctus non,
massa. Fusce ac turpis quis ligula lacinia aliquet. </p>
CSS:
img {
float:left;
margin-right:1rem;
}
<html>
<head>
<style>
img {
float: left;
p.clear {
clear: both;
}
</style>
</head>
<body>
</body>
</html>
The clearfix hack is a popular way to contain floats (N. Gallagher aka @necolas)
Not to be confused with the clear property, clearfix is a concept (that is also related to floats, thus the possible
confusion). To contain floats, you've to add .cf or .clearfix class on the container (the parent) and style this class
with a few rules described below.
3 versions with slightly different effects (sources :A new micro clearfix hack by N. Gallagher and clearfix reloaded by
T. J. Koblentz):
.cf:after {
clear: both;
}
.cf:after {
clear: both;
.cf:after {
clear: both;
}
/**
* For IE 6/7 only
* Include this rule to trigger hasLayout and contain floats.
*/
.cf {
*zoom: 1;
}
Other resource: Everything you know about clearfix is wrong (clearfix and BFC - Block Formatting Context while
hasLayout relates to outdated browsers IE6 maybe 7)
<div>
<p>This is DIV 1</p>
</div>
<div>
<p>This is DIV 2</p>
</div>
HTML:
<div class="outer-div">
<div class="inner-div1">
<p>This is DIV 1</p>
</div>
<div class="inner-div2">
<p>This is DIV 2</p>
</div>
</div>
CSS
.inner-div1 {
width: 50%;
margin-right:0px;
float:left;
background : #337ab7;
padding:50px 0px;
}
.inner-div2 {
width: 50%;
margin-right:0px;
float:left;
background : #dd2c00;
padding:50px 0px;
}
p {
text-align:center;
}
HTML:
<div class="wrapper">
<div class="sidebar">
<h2>Sidebar</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio.</p>
</div>
<div class="content">
<h1>Content</h1>
<p>Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque
nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin
ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, suscipit quis, luctus non,
massa. Fusce ac turpis quis ligula lacinia aliquet. </p>
</div>
</div>
CSS:
.wrapper {
width:600px;
padding:20px;
background-color:pink;
/* Floated elements don't use any height. Adding "overflow:hidden;" forces the
parent element to expand to contain its floated children. */
overflow:hidden;
}
.sidebar {
width:150px;
float:left;
background-color:blue;
.content {
width:450px;
float:right;
background-color:yellow;
}
<div class="wrapper">
<div class="left-sidebar">
<h1>Left Sidebar</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p>
</div>
<div class="content">
<h1>Content</h1>
<p>Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque
nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin
ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, suscipit quis, luctus non,
massa. </p>
</div>
<div class="right-sidebar">
<h1>Right Sidebar</h1>
<p>Fusce ac turpis quis ligula lacinia aliquet.</p>
</div>
</div>
CSS:
.wrapper {
width:600px;
background-color:pink;
padding:20px;
/* Floated elements don't use any height. Adding "overflow:hidden;" forces the
parent element to expand to contain its floated children. */
overflow:hidden;
}
.left-sidebar {
width:150px;
background-color:blue;
float:left;
}
.content {
width:300px;
background-color:yellow;
float:left;
}
.right-sidebar {
width:150px;
background-color:green;
float:right;
}
HTML:
<div class="sidebar">
<h1>Sidebar</h1>
<img src="http://lorempixel.com/150/200/" />
</div>
<div class="content">
<h1>Content</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed
cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis
ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia
arcu eget nulla. </p>
<p>Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque
nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin
ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, suscipit quis, luctus non,
massa. Fusce ac turpis quis ligula lacinia aliquet. Mauris ipsum. Nulla metus metus, ullamcorper
vel, tincidunt sed, euismod in, nibh. </p>
</div>
CSS:
.sidebar {
/* `display:table;` shrink-wraps the column */
display:table;
float:left;
background-color:blue;
}
.content {
/* `overflow:hidden;` prevents `.content` from flowing under `.sidebar` */
overflow:hidden;
background-color:yellow;
}
Fiddle
element {
font: [font-style] [font-variant] [font-weight] [font-size/line-height] [font-family];
}
You can have all your font-related styles in one declaration with the font shorthand. Simply use the font property,
and put your values in the correct order.
For example, to make all p elements bold with a font size of 20px and using Arial as the font family typically you
would code it as follows:
p {
font-weight: bold;
font-size: 20px;
font-family: Arial, sans-serif;
}
p {
font: bold 20px Arial, sans-serif;
}
Note: that since font-style, font-variant, font-weight and line-height are optional, the three of them are
skipped in this example. It is important to note that using the shortcut resets the other attributes not given.
Another important point is that the two necessary attributes for the font shortcut to work are font-size and font-
family. If they are not both included the shortcut is ignored.
font-style: normal;
font-variant: normal;
font-weight: normal;
q {
quotes: "«" "»";
}
CSS:
#element-one {
font-size: 30px;
}
#element-two {
font-size: 10px;
}
The text inside #element-one will be 30px in size, while the text in #element-two will be 10px in size.
The direction property is used to change the horizontal text direction of an element.
The writing-mode property changes the alignment of text so it can be read from top-to-bottom or from left-to-right,
depending on the language.
The browser will attempt to apply the font face "Segoe UI" to the characters within the elements targeted by the
above property. If this font is not available, or the font does not contain a glyph for the required character, the
browser will fall back to Tahoma, and, if necessary, any sans-serif font on the user's computer. Note that any font
names with more than one word such as "Segoe UI" need to have single or double quotes around them.
The browser will attempt to apply the font face "Consolas" to the characters within the elements targeted by the
above property. If this font is not available, or the font does not contain a glyph for the required character, the
browser will fall back to "Courier New," and, if necessary, any monospace font on the user's computer.
.text {
overflow: hidden;
text-overflow: ellipsis;
}
Unfortunately, text-overflow: ellipsis only works on a single line of text. There is no way to support ellipsis on
the last line in standard CSS, but it can be achieved with non-standard webkit-only implementation of flexboxes.
.giveMeEllipsis {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: N; /* number of lines to show */
line-height: X; /* fallback */
max-height: X*N; /* fallback */
}
http://jsfiddle.net/csYjC/1131/
Resources:
https://www.w3.org/TR/2012/WD-css3-ui-20120117/#text-overflow0
h1 {
text-shadow: 2px 2px 10px #0000FF;
}
Multiple Shadows
h1 {
text-shadow: 0 0 3px #FF0000, 0 0 5px #0000FF;
}
CSS
.example1 {
text-transform: uppercase;
}
.example2 {
text-transform: capitalize;
}
.example3 {
text-transform: lowercase;
}
HTML
<p class="example1">
all letters in uppercase <!-- "ALL LETTERS IN UPPERCASE" -->
</p>
<p class="example2">
all letters in capitalize <!-- "All Letters In Capitalize (Sentence Case)" -->
</p>
<p class="example3">
all letters in lowercase <!-- "all letters in lowercase" -->
</p>