Dublin Library

The Publishing project

What are Triadic and Tetradic Color Palettes and How to Use Them

In my last post Creating an OKLCH Generator Toolhttps://publishing-project.rivendellweb.net/creating-an-oklch-generator-tool/, I wrote about about Triadic and Tetradic palettes and how to build them using vanilla JS. This post will cover what these palettes are and how to use them. Triadic Colors !OKLCH color wheel, provided for reference. Source Coloraidehttps://github.com/facelessuser/coloraidehttps://res.cloudinary.com/dfh6ihzvj/image/upload/cscale,w500/fauto,qauto/oklch-color-wheelkz2mmy.png Triadic colorshttps://www.interaction-design.org/literature/article/triadic-color-scheme are equidistant on the color wheel.       Example of Triadic Colors at 0, 120, and 240 degrees in the color wheel If we use blue as our starting color, the palette will loop around, that's why the third color is at 92 on the wheel.      ...

Continue reading →

Creating an OKLCH generator tool

This code started as an exercise in ChatGPT prompt generation and a way to explore what we can do with OKLCH colors. It uses vanilla Javascript and deliberately avoids using libraries like Chroma.jshttps://gka.github.io/chroma.js/ or Color.jshttps://colorjs.io/. The basis for the project is a color builder. On top of that, we build a series of additional tools to make other color experiments. CSS support for OKLCH colors is part of the CSS Color Level 4https://www.w3.org/TR/css-color-4/lab-colors specification so you need to be mindful that older versions of your browsers may not support the color space of the notation. The color components are: L...

Continue reading →

Even More Array Methods

The ECMAScript specification gained a new set of methods for the Array object. These methods work on copies of the original array rather than modifying the original array directly. There are other ways to complete the tasks these methods do. Which method you use will largely depend on whether you need to keep the original array intact or not. Reversing an array by copy with toReversed When I want to reverse the content of an array, I normally clone the array using fromhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/GlobalObjects/Array/from and then reverse it using reversehttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/GlobalObjects/Array/reverse. js let cars = 'Porsche', 'Ferrari', 'BMW' let reverseCars = Array.fromcars.reverse;...

Continue reading →

A declarative web?

Jeremy Keith recently published Declarative designhttps://adactio.com/journal/18982 on his blog. The premise of the post is that there are two divergent ways to think about web design and building web content, encapsulated by these two opposed statements: CSS is broken and I want my tools to work around the way CSS has been designed. and CSS is awesome and I want my tools to amplify the way that CSS has been designed. Which of these statements resonates with you will influence the tools that you choose and the comfort you feel when you use tools that don't fit your paradigm. This...

Continue reading →

Template Literals

Among the large number of new features in ES6/ES2015 are Template Literals/Stringshttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Templateliterals. These are backtick "\" enclosed expressions that allow for multiline expressions and string interpolations using placeholders ${varName}. js let name = "William" let carMake = "Ferrari" let myTemplateString = My name is ${name} and I own a ${carMake} // -> My name is William and I own a Ferrari White space is significant. Inserting spaces or newline characters will change the resulting string. If we insert newline characters into myTemplateString will produce a different result that may not be what you're expecting. js let name = "William" let...

Continue reading →

Playing with CSS Selectors

CSS has evolved significantly over the last few years. Some of these changes deal with a set of selectors known as the functional pseudo-classes. The :not pseudo-class has been around for a while at least since IE9, but when the other selectors we'll discuss on the post were introduced in the Selectors Level 4https://w3c.github.io/csswg-drafts/selectors/ specification, the :nothttps://drafts.csswg.org/selectors/negation pseudo-class was changed to accept a selector list to keep it in line with the other functional pseudo-classes. The :is Pseudo-class The Matches-Any Pseudo-class accepts a comma-separated list of selectors and matches any element that can be selected by one of the items...

Continue reading →

Disable Javascript

I am not going to rehash the "people don't disable Javascript" debate. Most of the time Javascript is enabled and everything is good. However, having Javascript enabled doesn't mean that Javascript will always work, as outlined in Everyone has JavaScript, right?https://www.kryogenix.org/code/browser/everyonehasjs.html There are times when we want to test how your page would work if Javascript is disabled or not present. This is the scenario we'll discuss in this post. We will leverage browsers' devTools to disable Javascript for the current session so we can test whether Javascript is enabled or not. Chrome The Chrome team provides a full explanation...

Continue reading →

Evergreen may not mean what you think it does

Evergreen browsers are those that update themselves automatically, or very close to it, without user intervention. This is particularly useful when it comes to new features. We don't have to wait for users up upgrade their browsers, the browsers will update themselves, at least in theory. In “Evergreen” Does Not Mean Immediately Availablehttps://css-tricks.com/evergreen-does-not-mean-immediately-available/, the author explains how evergreen auto updates may not work how you expect and users of modern computers may choose not to shut down their browsers and, as a result, not trigger automatic browser updates unless the user clicks on the download button and then clicks the...

Continue reading →

Scripting Support Media Query

I know that it's unlikely people will disable Javascript on their browsers, but it is not impossible. We can notify the user of the lack of Javascript using the scripting media query. This example will tell users whether Javascript is enabled on their browser. It is made of two parts. The first part is the content that we want to display to the user. We'll hide it and reveal the appropriate value with CSS later. html You do not have scripting available. Your scripting is only enabled during the initial page load. Weird. You have scripting enabled! The CSS does...

Continue reading →

Revisiting Web Components (2024 edition)

I've written about web components a lot over the years but not recently. I think it's time to take a look at where we're at, and the newer technologies that have emerged under the web components umbrella. What are web components? Web Components is the umbrella term for a set of technologies custom elements, shadow DOM and HTML templates that make it easier to create custom elements for your pages and applications. A web component may look like this when used in a web document: html And they would behave the same way as built-in elements like video and audio....

Continue reading →