Creative Problem Solving for UX Designers

Original Source: https://www.webdesignerdepot.com/2021/11/creative-problem-solving-for-ux-designers/

It’s normal to pull up sharp in front of a problem; after all, if there was a known solution, it wouldn’t be a problem. But knowing that it’s normal, doesn’t make encountering problems any less frustrating. So how do we avoid sitting in front of a UX problem for hours, achieving nothing?

That’s what creative problem solving is all about.

In this post, we’ll explore creative problem solving, and how it can help you as a UX designer. Then we’ll analyze how you can solve UX problems in a few, easy-to-remember steps. By the end of this article, you’ll have all the tips you need for UX problem-solving.

What is Creative Problem Solving?

Creative problem solving is a term developed by Alex Osborn, the founder of the Creative Education Foundation. In a nutshell, this term is about overcoming challenges in our work lives through innovative solutions. But, of course, such solutions vary by profession.

For UX designers, creative problem solving is about solving UX problems with efficient tactics, that work. And that’s precisely why UX problem solving is so essential because following a specific method can help us avoid getting stuck.

Whether you are a newbie or an experienced designer, you are probably focused on projects that require you to solve problems. If you have never had a problem before, you must be a superhero; for us mere mortals, here are the steps we need to follow to solve a UX problem:

UX Problem Solving in 5 Easy Steps

Delivering a great UX solution is influenced by two key parameters: user research and creative problem-solving. Suppose you have done your user research and are currently looking for an original solution to a problem. In this case, the methodology below will be handy:

1. Identify the UX Problem

I know this may sound obvious, but think about it. How many times have we lost days because we didn’t identify the real problem? If you are solving the wrong problem, it does not matter if your solution is original and innovative.

That’s why the first thing you need to do is think about the problem. Ask yourself what the real problem is, and then get to work solving it. Identifying the problem may take some time, but it will prove beneficial to your project in the long run.

2. Clarify the UX Problem

Now that you have identified the UX problem, it’s time to demystify it. In this step, you could create a user journey plan. It does not have to be perfect; some low-fidelity sketches are more than enough.

Set a timer and start visualizing your solution on paper. Remember, sketching is not about perfection or fine details. Once you have created a customer journey you are happy with, it’s time to move on to the next step.

3. Use Analytics

UX design isn’t about design per se. It’s also about numbers and data. This is why analytics are critical to UX problem-solving. Once you have gathered some data from users and competitors, it’s time to create patterns. This will help you better understand the problem and change your drafts accordingly.

Numbers and data alone can help you a lot if you combine them with an original idea. However, facts alone are not enough, and your original story will not be compelling without them. So what’s better than combining them?

4. Use Your Feedback

So you have come up with an innovative solution to the UX problem. You have successfully combined this idea with essential data. Unfortunately, your work is not yet done. 

The next step is equally important. Once you have polished your ideas, you should share them with colleagues and/or customers.

It’s not easy to get feedback for your UX mapping, but it’s very constructive and will ultimately make you a better designer.

5. Solve the Problem

The last step is also the most fun. Once you have listened to people’s feedback, you can redesign your original solution. Then you are just one step away from solving the UX problem. Now it’s time to digitally redesign your idea.

This is the step where fine details matter. Creating a high-fidelity wireframe is not easy, but most UX designers have the knowledge and tools to get it done.

UX Problem Solving: Useful Tips and Tricks
Be Methodical

In my opinion, this is the most useful tip when it comes to UX problem-solving. You do not always have to be in a hurry. In the early stages of a project, try not to get distracted by other problems. Focus on finding the real problem.

Once you are sure you have found it, you can move on to finding the best solution. Then move on to the next step and so on. It becomes clear that being methodical is a brilliant tactic.

UX Problem Solving is All about the Ecosystem

UX problem solving is not about fine details. So try to care less about the design and more about the ecosystem you want to create. That will help you gather all the data you need, from user opinions to analytics.

Low-Fidelity vs. High-Fidelity Wireframes

Starting with sketches and low-fidelity wireframes is a brilliant thing to do. Whenever I have tried to start a project directly with high-fidelity wireframes, I have gotten bogged down in details.

For this reason, pen and paper should be your best friends in UX problem-solving. Sketches help you explore different approaches and get the feedback you need.

Explore Different Tools/Approaches

When it comes to solving a UX problem, there is usually one efficient solution. But that is not always the case. In most cases, we have to consider different alternatives and identify more than one critical interaction.

For this reason, feedback is also crucial for UX problem-solving. Your colleagues and customers will help you find the best method. Try to accept criticism and be open when listening to feedback. This way, you will ensure that you will find the best possible solution.

Wrap Up

Solving a UX problem is not easy. However, if you identify the real problem and illustrate different approaches, you will be on the right track. Also, do not neglect to use the data and feedback you collect. The more tools you have in hand, the better UX designer you will be.

 

Featured image via Unsplash.

Source

p img {display:inline-block; margin-right:10px;}
.alignleft {float:left;}
p.showcase {clear:both;}
body#browserfriendly p, body#podcast p, div#emailbody p{margin:0;}

