Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Frontend Guidelines
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Ricardo Andrés Bello
September 02, 2015
Programming
1
110
Frontend Guidelines
HTML and CSS good practices and what NOT to do (:
Ricardo Andrés Bello
September 02, 2015
Tweet
Share
More Decks by Ricardo Andrés Bello
See All by Ricardo Andrés Bello
Rails Frontend Optimisations (part 2)
ricardoaandres
0
73
How Browsers Render
ricardoaandres
0
93
Bower + Rails
ricardoaandres
0
130
Rails Frontend Optimisations (part 1)
ricardoaandres
0
69
Other Decks in Programming
See All in Programming
米国のサイバーセキュリティタイムラインと見る Goの暗号パッケージの進化
tomtwinkle
2
640
AI 開発合宿を通して得た学び
niftycorp
PRO
0
160
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
1.1k
[SF Ruby Feb'26] The Silicon Heel
palkan
0
120
Linux Kernelの1文字のミスで 権限昇格ができた話
rqda
0
2.1k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
770
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
240
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
230
PHPのバージョンアップ時にも役立ったAST(2026年版)
matsuo_atsushi
0
220
CSC307 Lecture 14
javiergs
PRO
0
480
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
170
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
270
Featured
See All Featured
How GitHub (no longer) Works
holman
316
150k
ラッコキーワード サービス紹介資料
rakko
1
2.7M
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
230
Being A Developer After 40
akosma
91
590k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.2k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
280
Ruling the World: When Life Gets Gamed
codingconduct
0
180
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
410
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.4k
Accessibility Awareness
sabderemane
0
84
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
160
Transcript
FRONTEND GUIDELINES
HTML
SEMANTICS <h1> <figure> <img alt=‘Company’ src=‘logo.png’> </figure> </h1> <h1> <img
alt=‘Company’ src=‘logo.png’> </h1> <!-- bad --> <!-- good -->
<div id=‘main’> <div class=‘article’> <div class=‘header’> <h1>Blog post</h1> <p>Published: <span>21st
Feb, 2015</span></p> </div> <p>…</p> </div> </div> <main> <article> <header> <h1>Blog post</h1> <p>Published: <time datetime=‘2015-02-21’>21st Feb, 2015</time></p> </header> <p>…</p> </article> </main> <!-- bad --> <!-- good --> SEMANTICS
<meta http-equiv=Content-Type content=‘text/html; charset=utf-8’ /> <link rel=‘stylesheet’ href=‘style.css’ type=‘text/css’ />
<input type=‘email’ placeholder='
[email protected]
’ required=‘required’ /> <script src=‘main.js’ type=‘text/javascript’></script> <meta charset=‘utf-8’> <link rel=‘stylesheet’ href=‘style.css’> <input type=‘email’ placeholder='
[email protected]
’ required> <script src=‘main.js’></script> <!-- good --> <!-- bad --> BREVITY
<h1><img alt=‘Logo’ src=‘logo.png’></h1> <div class=‘button’></div> <h1><img alt=‘Acid Labs’ src=‘logo.png’></h1> <button></button>
<!-- good --> <!-- bad --> ACCESSIBILITY
<!doctype html> <html> <head> <title></title> </head> </html> <!doctype html> <html
lang=‘en’> <head> <meta charset=‘utf-8’> <title></title> </head> </html> <!-- good --> <!-- bad --> LANGUAGE
<!doctype html> <html> <head> <title></title> <script src=analytics.js></script> </head> </html> <!doctype
html> <html lang=‘en’> <head> <meta charset=‘utf-8’> <title></title> </head> <body> <script src=analytics.js></script> </body> </html> <!-- good --> <!-- bad --> PERFORMANCE
CSS
SEMI COLONS div { color: red } div { color:
red; } /* bad */ /* good */
NATURAL FLOW img { display: block; } img { vertical-align:
middle; } /* bad */ /* good */
NATURAL FLOW div { width: 100px; position: absolute; right: 0;
} div { width: 100px; margin-left: auto; } /* bad */ /* good */
SELECTORS div:first-of-type :last-child > p ~ * div:first-of-type .info /*
bad */ /* good */
SELECTORS img[src$=svg], ul > li:first-child { opacity: 0; } [src$=svg],
ul > :first-child { opacity: 0; } /* bad */ /* good */
SPECIFICITY .bar { color: green !important; } .foo { color:
red; } .foo.bar { color: green; } .foo { color: red; } /* bad */ /* good */
OVERRIDING li { visibility: hidden; } li:first-child { visibility: visible;
} li + li { visibility: hidden; } /* bad */ /* good */
INHERITANCE div h1, div p { text-shadow: 0 1px 0
#fff; } div { text-shadow: 0 1px 0 #fff; } /* bad */ /* good */
LANGUAGE :nth-child(2n + 1) { transform: rotate(360deg); } :nth-child(odd) {
transform: rotate(1turn); } /* bad */ /* good */
BREVITY div { transition: all 1s; top: 50%; margin-top: -10px;
padding-top: 5px; padding-right: 10px; padding-bottom: 20px; padding-left: 10px; } div { transition: 1s; top: calc(50% - 10px); padding: 5px 10px 20px; } /* bad */ /* good */
PREFIXES div { transform: scale(2); -webkit-transform: scale(2); -moz-transform: scale(2); -ms-transform:
scale(2); transition: 1s; -webkit-transition: 1s; -moz-transition: 1s; -ms-transition: 1s; } div { -webkit-transform: scale(2); transform: scale(2); transition: 1s; } /* bad */ /* good */
ANIMATIONS div:hover { animation: move 1s forwards; } @keyframes move
{ 100% { margin-left: 100px; } } div:hover { transition: 1s; transform: translateX(100px); } /* bad */ /* good */
UNITS div { margin: 0px; font-size: .9em; line-height: 22px; transition:
500ms; } div { margin: 0; font-size: .9rem; line-height: 1.5; transition: .5s; } /* bad */ /* good */
COLORS div { color: hsl(103, 54%, 43%); } div {
color: #5a3; } /* bad */ /* good */
DRAWING div::before { content: url(white-circle.svg); } div::before { content: "";
display: block; width: 20px; height: 20px; border-radius: 50%; background: #fff; } /* bad */ /* good */
None