Notes on modern CSS and HTML
...for want of a better place to put and organize them.
Links
Other stuff...
Once you've analyzed the structure of your pages, it's time to take a look
under the proverbial hood and analyze your existing markup for presentational
HTML that can be replaced with structural markup.
For the love of all that is pure and good, get rid of <font> tags and spacer GIFs!
Likewise, lose the <b> and <br> markup.
Get rid of presentational markup for tables (bgcolor , background , and the like).
Replace purely presentational CSS coding (things like <span class="header"> ) with appropriate structural markup.
At the begining, give each div a border. For example,
div {border: 1px dotted gray; padding: .5em}
This will help you see where they begin and end, and also
whether or not you have any nesting going on.
Write your CSS for element selectors first (<html> , <body> ,
<p> , <h1> , <h2> , <ul> , <li> , etc.)
Use contextual or descendant selectors as much as possible. This will keep your
markup much cleaner. For example,
#subnav li {border: 1px solid black; padding: .5em; display: inline}
will only affect list items that occur within your
subnav div .
Mason's tutorial on CSS styles
CSS styles
#id s are generally for unique, one-shot cases whereas,
.class es are rules expected to apply here and there when needed (like object classes).
<div id="test">
<p>
Text here...
</p>
</div>
#test { font-style: italic; }
will make the paragraph text above always italic.
<p id="test">
Text here...
</p>
will also be in italics no matter where, but here the example cries for a class
(<p class="..."> ) because it's not within the <div> and
it's likely going to be useful elsewhere.
In the example above, <td> text will also be italic. If that's not the intent, then
maybe do <td class="not-italic"> (or that effect) to prevent. You can also use
!important (but don't do it).
For margins, padding, etc.
Remember that margins are on the outside, padding is on the inside of the <div> or
other element. The CSS box model is:
margins
+-- border -------------------------
|
| padding
|
| +-----------------------------
| |
| | content
| |
Links to great sites with CSS suggestions
Useful and ready-to-use HTML 5 snippets
I ripped this collection off from a post on DZone; the author ripped them off
from elsewhere.
HTML5 Starter Template
When starting a new project, you need a starter template. Here is a concise and clean template
to serve as a basis for your HTML5 projects.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled</title>
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
</body>
</html>
Source:
http://snipplr.com/view/68539/plain-html5-starter-template/
Get Directions Form (Google Maps)
Here is a simple yet powerful code to create a form where the user can enter his location to
get directions to a specific place. Very useful for contact pages.
<form action="http://maps.google.com/maps" method="get" target="_blank">
<label for="saddr">Enter your location</label>
<input type="text" name="saddr" />
<input type="hidden" name="daddr" value="350 5th Ave New York, NY 10018 (Empire State Building)" />
<input type="submit" value="Get directions" />
</form>
Source:
Source: http://css-tricks.com/snippets/html/get-directions-form-google-maps/
Base64 Encode of a 1*1px “spacer” GIF
I don’t recommend using transparent “spacer” gifs, but I know that even in 2013, many people
are still using them from time to time. If you’re one of them, you’ll probably enjoy this Base64
encode of a 1*1px “spacer” gif. Way better than using an image.
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">
Source:
Source: http://css-tricks.com/snippets/html/base64-encode-of-1x1px-transparent-gif/
Regexp Pattern for Email Validation
HTML5 allows, among other things, validating emails using a regular expression pattern. Here is
a ready to use input field with the regexp pattern to validate an email address.
<input type="text" title="email" required pattern="[^@]+@[^@]+\.[a-zA-Z]{2,6}" />
Source:
Source: http://blog.staffannoteberg.com/2012/03/01/html5-form-validation-with-regex/
Valid Flash Embed
Are you often embedding Flash files into your html pages? If yes, you’d better save the valid
embedded code below for future use.
<object type="application/x-shockwave-flash"
data="your-flash-file.swf"
width="0" height="0">
<param name="movie" value="your-flash-file.swf" />
<param name="quality" value="high"/>
</object>
Source:
Source: http://yoast.com/articles/valid-flash-embedding/
HTML5 Video with Flash Fallback
Another great feature of the new HTML5 specification is definitely the video tag which allows
you to easily embed video files. But unfortunately, some browsers can’t deal with embedded
HTML5 video. So, here is a complete code snippet with a flash fallback for older browsers.
<video width="640" height="360" controls>
<source src="__VIDEO__.MP4" type="video/mp4" />
<source src="__VIDEO__.OGV" type="video/ogg" />
<object width="640" height="360" type="application/x-shockwave-flash" data="__FLASH__.SWF">
<param name="movie" value="__FLASH__.SWF" />
<param name="flashvars" value="controlbar=over&image=__POSTER__.JPG&file=__VIDEO__.MP4" />
<img src="__VIDEO__.JPG" width="640" height="360" alt="__TITLE__"
title="No video playback capabilities, please download the video below" />
</object>
</video>
Source:
Source: http://camendesign.com/code/video_for_everybody
iPhone Call & SMS Links
With the release of the iPhone, Apple introduced a quick way to create call and SMS links.
Here is a code snippet to keep in your library.
<a href="tel:1-408-555-5555">1-408-555-5555</a>
<a href="sms:1-408-555-1212">New SMS Message</a>
Source:
Source: https://developer.apple.com/library/ios/featuredarticles…
Autocompletion with HTML5 Datalists
Using the datalist element, HTML5 allows you to create a list of data to autocomplete an
input field. Super useful! Here is a code snippet to re-use in your own projects.
<input name="frameworks" list="frameworks" />
<datalist id="frameworks">
<option value="MooTools">
<option value="Moobile">
<option value="Dojo Toolkit">
<option value="jQuery">
<option value="YUI">
</datalist>
Source:
Source: http://davidwalsh.name/datalist
Country Drop-down List for Web Forms
Here’s another time saver: A ready-to-use dropdown list with all countries. Due to the
size of the code, please see the source directly.
Source:
Source: http://snipplr.com/view/4792/country-drop-down-list-for-web-forms/
Downloadable Files
HTML5 allows you to force download of files using the download attribute. Here is a
standard link to a downloadable file.
<!-- will download as "expenses.pdf" -->
<a href="/files/adlafjlxjewfasd89asd8f.pdf" download="expenses.pdf">Download Your Expense Report</a>
Useful line-drawing characters
The initial use of this table was for converting Linux tree representations
to display in HTML.
horizontal bar ─ ─
vertical bar │ │
last indent └ └
indent ├ ├
HTML character reference, diacritics, special characters, etc.
https://dev.w3.org/html5/html-author/charref
How to scale a div section
Normally, I scale the individual contents of a <div> , but that's cumbersome. Today,
I looked for something better. (Even though I know HTML very well and almost never have to look
stuff up, it doesn't mean I don't like to learn something new.) It's called zoom :
<div style="zoom: 0.85; -moz-transform: scale( 0.85 )">
(content including images, tables, lists, mere text, etc.)
</div>
—scales everything in the <div> to 85%. Now, the Mozilla setting is because
Firefox doesn't support this, but all other browsers do (reputedly). I've included it because
Firefox is a browser I accept to use occasionally.
Toggle open/closed (click to hide/click to unhide)
<!DOCTYPE html>
<html lang="en">
<head>
<title> Click to hide/show </title>
<meta charset="UTF-8">
<style>
.example
{
position: relative;
width: 200px;
height: 200px;
border: solid 4px #4b4b4b;
border-radius: 4px;
margin-bottom: 20px;
padding: 10px;
display: none;
font-family: sans-serif;
font-size: 32px;
}
label
{
padding: 10px;
background: #4b4b4b;
color: white;
border-radius: 4px;
font-family: sans-serif;
font-size: 32px;
display: inline-block;
margin-bottom: 20px;
cursor: pointer;
}
input[ type=checkbox ] { display: none; }
input[ type=checkbox ]:checked + .example { display: block; }
* { box-sizing: border-box; }
body { color: #4b4b4b; }
</style>
</head>
<body translate="no">
<div class="example-container">
<label for='checkbox'> Click to show/hide </label>
<input id='checkbox' type='checkbox' />
<div class="example"> Hello 👋 </div>
</div>
</body>
</html>
Keeping legend inside fieldset box despite hyperlinks
The key to keeping a <legend> inside the box line of a
<fieldset> (instead of seeing it rendered inside the
fieldset box) is not to use
<a name="name" />
...as the index/landing place, but, instead, this form:
<a name="name"></a>
Hiding and expanding lines in HTML
Here's how I succeeded in creating some documentation on a class in an API
while cleverly offering an example. The page (in the illustration below)
starts out with only the class definition. Clicking on the triangle (near the
word Pojo ) causes the XML corresponding to the class definition
to appear (as shown).
Note: I display the XML using Gorbachev's Syntax Highlighter, but that's not
an important part of the equation. (The highlighted lines removed from the HTML
below obviate the use of Gorbachev.)1
Imagine the following HTML page, contained in a single file. (For your
information and delight, I'm am displaying the contents of this example using
Gorbachev's Syntax Highlighter too.)
<html>
<head>
<title> Experiment </title>
<link rel="stylesheet" type="text/css" href="styles/shCore.css"/>
<link rel="stylesheet" type="text/css" href="styles/shThemeDefault.css"/>
<script type="text/javascript" src="scripts/shCore.js"></script>
<script type="text/javascript" src="scripts/shBrushXml.js"></script>
<script type="text/javascript">
SyntaxHighlighter.config.clipboardSwf = 'scripts/clipboard.swf';
SyntaxHighlighter.defaults['auto-links'] = false;
SyntaxHighlighter.all();
</script>
<style>
html { font-family: Candara; }
table.example { padding: 5px 0px 5px 5px }
td.example { vertical-align: top }
div.example { margin-left: 20px; margin-top: -40px; font-size: small }
</style>
</head>
<body>
<h2> This is a test </h2>
<a name="CustodianInfo" />
<table class="example"><tr><td class="example">
<pre>
class <b>CustodianInfo</b> extends <i>Pojo</i>
{
String oid;
String name;
<b>Telecom</b> telecom;
<b>Address</b> address;
}
</pre>
</td><td class="example">
<details><summary></summary>
<div class="example" style="width: 350px">
<pre class="brush: xml; gutter: false">
<custodianinfo>
<oid>2.16.840.1.113883.3.371</oid>
<name>Annette Funicello</name>
<telecom use="HP">385 861-3336</telecom>
<address use="WP">
<line>5800 Hollywood Boulevard</line>
<line>#1638</line>
<city>Berverly Hills</city>
<state>CA</state>
<zipcode>90210</zipcode>
<country>US</country>
</address>
</custodianinfo>
</pre>
</div>
</details>
</td></tr></table>
</body>
</html>
Note on writing the HTML including the example
Removing the <table> from the HTML above will return the effect
of the <details> mechanism to its usual verticality. Also, the
preformatted XML text that is the example (beginning with
<custodianinfo> and ending with </custodianinfo>
(lines 39 through 51), must be crafted with XML/HTML-legal angle brackets
for them to display as you would expect. I.e.: <oid> must be
typed as <oid> . (I was too tired to go to the trouble
of including this in my example. If you're doing this, you probably already
understand the problem anyway.)
Note in Gorbachev1
Underneath the subdirectory in which resides the HTML file above, for our
purposes let's name it example.html , must be placed the following,
minimal installation of Gorbachev, which only provides a display "brush"
for XML (HTML) syntax highlighting (and none for other languages):
.
├── example.html
├── scripts
│ ├── shAutoloader.js
│ ├── shBrushXml.js
│ └── shCore.js
└── styles
├── shCore.css
├── shCoreDefault.css
└── shThemeDefault.css
Highlighting list elements on hover
To make it so entire contents of an item in a list (<ol> ,
<ul> , etc.) get a changed backgroud color as you hover over
them, do this:
<style>
.list-item-green:hover { background-color: #DEFDE0; }
</style>
</head>
<body>
.
.
.
<ul>
<li class="list-item-green"> List element 1 </ul>
<li class="list-item-green"> List element 2 </ul>
<li class="list-item-green"> List element 3 </ul>
</ul>
Here's the example:
List element 1
List element 2
List element 3
HTML tricks to consider...
The picture element helps mete out different size images depending on display
device...
<picture>
<source media="(min-width: 800px)" srcset="large.jpg">
<source media="(min-width: 400px)" srcset="medium.jpg">
<img src="small.jpg" alt="Responsive Image">
</picture>
The output element permits data entry, a calculation and output of result...
<form oninput="result.value=parseInt(a.value)+parseInt(b.value)">
<input type="number" id="a" value="0">
+ <input type="number" id="b" value="0">
= <output name="result" for="a b">0</output>
</form>