The post Creative Problem Solving for UX Designers first appeared on Webdesigner Depot.

15 Websites to Send Anonymous Emails

Original Source: https://www.hongkiat.com/blog/anonymous-email-providers/

The first question to answer here is why go for anonymous email when there are plenty of premium featured and free email services such as Gmail, Outlook and Yahoo! Mail available? Well, privacy and…

Visit hongkiat.com for full content.

Conceptual minimalist lighting collection — Industrial Design

Original Source: https://abduzeedo.com/conceptual-minimalist-lighting-collection-industrial-design

Conceptual minimalist lighting collection — Industrial Design
Conceptual minimalist lighting collection

abduzeedo1117—21

Dimi Litz shared a beautiful minimalist light collection inspired by the research of parallels between the Bauhaus movement and Constructivism. Untangling the tangle of historical threads reached the art of Kazimir Malevich where it became the starting point of a revolution of form, color and their relationship.

Suprematism is based on philosophic treatise with the main idea of search for the essential reality. Author denies serving the shape and color of secondary images and takes the characters off the canvas. — ”I was impressed. The simplicity and the accuracy of the artistic technique was exceptionally clear. I felt that I must transfer this idea to the world of material objects.”

Dot, ray, line, circle, triangle and square became the basis shapes. The shapes required a first-rate implementation in the material. Natural materials are the most noble and emphasize the philosophy of the collection. Steel and brass were complete with hand picked white marble and black granite.

The most difficult stage was bringing the design to perfection and optimizing production. We spent over 8 months making it as good as it has to be. Step  by step we cut off every false detail and made the idea shine.”

Credits

Dimi Litz – art direction, product design
Dmitry Beznosov – product design
Maksim Arbuzov – set design
Dmitry Saveliev – render
Anton Volodin – render
About atris

Atris is a lighting design studio from Russia.

Their passion for design and art came together in their projects. They strive to create designs that are closely related to the world of creativity and art in all its manifestations. — ”We hope to bring art into interiors and people’s lives because we believe that art is the key that opens the doors of elegance and sophistication in hearts.”

For more information make sure to check out atris.design  

How To Speed Up Your Bootstrap Development Process

Original Source: https://www.webdesignerdepot.com/2021/11/how-to-speed-up-your-bootstrap-development-process/

Currently, Bootstrap is among the most popular frameworks in the developer community. One of the most straightforward solutions for front-end development methods available, Bootstrap allows users to access convenient CSS and HTML components for forms, typography, sliders, navigation, and everything else you might need.

Bootstrap is naturally a pretty fast development solution, as it allows you to access everything you need to create your app in a straightforward environment. You can access premade classes, kits, and themes right out of the box and speed up your development without compromising on performance.

Still, this doesn’t mean there aren’t plenty of ways to enhance the speed of your Bootstrap strategy from time to time. So today, we’re going to look at some of the things you can do to speed up the development of your Bootstrap app.

Make The Most of the Tools Available

Let’s start with the basics: One of the things that makes Bootstrap so effective as a development tool is the ability to access specific tools and services to make building more efficient. The more you leverage these features, the better you’ll be at designing amazing apps quickly. 

For instance, a Task Runner is a fantastic addition to a Bootstrap development strategy. With these tools, you can automate tasks like compiling code or moving code from Typescript to JavaScript. In addition, many developers use these tools when they configure a job that runs every time a specific file is modified, so they don’t have to manually recompile all the time.

The most popular Task Runners available right now are Grunt JS and Gulp JS. Gulp is based on Node.jS, while Grunt works in line with its templating environment. 

Other helpful tools you can check out to accelerate your development process include Sass or Syntactically Awesome Style Sheets – a pre-processor scripting language compiled into CSS so that you can create better stylesheets with minimal effort. In addition, the Sass technology reduces the need for repetition by extending CSS through various methods like inline imports, variable, and nested maps. This means you can implement changes a lot quicker and take more risks in your designs.

Tools like BrowserSync JS will synchronize your browser testing process by performing as a middle man between your browser and server. Using this tool, you shouldn’t have to hit the refresh button on the browser over and over when editing your code to see updates.

Get Comfortable with Scaffolding and Kits

Bootstrap’s front-end framework relies heavily on the grid system within the technology, packed with features to help developers structure a responsive layout. Because of this grid system, it’s easier to scaffold responsive designs before you do any coding. This way, you get ahead of the coding process and better insight into where content should go. 

Bootstrap’s grid system is pretty flexible so that you can define a set of rows divided according to each of the sections in your site or app. The best part is that each column can adjust to suit the template perfectly. 

You can speed up your development process even more by simply accessing existing themes and UI kits from the Bootstrap ecosystem. 

Bootstrap kits are UI kits consisting of a collection of flexible, attractive, and easy-to-use Bootstrap-based components and assets. You can easily plug your solution into your website and customize it based on your required design output. UI components might include things like input forms, widgets, navigation menus, and testimonials. A few options include:

