2013-11-18 23:54:59 +01:00
---
2018-07-18 23:04:31 +02:00
title: Using < kbd > for fun and profit
2018-07-19 00:22:06 +02:00
image: ./kremalicious-kbdfun-teaser.png
Gatsby → Astro (#829)
* basic astro setup, kick out all gatsby configs
* move content folder
* src/pages setup
* more file reorg
* more config updates
* more reorgs
* refactor
* refactor
* bump astro
* refactor
* svg icon build system, theme switch
* remark plugin for lead paragraph, more refactor
* make images work
* post meta
* custom Picture component
* Pagination, More component, 404 fixes
* linking fixes
* add table of contents
* post actions fixes
* tag fixes
* content changes
* content changes: move media files to their posts
* more content moving, remove media folder
* refactor remark-lead-paragraph
* link css file when defined in post frontmatter
* move content up again
* kbd post update
* allow js
* downloads solution
* add astro check
* redirect_from solution
* githubLink solution
* reorg
* exif solution as prebuild step
* exif solution on each post during build
* isolate lead paragraph extraction to articles
* restore Exif components
* deploy script update
* fix redirects
* xml & json feeds
* build fix
* fix exif readout in production
* head and seo tweaks, add feeds
* tweak image display
* archive pages with single layout
* restore tags archive
* sitemap setup
* restore thanks page functionality
* reorg
* cleanup
* parallel scripts during prebuild
* restore jest setup
* remove jest, switch to vitest as test runner
* adapt CI
* test refactor
* typescript tweaks
* avatar fixes
* typings
* restore search functionality
* theme switch with nanostores
* fixes
* test fixes
* restore changelog functionality
* umami script
* border color tweak
* related posts with fuse.js
* plawright e2e testing setup
* search tweaks
* simplify typekit loading
* photo fix
* e2e tests
* related posts fix
* fix tags archive
* tweaks
* tweaks
* linux snapshots
* fix header test
* new symlink tactic
* fix dev server in codespaces
* fix yaml
* ci fixes
* changelog loading tweaks
* e2e against dev server on ci
* changelog tweaks
* ci tweaks
* ci tweaks
* ci tweaks
* docs updates
* ci tweaks
* refactor photo creation script
* package updates
* refactor search
* ci tweak
* ci tweaks
* test tweaks, more unit tests
* more unit tests
* post creation script tweaks
* refactor new scripts, test them for real life
* more tests
* refactor
* codeclimate-action update
* uses update
* limit ci runs
* fix theme toggle, test it
* more tests
* favicon files cleanup
* icon components location change
* type checking through ci
* command fixes
* ci fix
* search tweaks
* ci tweaks
* revised favicons, write post draft about it
* drafts filtering fix
* lint fix, favicon fixes
* copy changes
* fix related search images
* content updates
* new codeblock styles, copy tweaks, fixes
* package updates
* typing fixes
* lint fix
* content updates
* restore link posts
* faster theme switching
* split up astro utils
* related posts fixes
* fix
* refactor
* fixes
* copy tweaks
* fixes
* picture tweaks
* image fixes
* feed fixes, adapt for json feed v1.1
* e2e test updates
* layout tweaks
* update snaphots
* migrate to createMarkdownProcessor
* ci cache tweaks
* activate more browsers for e2e testing
* switch to macos-13 images
* build caching tweaks
* markdown fix
* set image quality
* remove avif generation
* picture tweaks
* head fixes
* add og:image:alt
* create-icons test
* new post: Favicon Generation with Astro
2023-09-18 03:16:53 +02:00
style: /post-kbd.css
2013-11-18 23:54:59 +01:00
author: Matthias Kretschmann
2013-11-19 23:21:19 +01:00
2013-11-18 23:54:59 +01:00
date: 2012-07-16 14:36:58+00:00
2018-09-13 20:35:08 +02:00
2016-04-16 20:37:23 +02:00
tags:
2019-05-12 16:37:44 +02:00
- design
- css
2020-05-10 22:57:00 +02:00
- development
2013-11-18 23:54:59 +01:00
---
Gatsby → Astro (#829)
* basic astro setup, kick out all gatsby configs
* move content folder
* src/pages setup
* more file reorg
* more config updates
* more reorgs
* refactor
* refactor
* bump astro
* refactor
* svg icon build system, theme switch
* remark plugin for lead paragraph, more refactor
* make images work
* post meta
* custom Picture component
* Pagination, More component, 404 fixes
* linking fixes
* add table of contents
* post actions fixes
* tag fixes
* content changes
* content changes: move media files to their posts
* more content moving, remove media folder
* refactor remark-lead-paragraph
* link css file when defined in post frontmatter
* move content up again
* kbd post update
* allow js
* downloads solution
* add astro check
* redirect_from solution
* githubLink solution
* reorg
* exif solution as prebuild step
* exif solution on each post during build
* isolate lead paragraph extraction to articles
* restore Exif components
* deploy script update
* fix redirects
* xml & json feeds
* build fix
* fix exif readout in production
* head and seo tweaks, add feeds
* tweak image display
* archive pages with single layout
* restore tags archive
* sitemap setup
* restore thanks page functionality
* reorg
* cleanup
* parallel scripts during prebuild
* restore jest setup
* remove jest, switch to vitest as test runner
* adapt CI
* test refactor
* typescript tweaks
* avatar fixes
* typings
* restore search functionality
* theme switch with nanostores
* fixes
* test fixes
* restore changelog functionality
* umami script
* border color tweak
* related posts with fuse.js
* plawright e2e testing setup
* search tweaks
* simplify typekit loading
* photo fix
* e2e tests
* related posts fix
* fix tags archive
* tweaks
* tweaks
* linux snapshots
* fix header test
* new symlink tactic
* fix dev server in codespaces
* fix yaml
* ci fixes
* changelog loading tweaks
* e2e against dev server on ci
* changelog tweaks
* ci tweaks
* ci tweaks
* ci tweaks
* docs updates
* ci tweaks
* refactor photo creation script
* package updates
* refactor search
* ci tweak
* ci tweaks
* test tweaks, more unit tests
* more unit tests
* post creation script tweaks
* refactor new scripts, test them for real life
* more tests
* refactor
* codeclimate-action update
* uses update
* limit ci runs
* fix theme toggle, test it
* more tests
* favicon files cleanup
* icon components location change
* type checking through ci
* command fixes
* ci fix
* search tweaks
* ci tweaks
* revised favicons, write post draft about it
* drafts filtering fix
* lint fix, favicon fixes
* copy changes
* fix related search images
* content updates
* new codeblock styles, copy tweaks, fixes
* package updates
* typing fixes
* lint fix
* content updates
* restore link posts
* faster theme switching
* split up astro utils
* related posts fixes
* fix
* refactor
* fixes
* copy tweaks
* fixes
* picture tweaks
* image fixes
* feed fixes, adapt for json feed v1.1
* e2e test updates
* layout tweaks
* update snaphots
* migrate to createMarkdownProcessor
* ci cache tweaks
* activate more browsers for e2e testing
* switch to macos-13 images
* build caching tweaks
* markdown fix
* set image quality
* remove avif generation
* picture tweaks
* head fixes
* add og:image:alt
* create-icons test
* new post: Favicon Generation with Astro
2023-09-18 03:16:53 +02:00
There's this HTML element meant for marking up keyboard keys named `kbd` . Obviously it can be styled with CSS so why not use it to make those elements look a bit more like hardware or the iOS and Android software keys.
2013-11-18 23:54:59 +01:00
The above picture might be blurry depending on the device you're using so here's a live rendered demo:
2013-11-19 23:21:19 +01:00
< kbd > Light< / kbd > < kbd class = "dark" > Dark< / kbd > < kbd class = "ios" > iOS< / kbd > < kbd class = "android" > An< / kbd > < kbd class = "android dark" > dro< / kbd > < kbd class = "android color" > id< / kbd >
2013-11-18 23:54:59 +01:00
They are completely styled with CSS3 so they're sharp on all screens no matter how high the dpi. Have a look at the [full demo ](http://lab.kremalicious.com/kbdfun/ ) or grab the project folder with the CSS & LESS files from GitHub. The code is under the MIT license so you're free to use it in any personal or commercial project.
2015-06-22 21:28:31 +02:00
< p class = "content-download" >
2021-03-15 21:37:17 +01:00
< a class = "btn btn-primary icon-compass" href = "http://lab.kremalicious.com/kbdfun/" > Demo< / a >
< a class = "icon-github btn" href = "https://github.com/kremalicious/kbdfun/" > Github< / a >
2014-07-13 01:08:55 +02:00
< / p >
2013-11-18 23:54:59 +01:00
## Usage
### CSS
2015-08-23 21:21:30 +02:00
Just drop in the `kbdftw.css` in your `head` :
2013-11-18 23:54:59 +01:00
2014-08-09 23:37:26 +02:00
```html
2019-05-12 16:37:44 +02:00
< link rel = "stylesheet" href = "kbdfun.css" / >
2014-08-09 23:37:26 +02:00
```
2013-11-18 23:54:59 +01:00
If you want to use the Android key style, include roboto.css before:
2018-07-18 23:04:31 +02:00
```html
2019-05-12 16:37:44 +02:00
< link rel = "stylesheet" href = "roboto.css" / >
< link rel = "stylesheet" href = "kbdfun.css" / >
2018-07-18 23:04:31 +02:00
```
2013-11-18 23:54:59 +01:00
You also need to add all the Roboto font files from assets/fonts to your project.
### LESS
2015-08-23 21:21:30 +02:00
There're some variables in the `kbdfun.less` file you can customize.
2013-11-18 23:54:59 +01:00
2015-08-23 21:21:30 +02:00
For the Android style, there's `roboto.less` as include at the end. But the font files won't load unless you uncomment the `.font-roboto` line in kbdftw.less. This is to make sure, users won't download all the font files if you don't use the Android style.
2013-11-18 23:54:59 +01:00
### Markup
The default styling are light keys with Lucida Grande as font:
2018-07-18 23:04:31 +02:00
```html
< kbd > Q< / kbd >
```
2018-09-24 01:09:50 +02:00
2018-07-18 23:04:31 +02:00
becomes < kbd > Q< / kbd >
2013-11-18 23:54:59 +01:00
Add a dark class to get the dark keys:
2018-07-18 23:04:31 +02:00
```html
< kbd class = "dark" > Q< / kbd >
```
2018-09-24 01:09:50 +02:00
2018-07-18 23:04:31 +02:00
becomes < kbd class = "dark" > Q< / kbd >
2013-11-18 23:54:59 +01:00
Adding an ios or android class gives a replica of those system keys. Android uses three different colors on the default keyboard.
2018-07-18 23:04:31 +02:00
```html
< kbd class = "ios" > Q< / kbd >
```
2018-09-24 01:09:50 +02:00
2018-07-18 23:04:31 +02:00
becomes < kbd class = "ios" > Q< / kbd >
2013-11-18 23:54:59 +01:00
2018-07-18 23:04:31 +02:00
```html
< kbd class = "android" > Q< / kbd >
```
2018-09-24 01:09:50 +02:00
2018-07-18 23:04:31 +02:00
becomes < kbd class = "android" > Q< / kbd >
2013-11-18 23:54:59 +01:00
2018-07-18 23:04:31 +02:00
```html
< kbd class = "android dark" > Q< / kbd >
```
2018-09-24 01:09:50 +02:00
2018-07-18 23:04:31 +02:00
becomes < kbd class = "android dark" > Q< / kbd >
2013-11-18 23:54:59 +01:00
2018-07-18 23:04:31 +02:00
```html
< kbd class = "android color" > Q< / kbd >
```
2018-09-24 01:09:50 +02:00
2018-07-18 23:04:31 +02:00
becomes < kbd class = "android color" > Q< / kbd >
2013-11-18 23:54:59 +01:00
I've let the default `display: inline` intact so all padding on the `kbd` elements won't affect the line-height of the surrounding text. This leads to problems when you want to use them over multiple lines so just make them `display: inline-block` in this scenario.
2015-06-22 21:28:31 +02:00
Pro Tip: if you want to replicate all Mac keyboards after 2003 you have to get VAG rounded for the font.