Light Bulbs

Discoveries, Part 6

Discoveries #6

2020 is over and history. Well, may 2021 be with us. With this post I would like to continue the Discoveries, with new momentum. There was a lot to read over the holidays.

All the finds in this issue have something to do with visual aspects of web design in the broadest sense.

  • Drop-Shadow: The Underrated CSS Filter
  • css.gg - 700+ CSS Icons
  • SVGBox - API for Web Icons
  • Change Color of SVG on Hover
  • CSS filter generator to convert from black to target hex color
  • Responsive && Configurable SVG Waves
  • Balloon.css
  • How to Build a CSS-only Organizational Chart
  • Shifty
  • Brad Traversy's 50 Projects 50 Days

Read More

Oriental Lights

Use a duplicate image to drop a shadow

An alternative for 'box-shadow' on images

Depending on your design, sometimes it is nice to drop a shadow on an image to highlight it:

1
<img src="my-image.jpg" />
1
2
3
img {
box-shadow: 0px 25px 25px -10px #666;
}

Normal Box Shadow

But … it looks like a paper print of the image, with a light bulb in the first third above it. The shade is grey, boring and has been used and seen many times before…

An design related Instagram post from Muhammad Abdull of thewilsonthings, inspired me to use the image itself as the shadow in order to make the image look a bit translucent. Should be the same technique as that of a reflection. Here is the HTML/CSS code for it, as the people asking for it in the comments.

Read More

Metal Rose

Safely remove multiple classes using a prefix

Avoiding pitfalls when iterating over classList

Writing a Web App with HTML and JavaScript means you deal with several classes on your DOM elements in order to visualize state changes. And there are some pitfalls to be aware of with regard to removal.

Assuming you want to open some kind of sidebar above a container. In this sidebar you have several buttons to show different content via JavaScript and a close button, which closes the sidebar again. You HTML code maybe looks like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html>
<body>
<div id="container">... Main Content ...</div>

<nav>
<button id="open-sidebar">
</nav>

<aside id="sidebar">
<div class="content">... Sidebar Content ...</div>
<button id="close">Close Sidebar</button>
<button id="content-1">Show Content 1</button>
<button id="content-2">Show Content 2</button>
<button id="content-3">Show Content 3</button>
</aside>

</body>
</html>

By clicking on the open-sidebar button, the sidebar is opened and the action, respectively the new state, is vizualized by adding an appropriate class to the parent sidebar element. In order to make it easy for the user, the default content (Content 1) will be loaded also and its state will be marked with another class.

1
<aside class="sidebar open open-content-1">

A click on of the other content buttons (let’s say Content 2), will replace the current content and the aside classes will change into:

1
<aside class="sidebar open open-content-2">

Now we want to close the sidebar again, assuming that we don’t have stored the currently opened content in the JavaScript code…

Read More

Sky Rally III

Use and manage multiple Node.js versions on Windows 10

For a new project I needed to have Node 14 running on my Windows 10 machine, so installation was done quickly via downloading and running the setup file.

A short time later I wanted to write a new blog post here on kiko.io, which depends on the Node.js based static site generator Hexo … and ran into several problems.

First of all my hero image processing script (see Automatic Header Images in Hexo) returned an exception. The script uses hexo-fs and the problem is known quite some time, according to this Github issue. The guys recommend to downgrade to an older version of Node.js … :(

Ok … I needed a solution to install multiple Node.js versions and switch between them, depending on which project I want to work on … and there is one: nvm-windows by Corey Butler!

Read More

Whirling Spark I

How to prevent duplicate events

I’m working on a new web app that contains a sliding out panel with some additional information on the selected element. This panel can be closed by the user via the ESC key. The implementation on initializing the panel seems very straight forward:

1
2
3
4
5
6
7
8
9
10
11
class Panel() {
init() {

document.addEventListener("keydown", function(event) {
if(event.key === "Escape"){
//close the panel
}
});

}
}

Problem is: the panel, which is part of the basic HTML, will be initialized with its content and functionality in a ES6 class. So … on every init, another event listener is added.

You can easily figure that out, by calling getEventListeners(document) in the Chrome DevTools:

Chrome DevTools: Multiple Event Listeners

Read More

Rusted Bike

Utilize a repository of reusable ES6 template literals

The Template Literals introduced with ES6 are very useful to deal with multiline strings, because they support embedded expressions. Gone are the days of endless string concatination or replacing variables in a string by using RegEx.

Instead of…

1
2
3
4
5
6
7
8
var url = ...
var file = ...

var template =
'<div class="photo">' +
'<a href="' + url + "' +
'style="background-image: url(' + file + ')"</a>' +
'</div>'

… you can write:

1
2
3
4
5
6
7
8
9
var url = ...
var file = ...

var template = `
<div class="photo">
<a href="${url}/"
style="background-image: url(${file});"></a>
</div>
`,

It’s much cleaner and easier to handle, as you can copy your needed HTML right into your code and surround it by backtick (!) characters. Insert your variable placeholders (expressions), indicated by a dollar sign and curly braces, and you are done.

But there is one “restriction”, you have to be aware of: the interpolation (substitution of the expressions) is done at declaration time and not at runtime. You can’t define your literals seperatly, take one and make your substitution as you need it, like you would do with Handlebars or other templating engines. Therefore the name template literals is a bit misleading. But … there is a way to achieve this anyway…

Read More

Illuminated Kurhaus I

Spice Up Windows Terminal

How to make Powershell a little prettier

Working with the PowerShell in 2020 means fun, because of the new Windows Terminal (get it from Windows Store). It has more power as the old Powershell Console and it is visually adaptable to your personal taste, by installing the wonderful theming engine oh-my-posh from Jan De Dobbeleer.

Original Terminal

Terminal with oh-my-posh

To get Oh-My-Posh properly run, there are several steps to do I want to show here in a nutshell…

Read More

Untitled

Discoveries, Part 5

Discoveries #5

In this episode of the Discoveries (almost) everything is about images and the web. There are so many pitfalls to do it wrong, but many more possibilities to do it right, especially with these resources I found in the last few weeks.

  • ASP.NET Core Image Resizing Middleware
  • Best way to lazy load images for maximum performance
  • image orientation on the web
  • cosha - Colorful shadows for your images
  • parax-bg - Parallax Backgrounds
  • parax - Parallax Elements
  • Luminous Lightbox
  • Tiny-Swiper - Image Carousel

Read More