Pixel: A free Bootstrap 5 UI kit with over 80 coded UI components, example pages, and more to help you design and build a website that makes sense for your projects. 
Fabrx: A comprehensive Bootstrap 5 kit with access to more than 500 responsive components, 250+ wireframes, and a host of ready-made templates. This comes seamlessly coded with CSS and HTML.
Material Design: One of the most popular open-source UI kits based on Bootstrap 5, this solution makes it easy to create material design-based components with CSS, JS, and HTML. There are more than 700 UI components already available within the kit. 

Experiment with Bootstrap Themes

Like Bootstrap UI kits, Bootstrap themes are a ready-to-use bundle of JavaScript, HTML, and CSS code complete with UI components, style components, and page layouts. Usually, these themes are designed for a specific kind of app or website. However, everything is generally created for you, for the most part, so that you can modify elements with your requirements later. 

While Bootstrap UI kits give you multiple pieces of coding and technology you can use in your development and how you like, Bootstrap themes are intended to be plug-and-play solutions. You modify a few components and resources, and you’re ready to publish. 

Bootstrap has its own selection of themes available, though most are available for a premium cost, so it’s worth checking out what you get in advance. One good option is the Admin and Dashboard template designed for creating applications for tracking things like analytics and website information. 

The theme here comes with access to all of your crucial bootstrap components, as well as Brite charts, Apex charts, multiple widgets, and icons. A few alternatives to try include:

Space: A free Bootstrap 5 multi-purpose theme with access to a creative, clean, and high-quality design with three different homepage variations, more than 100 UI elements, and a fully responsive layout. 
Massive: A multi-purpose CSS, HTML, and JavaScript theme featuring a trending and creative design, built entirely with Bootstrap 5, as well as the Sass ecosystem. 
Front: A multi-purpose premium responsive template. You’ll get six pre-built demos, 16 landing pages, and a host of other different page types to sort through.

Use a Bootstrap Builder

Most developers prefer to code their application or website entirely from scratch with Bootstrap – mainly since it’s easy to do. However, there’s also a faster alternative route you can consider too. For instance, using a Bootstrap builder or studio will turn the design process from a hard-code configuration into a more visual and straightforward process. 

Page builders come in many shapes and sizes, designed for both the web and desktop. Popular options like the Bootstrap studio come with drag-and-drop functionality for grid-based content, component creation, and access to quick-add components. 

Another bonus of using a builder is you can usually expect to have the latest version of Bootstrap available, so you don’t have to update constantly. For example, some of the newest page builders offering access to Bootstrap 5 include:

Start-up: A simple bootstrap-based builder, Start-up allows designers and developers to create websites, applications, and landing pages with drag-and-drop functionality. The solution is compatible with all Retina devices and has easy exporting. 
Boostrap Build: This is a simple and effective bootstrap application for prototyping and designing all kinds of Bootstrap themes and templates. There are tons of theming capabilities built-in, as well as live preview, color picker, variable search, and size adjuster. 
Mobirise: A free and straightforward bootstrap builder, this solution focuses on building various Bootstrap websites. 

Keep Learning

Bootstrap, like many development and design tools today, is constantly evolving. As new versions and components continue to emerge, it’s essential to be confident with the options you have for your website, application, or whatever else you might be making. 

It is exhausting to continuously check out the latest tutorials and posts on the official Bootstrap website; it is much easier to get things done when you know how everything works. The good news is that many of the courses and guidelines available on the web today are free to use. For example, you can get a crash course for beginners on Bootstrap 5 or find a collection of some of the most popular crash courses here.

It’s also worth keeping an eye on the latest news released by the Bootstrap team, so you can get an idea of any new features or functionality you might need to learn as you’re working on your builds. If you’re using the tools we mentioned above, like Sass, make sure you check out the latest updates for those, too – many of the tools available for Bootstrap will get updates too. 

If you’re feeling really in the dark about your new Bootstrap features, you can check out sites like Udemy, which offer step-by-step guides for beginners.  Though the entire course does have a fee attached to it, you’ll learn how to build various projects within Bootstrap, which could make you more efficient at development later. 

As you’re learning how to master Bootstrap development, try not to pile too much on your plate at once. If you decide to work with the precompiled download package for Bootstrap, it’s worth accessing only the specific aspects of the library you need at any given time. 

Start by using simple tools like bootstrap-reboot.min.css for a simple CSS reset for your project, or access the easy-to-use grid system at bootstrap-grid.min.css. You don’t necessarily need to access and learn all the frameworks at once.

Remember the Basics

Finally, all aspects of Bootstrap development get a lot easier when you start thinking about becoming a better coder. Apart from the above points, optimizing a website in any landscape still means incorporating the right front-end performance techniques you would access for any website. 

Although focusing on getting the UX right with your bootstrap build might add more time to your development process initially, it also means you’re less likely to have to come back to your website and make changes in the future. This should mean that you can spend less time developing your project overall and more time optimizing the experience.

For instance, you should still:

