<strong>Giving your users a way to customise the interface to their preference is a huge win for user experience. Here we are going to provide the user with a simple switch to toggle between dark mode and light mode and we will also try to remember their preference for future visits.</strong>
Giving your users a way to customise the interface to their preference is a huge win for user experience. Here we are going to provide the user with a simple switch to toggle between dark mode and light mode and we will also try to remember their preference for future visits.
Let’s begin!
If you don’t have a website of your own to which you wish to add this functionality, use this demo website to follow along.
Adding the CSSWe will be adding CSS custom properties also known as CSS variables, which we can reference and modify throughout the document. If you wish to read more about custom properties you can read on MDN.
Here’s the tldr; version -
Custom properties (sometimes referred to as CSS variables or cascading variables) are entities defined by CSS authors that contain specific values to be reused throughout a document. They are set using custom property notation (e.g., --main-color: black;) and are accessed using the var() function (e.g., color: var(–main-color);)
First, we’ll add our light or default mode css variables to the :root
pseudo class. It matches with the root element in your document tree, generally the <html>
tag. We will use :root
because we want to avail the variables globally.
:root { --primary-color: #302AE6; --secondary-color: #536390; --font-color: #424242; --bg-color: #fff; --heading-color: #292922; }
Second, we’ll add our dark mode css variables.
[data-theme="dark"] {
--primary-color: #9A97F3;
--secondary-color: #818cab;
--font-color: #e1e1ff;
--bg-color: #161625;
--heading-color: #818cab;
}
What is [data-theme="dark"]
? This means we are referencing a data
attribute called data-theme
with a value “dark”. We will find the use of it in a while.
Then, we can reference these variables in our stylesheets like so-
body {Adding the HTML “toggle switch markup”
background-color: var(--bg-color);
color: var(--font-color);/*other styles*/ .....
}
h1 {
color: var(--secondary-color);/*other styles*/ .....
}
a {
color: var(--primary-color);/*other styles*/ .....
}
This is essentially just a checkbox, however we will add some additional markup to style like a toggle switch. I referenced the styles from this codepen.
<div class="theme-switch-wrapper">Adding the JavaScript
<label class="theme-switch" for="checkbox">
<input type="checkbox" id="checkbox" />
<div class="slider round"></div>
</label>
<em>Enable Dark Mode!</em>
</div>/Simple css to style it like a toggle switch/
.theme-switch-wrapper {
display: flex;
align-items: center;em {
margin-left: 10px;
font-size: 1rem;
}
}
.theme-switch {
display: inline-block;
height: 34px;
position: relative;
width: 60px;
}.theme-switch input {
display:none;
}.slider {
background-color: #ccc;
bottom: 0;
cursor: pointer;
left: 0;
position: absolute;
right: 0;
top: 0;
transition: .4s;
}.slider:before {
background-color: #fff;
bottom: 4px;
content: "";
height: 26px;
left: 4px;
position: absolute;
transition: .4s;
width: 26px;
}input:checked + .slider {
background-color: #66bb6a;
}input:checked + .slider:before {
transform: translateX(26px);
}.slider.round {
border-radius: 34px;
}.slider.round:before {
border-radius: 50%;
}
The final part is to add the bit of JavaScript to tie it all together.
We have 3 tasks in hand-
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
}
else {
document.documentElement.setAttribute('data-theme', 'light');
}
}toggleSwitch.addEventListener('change', switchTheme, false);
Remember, the data-theme
attribute we referenced in CSS above, this is where it’s getting added to our root element.
We will use browser’s localStorage to store the user preference.
Let’s modify our switchTheme
function -
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('theme', 'dark'); //add this
}
else {
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('theme', 'light'); //add this
}
}
We will check if the theme preference is saved, if yes then we will, accordingly-
data-theme
attribute
const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null;if (currentTheme) {
document.documentElement.setAttribute('data-theme', currentTheme);if (currentTheme === 'dark') { toggleSwitch.checked = true; }
}
That’s it! Check out the full demo below.
I recently added this to [my website](https://ananyaneogi.com), so check that out as well, maybe!Pro-Tip: How to decide on the color scheme?
My suggestion is to stay in the same spectrum of your primary or brand color and generate a palette out of it. Use the darkest shade from the palette as the background color and the lighter shades as font colors when in dark mode. I used this color shades generator for generating my color palette.
Even if you don’t end up using the exact colors generated, it is still a good place to start. Even I ended up fine tuning the colors I ultimately used.
Originally published by Ananya Neogi at https://dev.to/ananyaneogi/create-a-dark-light-mode-switch-with-css-variables-34l8
Follow great articles on Twitter
Learn More
☞ Build Responsive Real World Websites with HTML5 and CSS3
☞ Web Design for Beginners: Real World Coding in HTML & CSS
☞ Beginner Full Stack Web Development: HTML, CSS, React & Node
☞ The Complete HTML & CSS Course - From Novice To Professional
☞ CSS - The Complete Guide (incl. Flexbox, Grid & Sass)
☞ The Complete Sass & SCSS Course: From Beginner to Advanced
In this article, we want to show you how to create a table using HTML tags and Stylesheet (CSS). HTML table may vary depends on data and style requirements. Sometimes, in the real application, we use an HTML table as a layout of the Email template in HTML format.
In this article, we want to show you how to create a table using HTML tags and Stylesheet (CSS). HTML table may vary depends on data and style requirements. Sometimes, in the real application, we use an HTML table as a layout of the Email template in HTML format.
HTML Table uses to represent tabular data like in the Excel Application and arrange the layout of the Web View.
There are some common HTML tags that use by HTML table:
Before start practicing HTML 5 table, make sure all
<!DOCTYPE html>
<html>
<head>
<title>Basic HTML Table</title>
</head>
<body>
<table></table>
</body>
</html>
Basic HTML Table
Here is an example of a basic HTML table or common use of the above HTML tags to define or create a table.
<table>
<tr>
<th>No.</th>
<th>Full Name</th>
<th>Position</th>
<th>Salary</th>
</tr>
<tr>
<td>1</td>
<td>Bill Gates</td>
<td>Founder Microsoft</td>
<td><table>
<tr>
<th>No.</th>
<th>Full Name</th>
<th>Position</th>
<th>Salary</th>
</tr>
<tr>
<td>1</td>
<td>Bill Gates</td>
<td>Founder Microsoft</td>
<td>$1000</td>
</tr>
<tr>
<td>2</td>
<td>Steve Jobs</td>
<td>Founder Apple</td>
<td>$1200</td>
</tr>
<tr>
<td>3</td>
<td>Larry Page</td>
<td>Founder Google</td>
<td>$1100</td>
</tr>
<tr>
<td>4</td>
<td>Mark Zuckeberg</td>
<td>Founder Facebook</td>
<td>$1300</td>
</tr>
</table>
000</td>
</tr>
<tr>
<td>2</td>
<td>Steve Jobs</td>
<td>Founder Apple</td>
<td><table>
<tr>
<th>No.</th>
<th>Full Name</th>
<th>Position</th>
<th>Salary</th>
</tr>
<tr>
<td>1</td>
<td>Bill Gates</td>
<td>Founder Microsoft</td>
<td>$1000</td>
</tr>
<tr>
<td>2</td>
<td>Steve Jobs</td>
<td>Founder Apple</td>
<td>$1200</td>
</tr>
<tr>
<td>3</td>
<td>Larry Page</td>
<td>Founder Google</td>
<td>$1100</td>
</tr>
<tr>
<td>4</td>
<td>Mark Zuckeberg</td>
<td>Founder Facebook</td>
<td>$1300</td>
</tr>
</table>
200</td>
</tr>
<tr>
<td>3</td>
<td>Larry Page</td>
<td>Founder Google</td>
<td><table>
<tr>
<th>No.</th>
<th>Full Name</th>
<th>Position</th>
<th>Salary</th>
</tr>
<tr>
<td>1</td>
<td>Bill Gates</td>
<td>Founder Microsoft</td>
<td>$1000</td>
</tr>
<tr>
<td>2</td>
<td>Steve Jobs</td>
<td>Founder Apple</td>
<td>$1200</td>
</tr>
<tr>
<td>3</td>
<td>Larry Page</td>
<td>Founder Google</td>
<td>$1100</td>
</tr>
<tr>
<td>4</td>
<td>Mark Zuckeberg</td>
<td>Founder Facebook</td>
<td>$1300</td>
</tr>
</table>
100</td>
</tr>
<tr>
<td>4</td>
<td>Mark Zuckeberg</td>
<td>Founder Facebook</td>
<td><table>
<tr>
<th>No.</th>
<th>Full Name</th>
<th>Position</th>
<th>Salary</th>
</tr>
<tr>
<td>1</td>
<td>Bill Gates</td>
<td>Founder Microsoft</td>
<td>$1000</td>
</tr>
<tr>
<td>2</td>
<td>Steve Jobs</td>
<td>Founder Apple</td>
<td>$1200</td>
</tr>
<tr>
<td>3</td>
<td>Larry Page</td>
<td>Founder Google</td>
<td>$1100</td>
</tr>
<tr>
<td>4</td>
<td>Mark Zuckeberg</td>
<td>Founder Facebook</td>
<td>$1300</td>
</tr>
</table>
300</td>
</tr>
</table>
Output:
As a default, HTML 5 table not defined with border, you should add the border manually in each table cells.
HTML Table with BorderTo add a basic border to HTML 5 table, simply add this style attribute in
<table style="border: solid 1px #aaa999;">
Output:
As you can see, Table Border only draw lines to the table only and cells left borderless. To make border for all cells, add style attribute to all
<table style="border: solid 1px #aaa999;">
<tr>
<th style="border: solid 1px #aaa999;">No.</th>
<th style="border: solid 1px #aaa999;">Full Name</th>
<th style="border: solid 1px #aaa999;">Position</th>
<th style="border: solid 1px #aaa999;">Salary</th>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">1</td>
<td style="border: solid 1px #aaa999;">Bill Gates</td>
<td style="border: solid 1px #aaa999;">Founder Microsoft</td>
<td style="border: solid 1px #aaa999;"><table style="border: solid 1px #aaa999;">
<tr>
<th style="border: solid 1px #aaa999;">No.</th>
<th style="border: solid 1px #aaa999;">Full Name</th>
<th style="border: solid 1px #aaa999;">Position</th>
<th style="border: solid 1px #aaa999;">Salary</th>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">1</td>
<td style="border: solid 1px #aaa999;">Bill Gates</td>
<td style="border: solid 1px #aaa999;">Founder Microsoft</td>
<td style="border: solid 1px #aaa999;">$1000</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">2</td>
<td style="border: solid 1px #aaa999;">Steve Jobs</td>
<td style="border: solid 1px #aaa999;">Founder Apple</td>
<td style="border: solid 1px #aaa999;">$1200</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">3</td>
<td style="border: solid 1px #aaa999;">Larry Page</td>
<td style="border: solid 1px #aaa999;">Founder Google</td>
<td style="border: solid 1px #aaa999;">$1100</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">4</td>
<td style="border: solid 1px #aaa999;">Mark Zuckeberg</td>
<td style="border: solid 1px #aaa999;">Founder Facebook</td>
<td style="border: solid 1px #aaa999;">$1300</td>
</tr>
</table>
000</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">2</td>
<td style="border: solid 1px #aaa999;">Steve Jobs</td>
<td style="border: solid 1px #aaa999;">Founder Apple</td>
<td style="border: solid 1px #aaa999;"><table style="border: solid 1px #aaa999;">
<tr>
<th style="border: solid 1px #aaa999;">No.</th>
<th style="border: solid 1px #aaa999;">Full Name</th>
<th style="border: solid 1px #aaa999;">Position</th>
<th style="border: solid 1px #aaa999;">Salary</th>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">1</td>
<td style="border: solid 1px #aaa999;">Bill Gates</td>
<td style="border: solid 1px #aaa999;">Founder Microsoft</td>
<td style="border: solid 1px #aaa999;">$1000</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">2</td>
<td style="border: solid 1px #aaa999;">Steve Jobs</td>
<td style="border: solid 1px #aaa999;">Founder Apple</td>
<td style="border: solid 1px #aaa999;">$1200</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">3</td>
<td style="border: solid 1px #aaa999;">Larry Page</td>
<td style="border: solid 1px #aaa999;">Founder Google</td>
<td style="border: solid 1px #aaa999;">$1100</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">4</td>
<td style="border: solid 1px #aaa999;">Mark Zuckeberg</td>
<td style="border: solid 1px #aaa999;">Founder Facebook</td>
<td style="border: solid 1px #aaa999;">$1300</td>
</tr>
</table>
200</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">3</td>
<td style="border: solid 1px #aaa999;">Larry Page</td>
<td style="border: solid 1px #aaa999;">Founder Google</td>
<td style="border: solid 1px #aaa999;"><table style="border: solid 1px #aaa999;">
<tr>
<th style="border: solid 1px #aaa999;">No.</th>
<th style="border: solid 1px #aaa999;">Full Name</th>
<th style="border: solid 1px #aaa999;">Position</th>
<th style="border: solid 1px #aaa999;">Salary</th>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">1</td>
<td style="border: solid 1px #aaa999;">Bill Gates</td>
<td style="border: solid 1px #aaa999;">Founder Microsoft</td>
<td style="border: solid 1px #aaa999;">$1000</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">2</td>
<td style="border: solid 1px #aaa999;">Steve Jobs</td>
<td style="border: solid 1px #aaa999;">Founder Apple</td>
<td style="border: solid 1px #aaa999;">$1200</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">3</td>
<td style="border: solid 1px #aaa999;">Larry Page</td>
<td style="border: solid 1px #aaa999;">Founder Google</td>
<td style="border: solid 1px #aaa999;">$1100</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">4</td>
<td style="border: solid 1px #aaa999;">Mark Zuckeberg</td>
<td style="border: solid 1px #aaa999;">Founder Facebook</td>
<td style="border: solid 1px #aaa999;">$1300</td>
</tr>
</table>
100</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">4</td>
<td style="border: solid 1px #aaa999;">Mark Zuckeberg</td>
<td style="border: solid 1px #aaa999;">Founder Facebook</td>
<td style="border: solid 1px #aaa999;"><table style="border: solid 1px #aaa999;">
<tr>
<th style="border: solid 1px #aaa999;">No.</th>
<th style="border: solid 1px #aaa999;">Full Name</th>
<th style="border: solid 1px #aaa999;">Position</th>
<th style="border: solid 1px #aaa999;">Salary</th>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">1</td>
<td style="border: solid 1px #aaa999;">Bill Gates</td>
<td style="border: solid 1px #aaa999;">Founder Microsoft</td>
<td style="border: solid 1px #aaa999;">$1000</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">2</td>
<td style="border: solid 1px #aaa999;">Steve Jobs</td>
<td style="border: solid 1px #aaa999;">Founder Apple</td>
<td style="border: solid 1px #aaa999;">$1200</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">3</td>
<td style="border: solid 1px #aaa999;">Larry Page</td>
<td style="border: solid 1px #aaa999;">Founder Google</td>
<td style="border: solid 1px #aaa999;">$1100</td>
</tr>
<tr>
<td style="border: solid 1px #aaa999;">4</td>
<td style="border: solid 1px #aaa999;">Mark Zuckeberg</td>
<td style="border: solid 1px #aaa999;">Founder Facebook</td>
<td style="border: solid 1px #aaa999;">$1300</td>
</tr>
</table>
300</td>
</tr>
</table>
If you want a simple coding without writing a style for each cells, use
In this tutorial, we'll cover all the CSS units, and, most importantly, which ones to use (and which NOT to use) for which situations.
In web development, css units are often confusing as there are just many options. And, many css units - like px vs em vs rem, all seem to get the job done at times. But some are simply better than others and there are very good reasons why.
================
Thanks for reading :heart: If you liked this post, share it with all of your programming buddies! Follow me on Facebook | Twitter
☞ Advanced CSS and Sass: Flexbox, Grid, Animations and More!
☞ Build Responsive Real World Websites with HTML5 and CSS3
☞ CSS - The Complete Guide (incl. Flexbox, Grid & Sass)
☞ Beginner Full Stack Web Development: HTML, CSS, React & Node
Learn how to Make login form using HTML CSS - Create sign in form design using HTML and CSS
In in tutorial you will learn to create a login form in HTML and CSS coding