Use lean JavaScript and CSS: Remember, every character in your code will contribute to the final weight of your webpage. Clean and concise JS and CSS can be difficult to master, but it’s something you need to strive for in most of your projects. Good CSS practices will usually involve getting rid of unused selectors where possible and duplicate code, overly nested rules, and disorganized content. Style guides can often be helpful here. You can also access features like JS Lint and CSS lint to clean up your code too. 
Minify your JS and CSS code: An essential step in optimizing your website is limiting the number of HTTP requests a website makes to render the content. Each trip to the server and back takes more time, harming user experience. Minifying the document will help you to keep file sizes small and reduce HTTP requests. 
Reduce image sizes: The weightiest part of your website is usually the image files. However, video and audio files will also play their role. Make sure you’re always using the right image or file type for each job and squeeze extra bytes from your images wherever you can with compression too. 

While it’s great to get a development project done quickly, don’t mistake rushing through and forgetting essential elements that influence the impact of your project. You still want your project to work perfectly – even if you’re developing it quickly. 

Speeding Up Development with Bootstrap

Bootstrap is a fantastic, fast-paced solution for developing all kinds of incredible websites, applications, and projects. However, learning how to use all the features and components of your Bootstrap environment correctly can ensure you’re more likely to speed up the development process. The tips above will allow you to discover all the benefits of the Bootstrap front-end framework. 

Remember, try to find the right balance between speeding up your development process, and maintaining a high level of quality. Time saved on initial development won’t do much good if you have to come back and make additional fixes later. So focus on getting things right the first time, but use tools and templates to help you whenever you can. The more you work on Bootstrap, the better your projects will become. 

Source

p img {display:inline-block; margin-right:10px;}
.alignleft {float:left;}
p.showcase {clear:both;}
body#browserfriendly p, body#podcast p, div#emailbody p{margin:0;}

The post How To Speed Up Your Bootstrap Development Process first appeared on Webdesigner Depot.

How to Draw a House

Original Source: https://designrfix.com/blog/how-to-draw-a-house

There are several meanings associated with houses. One can envisage them as places where one may live or imagine that one day one will reside there. Seeing houses every day is a common occurrence, and it is easy to imagine how it would feel to design and build your own home. It’s hard to draw…

The post How to Draw a House appeared first on .

Dell XPS 13 down to $650 in unmissable Black Friday deal

Original Source: https://www.creativebloq.com/news/dell-xps-13-bf-deal

Save $300 on this powerhouse of a laptop.

New 2021 M1 MacBook Pro gets shock price cut in Black Friday deal

Original Source: https://www.creativebloq.com/news/2021-macbook-pro-deal-bf

Surprise discount cuts $100 off Apple’s brand new 16-inch laptop.

A Guide To Modern CSS Colors

Original Source: https://smashingmagazine.com/2021/11/guide-modern-css-colors/

There’s more to color on the web than meets the eye, and it’s about to get a lot more interesting! Today, we’ll take a look at the best ways to use colors in a design system, and what we can expect from our colors in the not-too-distant future.

Well-Known Color Values

There are many different ways to define colors in CSS. CSS named colors are one of the simplest ways to color an element:

.my-element {
background-color: red;
}

These are very limited, and rarely fit the designs we are building! We could also use color hex (hexadecimal) values. This code gives our element a red background color:

.my-element {
background-color: #ff0000;
}

Unless you’re a color expert, hex values are very difficult to read. It’s unlikely you would be able to guess the color of an element by reading the hex value. When building a website we might be given a hex color value by a designer, but if they asked us to make it, say 20% darker, we would have a hard time doing that by adjusting the hex value, without a visual guide or color picker.

RGB

RGB (red, green, blue) notation is an alternative way of writing colors, giving us access to the same range of colors as hex values, in a much more readable form. We have an rgb() function in CSS for this. Colors on the web are additive, meaning the higher the proportion of red, green and blue, the lighter the resulting color will be. If we only use the red channel, the result is red:

.my-element {
background-color: rgb(255, 0, 0);
}

Setting the red, green and blue channels to the highest value will result in white:

.my-element {
background-color: rgb(255, 255, 255);
}

We can also add an alpha channel (for transparency), by using the rgba() function:

.my-element {
background-color: rgba(255, 0, 0, 0.5); // transparency of 50%
}

.my-element {
background-color: rgba(255, 0, 0, 1); // fully opaque
}

rgb() and rgba() allow us to “mix” colors in our code to some extent, but the results can be somewhat unpredictable.

HSL

More recently, we have been able to use HSL (hue, saturation, lightness) values, with the hsl() and hsla() color functions. As a developer, these are far more intuitive when it comes to adjusting color values. For example, we can get darker and lighter variants of the same color by adjusting the lightness parameter:

.my-element {
background-color: hsl(0deg, 100%, 20%); // dark red
}

.my-element {
background-color: hsl(0deg, 100%, 50%); // medium red
}

.my-element {
background-color: hsl(0deg, 100%, 80%); // light red
}

The hue parameter represents the position on a color wheel, and can be any value between 0 and 360deg. The function also accepts turn units (e.g. 0.5turn), and unitless values.

The following are all valid:

.my-element {
background-color: hsl(180deg, 50%, 50%);
}

.my-element {
background-color: hsl(0.5turn, 50%, 50%);
}

.my-element {
background-color: hsl(180, 50%, 50%);
}

Tip: Holding down SHIFT and clicking the color swatch in the inspector in Chrome and Firefox dev tools will toggle the color value between hex, RGB and HSL!

hsl() and hsla() lend themselves well to manipulation with custom properties, as we’ll see shortly.

currentColor

The currentColor keyword is worth a mention as another way of setting a color on an element that’s been around for a while. It effectively allows us to use the current text color of an element as a variable. It’s pretty limited when compared with custom properties, but it’s often used for setting the fill color of SVG icons, to ensure they match the text color of their parent. Read about it here.

Modern Color Syntax

The CSS Color Module Level 4 provides us with a more convenient syntax for our color functions, which is widely supported in browsers. We no longer need the values to be comma-separated, and the rgb() and hsl() functions can take an optional alpha parameter, separated with a forward slash:

.my-element {
/* optional alpha value gives us 50% opacity */
background-color: hsl(0 100% 50% / 0.5);
}

.my-element {
/* With no alpha value the background is fully opaque*/
background-color: hsl(0 100% 50%);
}

New CSS Color Functions
HWB

HWB stands for hue, whiteness and blackness. Like HSL, the hue can be anywhere within a range of 0 to 360. The other two arguments control how much white or black is mixed into that hue, up to 100% (which would result in a totally white or totally black color). If equal amounts of white and black are mixed in, the color becomes increasingly gray. We can think of this as being similar to mixing paint. It could be especially useful for creating monochrome color palettes

Try it out with this demo (works in Safari only):

Why do we need LAB and LCH when we have HSL? One reason is that using LAB or LCH, gives us access to a much larger range of colors. LCH and LAB are designed to give us access to the entire spectrum of human vision. Furthermore, HSL and RGB have a few shortcomings: they are not perceptually uniform and, in HSL, increasing or decreasing the lightness has quite a different effect depending on the hue.

In this demo, we can see a stark contrast between LCH and HSL by hitting the grayscale toggle. For the HSL hue and saturation strips, there are clear differences in the perceptual lightness of each square, even though the “lightness” component of the HSL function is the same! Meanwhile, the chroma and hue strips on the LCH side have an almost-uniform perceptual lightness.

We can also see a big difference when using LCH color for gradients. Both these gradients start and end with the same color (with LCH values converted to the HSL equivalents using this converter). But the LCH gradient goes through vibrant shades of blue and purple in the middle, whereas the HSL gradient looks muddier and washed-out by comparison.

See the demo →

LAB and LCH, while perhaps being syntactically a little less intuitive, behave in a way that makes more sense to the human eye. In her article, LCH color in CSS: what, why, and how?, Lea Verou explains in detail the advantages of LCH color. She also built this LCH color picker.

As with other color functions, hwb(), lab() and lch() can also take an optional alpha parameter.

.my-element {
background-color: lch(80% 240 50 / 0.5); // Resulting color has 50% opacity
}

Browser Support And Color Spaces

hwb(), lab() and lch() are currently only supported in Safari. It’s possible to start using them straight away by providing a fallback for non-supporting browsers. Browsers that don’t support the color function will simple ignore the second rule:

.my-element {
background-color: lch(55% 102 360);

/* LCH color converted to RGB using Lea Verou’s tool: https://css.land/lch/ */
background-color: rgb(98.38% 0% 53.33%);
}

If other styles depend on newer color functions being supported, we could use a feature query:

.my-element {
display: none;
}

/* Only display this element if the browser supports lch() */
@supports (background-color: lch(55% 102 360)) {
.my-element {
display: block;
background-color: lch(55% 102 360);
}
}

It’s worth noting, as Lea explains in her article, that although modern screens are capable of displaying colors beyond RGB, most browsers currently only support colors within the sRGB color space. In the LAB color demo you might notice that moving the sliders beyond a certain point doesn’t actually affect the color, even in Safari where lab() and lch() are supported. Using values outside of the sRGB range will only have an effect when hardware and browsers advance sufficiently.

Safari now supports the color() function, which enables us to display colors in the P3 space, but these are limited to RGB colors for now, and don’t yet give us all the advantages of LAB and LCH.

.my-element {
background: rgb(98.38% 0% 53.33%); // bright pink
background: color(display-p3 0.947 0 0.5295); // equivalent in P3 color space
}

Recommended Reading: “Wide Gamut Color in CSS with Display-P3” by Nikita Vasilyev

Accessibility

Once they are widely supported, perhaps LAB and LCH can help us choose more accessible color combinations. Foreground text should have the same contrast ratio with background colors with different hue or chroma values, as long as their lightness value remains the same. That’s certainly not the case at the moment with HSL colors.

Color Management

A wider range of color functions means we have more options when it comes to managing colors in our application. Often we require several variants of a given color in our design system, ranging from dark to light.

Custom Properties

CSS custom properties allow us to store values for reuse in our stylesheets. As they allow partial property values, they can be especially useful for managing and manipulating color values. HSL lends itself particularly well to custom properties, due to its intuitiveness. In the previous demo, I’m using them to adjust the hue for each segment of the color strip by calculating a –hue value based on the element’s index (defined in another custom property).

li {
–hue: calc(var(–i) * (360 / 10));
background: hsl(var(–hue, 0) 50% 45%);
}

We can also do things like calculate complementary colors (colors from opposite sides of the color wheel). Plenty has been written about this, so I won’t cover old ground here, but if you’re curious then Sara Soueidan’s article on color management with HSL is a great place to start.

Migrating From Hex/RGB To HSL

RGB colors might serve your needs up to a point, but if you need the flexibility to be able to derive new shades from your base color palette then you might be better off switching to HSL (or LCH, once supported). I would recommend embracing custom properties for this.

Note: There are plenty of online resources for converting hex or RGB values to HSL (here’s one example).

Perhaps you have colors stored as Sass variables:

$primary: rgb(141 66 245);

When converting to HSL, we can assign custom properties for the hue, saturation and lightness values. This makes it easy to create darker or lighter, more or less saturated variants of the original color.

:root {
–h: 265;
–s: 70%;
–l: 50%;

–primary: hsl(var(–h) var(–s) var(–l));
–primaryDark: hsl(var(–h) var(–s) 35%);
–primaryLight: hsl(var(–h) var(–s) 75%);
}

HSL can be incredibly useful for creating color schemes, as detailed in the article Building a Color Scheme by Adam Argyle. In the article he creates light, dark and dim color schemes, using a brand color as a base. I like this approach because it allows for some fine-grained control over the color variant (for example, decreasing the saturation for colors in the “dark” scheme), but still retains the big advantage of custom properties: updating the brand color in just one place will be carried through to all the color schemes, so it could potentially save us a lot of work in the future.

Sass Color Functions

When it comes to mixing and adjusting colors, Sass has provided color functions to enable us to do just this for many years. We can saturate or desaturate, lighten or darken, even mix two colors together. These work great in some cases, but they have some limitations: firstly, we can only use them at compile-time, not for manipulating colors live in the browser. Secondly, they are limited to RGB and HSL, so they suffer from the same issues of perceptual uniformity, as we can see in this demo, where a color is increasingly desaturated yet appears increasingly lighter when converted to grayscale.

To ensure that the lightness remains uniform, we could use custom properties with LCH in a similar way to HSL above.

li {
–hue: calc(var(–i) * (360 / 10));
background: lch(50% 45 var(–hue, 0));
}

Color Mixing And Manipulation
Color Mixing

One thing CSS doesn’t yet allow us to do is mix colors in the browser. That’s all about to change: the Level 5 CSS Color Specification (working draft) contains proposals for color mixing functions that sound rather promising. The first is the color-mix() function, which mixes two colors much like Sass’s mix() function. But color-mix() in CSS allows us to specify a color space, and uses the LCH by default, with superior mixing as a result. The colors don’t have to be LCH when passed in as arguments either, but the interpolation will use the specified color space. We can specify how much of each color to mix, similar to gradient stops:

.my-element {
/* equal amounts of red and blue */
background-color: color-mix(in lch, red, blue);
}

.my-element {
/* 30% red, 70% blue */
background-color: color-mix(in lch, red 30%, blue);
}

Color Contrast And Accessibility

color-contrast() is another proposed function, which really does have huge implications for picking accessible colors. In fact, it’s designed with accessibility in mind first and foremost. It permits the browser to pick the most appropriate value from a list, by comparing it with another color. We can even specify the desired contrast ratio to ensure our color schemes meet WCAG guidelines. Colors are evaluated from left to right, and the browser picks the first color from the list that meets the desired ratio. If no colors meet the ratio, the chosen color will be the one with the highest contrast.

.my-element {
color: wheat;
background-color: color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to AA);
}

Because this isn’t supported in any browsers right now, I’ve borrowed this example directly from the spec. when the browser evaluates the expression the resulting color will be darkgreen, as it is the first one that meets the AA contrast ratio when compared to wheat, the color of the text.

Browser Support

The Level 5 Color Specification is currently in Working Draft, meaning no browsers yet support the color-contrast() and color-mix() functions and their syntax is subject to change. But it certainly looks like a bright future for color on the web!

Environmental Impact Of Colors

Did you know that your chosen color palette can have an impact on how much energy your website uses? On OLED screens (which account for most modern TVs and laptops), darker colors will use significantly less energy than light colors — with white using the most energy, and black the least. According to Tom Greenwood, author of Sustainable Web Design, blue is also more energy-intensive than colors in the red and green areas of the spectrum. To reduce the environmental impact of your applications, consider a darker color scheme, using less blue, or enabling a dark-mode option for your users. As an added bonus, a more environmentally friendly choice of colors can also reduce the impact on the battery life of mobile devices.

Tools

Hexplorer, Rob DiMarzo
Learn to understand hex colors with this interactive visualization.
LCH color picker, Lea Verou and Chris Lilley
Get LCH colors and their RGB counterparts.
HWB color picker
Visualize HWB colors and convert to HSL, RGB and hex.
Ally Color Tokens, Stephanie Eckles
An accessible color token generator.

Resources

“A Nerd’s Guide To Color On The Web,” Sarah Drasner, CSS-Tricks
“LCH Colors In CSS: What, Why, And How?,” Lea Verou
“The Best Color Functions In CSS?,” Chris Coyier, CSS-Tricks
“Building A Color Scheme,” Adam Argyle, Web.dev
“Using HSL Colors In CSS,” Ahmad Shaheed, Smashing Magazine
“On Switching From Hex And RGB To HSL,” Sara Soueidan
“Improving Color On The Web,” Dean Jackson, Webkit Blog

Powerful Terminal And Command-Line (CLI) Tools For Modern Web Development

Original Source: https://smashingmagazine.com/2021/11/powerful-terminal-commandline-tools-modern-web-development/

Many modern programmers, including front-end and full-stack developers, work daily with the command line. Even those who are relatively new to web development are picking up command-line skills early and finding practical tools and utilities to enhance their productivity in the terminal.

This post presents a categorized list of many command-line apps I’ve personally discovered over the past few years. Some of them are relatively new, others have been around for a while. So I hope something in this roundup will interest you and help you get stuff done when working in the terminal.

You can jump to a category using the navigation below:

Terminal Apps
Terminal Utilities and Enhancements
Command-line Scripting and Frameworks
Productivity Tools for the Terminal

Terminal Apps

This section features terminals, multiplexers, console emulators, mobile terminals, and command-line workspaces that you can use to replace the default terminal app on your system.

tmux

tmux is a popular terminal multiplexer for Unix-like operating systems that lets you easily switch among several programs in a single terminal, with the ability to “detach” a session (while still running in the background) or “reattach” it to a different terminal.

iTerm2

iTerm2, the successor to iTerm, is a replacement for your Terminal on macOS that includes features like split panes, robust search, autocomplete, instant replay, along with a whole slew of configuration options.

Mosh

Mosh is a remote terminal app (or mobile shell) for interactive SSH usage that includes several useful features for those who need to do terminal-based tasks over weak WiFi, cellular networks, or other less-reliable connections.

Zellij

Zellij is a terminal workspace that has the base functionality of a terminal multiplexer (similar to tmux) but includes features that allow users to extend it and create a personalized environment via panes/tabs and plugins.

Hyper

Hyper is an Electron-based terminal app for Mac, Windows, or Linux that’s built with web technologies (HTML/CSS/JS). Includes dozens of themes and plugins and is built on speed and stability.

cmder

cmder is a portable console emulator for Windows that was built due to the lack of a good option in this area for Windows users.

a-Shell

a-Shell is an iOS app that offers a ‘terminal in your pocket’ with files/directory control, compatibility with Apple Shortcuts, multiple windows, and lots more.

Eternal Terminal

Eternal Terminal is another remote terminal app inspired by other similar, popular projects.

Ten Hands

Ten Hands is a terminal app for Mac, Linux, and Windows that is billed as the simplest way to organize and run command-line tasks, useful for those who run similar daily tasks on multiple projects.

eDEX-UI

eDEX-UI is a fullscreen, cross-platform terminal emulator and system monitor heavily inspired by science fiction movie UIs, in particular, the Tron: Legacy film.

Tabby

Tabby, formerly “Terminus”, is a customizable cross-platform terminal app for local shells, SSH, serial, and Telnet connections that includes support for features like split panes, smart tabs, customizable hotkeys, and lots more.

Fish Shell

Fish Shell is another option for a command-line shell for Linux, macOS, and Windows that includes auto-suggest, tab completions, 24-bit color, web-based configuration, syntax highlighting, among other practical features.

Terminal Utilities And Enhancements

Once you’ve got your primary workspace, you’ll want to enhance it with various tools, utilities, themes, and so forth. This section includes some useful tools to make your terminal experience more enjoyable.

Oh My Zsh

Oh My Zsh is an open-source, community-driven framework for managing your configuration for Z Shell (or Zsh, a popular Unix shell). It comes bundled with thousands of helpful functions, helpers, 300+ plugins, 140+ themes, and more. Works best on macOS or Linux, but can also be used on Windows using something like Cygwin or WSL2.

Fig

Fig adds VSCode-style autocomplete to your existing terminal and includes support for existing CLI tools like Git, npm, Kubernetes, Docker, AWS, Google Cloud, and more.

fzf

fzf is a fast, portable, fuzzy finder for the command line that lets you run fuzzy search queries with a comprehensive feature set.

Shell History

Shell History (not free) is a macOS app that integrates with Bash, Zsh, or Fish and allows you to easily backup and sync via iCloud and organize your shell history in “notebooks”.

htop

htop is an interactive process viewer, originally Linux-only but now cross-platform, that aims to improve on the Linux top command by providing extra features when viewing running processes.

GitHub CLI

GitHub CLI, in case you missed it, is the official cross-platform command-line interface for GitHub, bringing pull requests, issues, and other GitHub-related tasks to your terminal.

Streamhut

Streamhut lets you share your terminal in real-time without installing anything. Simply run one of two commands (depending on your setup), useful for live terminal sessions in team collabs, interviews, or teaching.

icdiff

icdiff is a terminal-based file diff tool that makes good use of colors to present diffs in a more practical, visual manner.

>_TerminalSplash

TerminalSplash, as the name suggests, is like Unsplash, but for terminal themes. Choose from more than 200 user-submitted themes or submit your own.

Terminalizer

Terminalizer is a customizable and cross-platform terminal recorder that lets you record terminal sessions then share them as animated GIFs or via a web player.

Asciinema

Asciinema is another popular option for terminal recording and sharing, but not available for Windows. The cool thing about this one is that the recorded output is not a video but a plain text animation of the terminal session, meaning you can select and copy/paste items from recordings.

gtop

gtop is another enhancement on the top command that provides a system monitoring dashboard for your terminal. Require Node.js and includes partial support on Windows.

DevDash

DevDash is a highly configurable terminal dashboard for developers and creators. You can customize it to display information from sources like Google Analytics, GitHub, Feedly, shell command output, and more.

Honorable mentions:

ora
An elegant terminal spinner.
tiny-care-terminal
A little dashboard that tries to take care of you when you’re using your terminal.
theme.sh
A shell script that lets you set your terminal theme that includes 270+ preloaded themes.

Command-Line Scripting And Frameworks

Some numerous libraries and frameworks allow you to build and maintain your own command-line apps and utilities. Below you’ll find a few of those for Bash, JavaScript, and more.

Command And Conquer (cac)

Command And Conquer, also called cac, is a lightweight JavaScript framework for building command-line apps. For example, it’s been used to build several Node.js-based scaffolding tools.

zx

zx is a popular alternative to Bash from engineers at Google that allows you to write command-line apps using JavaScript with an easy-to-use API that allows you to call executables and get their output, handle errors, and more.

present

present is a Markdown-based presentation tool for the terminal that includes colors and effects and allows you to play pre-recorded playable code blocks as slides.

Bach

Bach is a Bash testing framework that can be used to test scripts that contain dangerous commands like rm -rf / and also includes APIs (e.g. @mock, @ignore, @mockallto, etc.) to mock commands.

CLUI

CLUI is a JavaScript API with utilities to allow you to build command-line interfaces with context-aware autocomplete into your apps (i.e. terminal-like applications that users interact with).

ShellCheck

ShellCheck is a shell extension to help you find bugs in your shell scripts.

Honorable Mentions

Bashō
Lets you write complex shell tasks using plain JavaScript and it mixes well with shell commands and scripts.
import
A fast and easy-to-use module system for Bash and other Unix shells.
Bash Infinity
A modular and lightweight library and boilerplate framework for writing tools using Bash.

Productivity Tools For The Terminal

Finally, this category puts together a small sampling of command-line utilities and programs that help with various productivity-related tasks like keeping stuff organized, sharing files, and more.

Dash Dash

Dash Dash is an online documentation site that presents the Unix man pages (i.e. manual pages) in a more palatable format, to help those less familiar with the terminal learn to use the command line.

nb

nb is a command-line tool with features that include local web note‑taking, bookmarking, archiving, and encryption. Storage is in plain text, includes Git-based versioning, wiki-style linking, color themes, and lots more.

Rclone

Rclone is an open-source command-line program that allows you to manage files on 40+ cloud storage services (Amazon S3, Dropbox, Google Drive, Azure, etc.). It includes cloud equivalents for familiar Unix commands and other features.

navi

navi is an interactive cheatsheet tool for your terminal. In addition to other features, you can browse through cheatsheet repositories, import cheatsheets, or add your own.

Taskbook

Taskbook is a fast command-line tool that lets you organize tasks, boards, and notes in your terminal, with features like search/filter, custom storage location, and a simple and user-friendly syntax.

Project Explorer

Project Explorer is a CLI tool that lets you build a tree visualization of any project. This would come in handy when bringing on new team members or when inheriting a new project.

transfer.sh

transfer.sh is a fast and easy-to-use app for sharing files via the command line. Includes support for services like Amazon S3, Google Drive, Storj, and the local file system.

Honorable Mentions

ack
A code-searching tool, similar to grep but optimized for programmers searching large trees of source code.
goto
A shell utility with auto-complete support to navigate to aliased directories.
bashupload
Upload files (up to 50GB) via the command line to easily share between servers, desktops, and mobile devices.
copyfiles
A command-line utility that adds extra features to copying files in your terminal.

What’s Your Favourite Command-Line Tool?

As mentioned, this wasn’t meant to be an exhaustive list, but merely a big collection of relevant command-line apps and utilities that I’ve personally come across in the past few years.

If you’ve built something yourself or if there’s one you use regularly that supercharges your terminal experience, feel free to drop it in the comments!