Alternatives To Typical Technical Illustrations And Data Visualisations Alternatives To Typical Technical Illustrations And Data Visualisations Thomas Bohm 2024-11-08T09:00:00+00:00 2025-03-04T21:34:45+00:00 Good technical illustrations and data visualisations allow users and clients to, in a manner of speaking, take time out, ponder and look at the information […]
UxDesigning For Gen Z: Expectations And UX Guidelines Designing For Gen Z: Expectations And UX Guidelines Vitaly Friedman 2024-10-30T09:00:00+00:00 2025-03-04T21:34:45+00:00 Every generation is different in very unique ways, with different habits, views, standards, and expectations. So when designing for Gen Z, what do we need […]
UxManaging multiple PHP versions is a common challenge when developing PHP applications, where applications often require different versions due to varying framework dependencies and compatibility requirements. While switching between PHP versions can be daunting, especially at the system level, several tools can streamline this process. […]
CodingLet’s face it – getting your content noticed online can be tough. But what if you could make it easy for your visitors to share your posts across social media with just a click? That’s where the right social media plugins for WordPress come in. […]
WordpressLet’s face it – getting your content noticed online can be tough. But what if you could make it easy for your visitors to share your posts across social media with just a click? That’s where the right social media plugins for WordPress come in. These tools don’t just add share buttons; they help you turn your website into a social hub, boosting engagement and expanding your reach effortlessly.
Whether you want to connect your site with platforms like Facebook, X (formerly Twitter), and Instagram, or need an all-in-one solution for social sharing and following, choosing the best WordPress social media plugins can make a world of difference. In this post, we’re looking into the top plugins that can help you maximize social interaction on your WordPress site, making it more shareable, more engaging, and ultimately more successful.
For those who want more flexibility in adding social share icons to their website, this plugin is an excellent choice. It supports a wide range of social media platforms and gives you control over the placement of icons—before or after posts, in sidebars, or even as floating buttons. You can choose from 16 different design styles and add animations or pop-ups to make the buttons more engaging. The plugin also includes share counts and allows you to reorder the icons to fit your preferences.
The free version comes with all the essential features, while the premium version unlocks additional options like themed designs, mobile-optimized displays, and more advanced pop-up and lightbox features. You can also integrate email subscriptions, allowing visitors to easily subscribe to your site. Whether you stick with the free version or upgrade, this plugin provides a robust solution for social sharing.
If you want to showcase Instagram photos on your WordPress site, this plugin makes it simple. It allows you to display posts from one or multiple Instagram accounts in a fully responsive feed that looks great on any device. Customization is easy, with options to control the size, layout, and style of your feed. You can also add multiple feeds across different pages of your site, each with its own unique look and feel.
Beyond displaying photos, this plugin helps boost social engagement by encouraging visitors to follow your Instagram account directly from your website. It’s also a time-saver, automatically updating your site with new Instagram posts. The Pro version offers even more features, like hashtag feeds, carousels, and shoppable posts, making it a powerful tool for integrating Instagram into your WordPress site.
Enhancing your site’s social sharing capabilities is easy with AddToAny. This plugin offers versatile sharing options, allowing visitors to share your content across a wide range of platforms, including Facebook, Pinterest, LinkedIn, and WhatsApp. You can choose between standard and floating share buttons, customize their appearance, and even add follow buttons to connect with your social media profiles. The plugin also supports fast and official share counts to help you track engagement.
What’s great about AddToAny is its flexibility. It integrates seamlessly with Google Analytics for tracking shares and supports URL shorteners like Bitly. The plugin is optimized for performance, loading asynchronously to keep your site fast, and it works well with a variety of themes, WooCommerce, and multilingual sites. Plus, it’s mobile-ready, with sharp SVG icons and responsive design, making it a reliable choice for boosting social media interaction on your site.
Simplify the registration and login process on your WordPress site with Nextend Social Login and Register. This plugin lets your visitors log in using their social media profiles from platforms like Facebook, Google, and X (formerly Twitter). It eliminates the need for lengthy registration forms, making it easier for users to access your site without having to remember multiple usernames and passwords. The plugin integrates smoothly with your existing WordPress login and registration forms, and users can connect multiple social accounts to a single profile.
Nextend Social Login offers plenty of features in its free version, including one-click registration, customizable redirect URLs, and the ability to use social media profile pictures as avatars. If you need more, the Pro addon expands compatibility with plugins like WooCommerce and BuddyPress and supports additional providers such as LinkedIn and Amazon. With various options for customizing user roles and login layouts, this plugin is a versatile solution for enhancing user experience on your site.
Sometimes, simplicity is key, and the Simple Share Buttons Adder plugin delivers just that. It allows you to quickly add social share buttons to your WordPress posts and pages without any hassle. The plugin offers a “Modern Share Buttons” tab, which lets you customize your buttons using CSS-based settings. This gives you control over the colors and hover effects of your buttons, allowing them to blend seamlessly with your site’s design. You can also upload and use your own custom images as share buttons for a personalized touch.
The user-friendly interface makes it easy to manage and position your share buttons exactly where you want them. Whether you’re looking to increase social engagement or just need a straightforward way to add share buttons, Simple Share Buttons Adder provides a flexible and reliable solution. For those who want more, the plugin’s dedicated website offers additional resources and customization options.
Engage your visitors directly through WhatsApp with the Social Chat plugin. This handy tool allows customers to start a conversation with you via WhatsApp or WhatsApp Business by simply clicking a button on your site. You can pre-set the first message to streamline communication, making it easier for visitors to reach out. With WhatsApp being one of the most popular messaging apps globally, this plugin can help turn casual visitors into leads by offering them a familiar and direct way to contact you.
The plugin is highly customizable, allowing you to choose different button layouts, colors, and even add a contact information box with a personalized message. For WooCommerce users, there’s a feature to add a WhatsApp button on product pages, making customer support even more accessible. The premium version expands on these features with multiple WhatsApp numbers, custom chatboxes, and integration with Google Analytics, offering a comprehensive solution for customer communication via WhatsApp.
When you need a flexible and easy-to-use social sharing solution, the Simple Social Media Share Buttons plugin has you covered. It allows you to place social media buttons in various locations on your site, such as inline with your content, in sidebars, on images, or even as popups and fly-ins. With support for popular platforms like Facebook, WhatsApp, Twitter, LinkedIn, and Pinterest, this plugin ensures your content is easily shareable across the most important social networks.
The plugin is fully customizable, offering options to hide buttons on mobile devices, display share counts, and apply animations to grab your visitors’ attention. It’s also compatible with the NextGEN Gallery plugin, allowing you to add share buttons to your photo galleries. The premium version adds even more features, including advanced positioning, color customization, and additional display options like popups and fly-ins, making it a versatile choice for boosting social engagement on your site.
If you’re looking for a lightweight and efficient way to add social sharing and following buttons to your WordPress site, Social Media Feather is a great option. This plugin focuses on simplicity and performance, allowing you to quickly integrate social media buttons into your posts, pages, and custom post types without slowing down your site. It supports all major platforms, including Facebook, Twitter, Pinterest, LinkedIn, and more, helping you extend the reach of your content across various social networks.
One of the standout features of Social Media Feather is its full support for Retina and high-resolution displays, ensuring that your buttons look sharp and professional on any device. The plugin also offers widgets and shortcodes for greater customization, allowing you to control the appearance and placement of your social buttons. For those who want to keep things simple while still providing essential social sharing features, Social Media Feather is a reliable and effective solution.
The post Best Social Media Plugins for WordPress (2024) appeared first on Hongkiat.
When developing a Laravel application, having a reliable local development environment is as important as the code itself. A good local development environment can help you work more efficiently, test your code, and avoid potential deployment issues. There are several tools available within the Laravel […]
CodingWhen developing a Laravel application, having a reliable local development environment is as important as the code itself. A good local development environment can help you work more efficiently, test your code, and avoid potential deployment issues.
There are several tools available within the Laravel ecosystem, such as Homestead, Valet, Sail, and Herd, as well as tools outside their ecosystem like MAMP.
Each tool offers unique features and benefits, catering to different needs and workflows. In this article, we’ll compare these tools to help you choose the best one for your local Laravel development.
Laravel Homestead is an official Vagrant box that provides a ready-to-use development environment with PHP, Nginx, MySQL, and Redis pre-installed.
Homestead runs on a virtual machine, ensuring that your development setup is consistent, no matter where you work, and does not affect configurations or other applications on your machine. Homestead also supports multiple PHP versions, making it easy to switch between them. You can configure and manage your setup using a simple Homestead.yaml
file.
Homestead is a great option for developers working on projects that require a full-featured virtual machine. Otherwise, lighter options might be preferable.
Laravel Valet is a lightweight development environment designed for macOS users. It automatically sets up your Mac to run Nginx in the background and uses DnsMasq to route requests on the *.test
domain to your local sites.
Though it is not intended as a replacement for more robust environments like Homestead, it offers a quick, flexible setup. It also supports a variety of other frameworks and CMSs, such as WordPress, Symfony, and Drupal, straight out of the box.
It is perfect for macOS users who prefer a fast and lightweight setup with minimal configuration.
Laravel Sail is a Docker-based development environment that provides a simple command-line interface for interacting with Docker.
It comes with pre-configured services like MySQL, Redis, MeiliSearch, and more, making it easy to get started with Laravel projects. Since it is based on Docker, you can easily configure your environment or add any other services that you may need but are not included by default through the compose.yml
file.
It is best for developers who prefer Docker-based workflows and want an easily configurable environment.
Laravel Herd is a desktop app designed to create a fast, lightweight, and user-friendly local development environment for Laravel applications. It offers a simple, zero-configuration setup and includes everything you need to get started, such as Composer, the Laravel installer, a debugger, and essential services like MySQL.
Additionally, Herd provides a seamless migration tool from Laravel Valet, and it allows you to manage different versions of Node.js and PHP. You can also manage SSL certificates and other services easily through its user-friendly interface.
A great application if you prefer ease of use with a nice UI.
MAMP is a popular tool for creating a local server environment on macOS and Windows. While it’s not specifically designed for Laravel, you can configure MAMP to run Laravel applications.
It provides an easy way to set up PHP, MySQL, and Apache or Nginx, as well as other tools on your local machine. It also includes features like PHP version switching and a user-friendly interface. This makes it a convenient option for developers who want to work on Laravel projects and other PHP projects without needing to install and configure everything manually.
Suitable for those who need a cross-platform solution and work with various PHP applications outside Laravel.
Choosing the right tool for running Laravel on localhost depends on your development needs, preferences, and operating system. Consider your specific requirements and workflow to choose the best option for your Laravel development.
The post Laravel Development Environment Compared appeared first on Hongkiat.
Whether you’re new to CSS or have years of experience, you’ve likely encountered pseudo-classes. The most commonly recognized pseudo-class is probably :hover, which allows us to style an element when it’s in the hover state, such as when a mouse pointer hovers over it. Building […]
CodingWhether you’re new to CSS or have years of experience, you’ve likely encountered pseudo-classes. The most commonly recognized pseudo-class is probably :hover
, which allows us to style an element when it’s in the hover state, such as when a mouse pointer hovers over it.
Building on concepts from our previous discussions on margin:auto and CSS Floats, this post provides a detailed examination of pseudo-classes. We’ll explore what pseudo-classes are, how they function, how they can be categorized, and how they differ from pseudo-elements.
A pseudo-class is a keyword added to CSS selectors to define a specific state of an HTML element. You can add a pseudo-class to a CSS selector using the colon syntax :
, like this: a:hover { ... }
.
A CSS class is an attribute applied to HTML elements to enforce the same style rules, such as for top menu items or sidebar widget titles. Essentially, CSS classes group or classify HTML elements that share common traits.
Pseudo-classes are similar to CSS classes because they also apply style rules to elements with shared characteristics. However, while standard classes are user-defined and visible in the source code (e.g., <div class="myClass">
), pseudo-classes are applied by user agents (e.g., web browsers) based on the current state of the HTML element.
Pseudo-classes and pseudo-elements can be used in CSS selectors but do not exist in the HTML source code. Instead, they are “inserted” by the user agent under certain conditions for use in style sheets. – W3C
The purpose of regular CSS classes is to classify or group elements. Developers group elements based on intended styling, creating classes like “menu-items,” “buttons,” or “thumbnails” to ensure consistent design across similar elements. These groupings are based on characteristics defined by the developers.
For example, a developer might use a <div>
as a thumbnail and classify it with a “thumbnail” class.
<div class="thumbnail">[...]</div>
However, HTML elements possess inherent characteristics based on their state, position, nature, and interaction with the page and user. These traits are not typically marked in HTML code, but can be targeted with pseudo-classes in CSS. Examples include:
These are the types of characteristics typically addressed by pseudo-classes. To better understand the difference between classes and pseudo-classes, let’s consider using the class .last
to identify the last elements in various parent containers.
<ul> <li>item 1</li> <li>item 2</li> <li>item 3</li> <li class="last">item 4</li> </ul> <select> <option>option 1</option> <option>option 2</option> <option>option 3</option> <option class="last">option 4</option> </select>
You can style these last-child elements with the following CSS:
li.last { text-transform: uppercase; } option.last { font-style: italic; }
But what happens when the last element changes? You’ll need to manually update the .last
class from the previous last element to the new one.
This hassle of updating classes can be avoided for certain common characteristics. For example, using a predefined :last-child
pseudo-class is highly beneficial. With this, there’s no need to mark the last element in the HTML code, and you can still style it with the following CSS:
li:last-child { text-transform: uppercase; } option:last-child { font-style: italic; }
CSS offers a variety of pseudo-classes that allow developers to target elements based on specific characteristics that might otherwise be difficult to access. You can find a comprehensive list of standard pseudo-classes on MDN.
Dynamic pseudo-classes are applied to HTML elements dynamically, based on the state they transition into due to user interactions. Some examples include :hover
, :focus
, :link
, and :visited
, all of which are commonly used with the <a>
anchor tag.
a:visited { color: #8D20AE; } .button:hover, .button:focus { font-weight: bold; }
State-based pseudo-classes are applied to elements when they are in a specific static state. Common examples include:
:checked
for checkboxes (<input type="checkbox">
):fullscreen
to target any element currently displayed in full-screen mode:disabled
for elements that can be disabled, such as <input>
, <select>
, and <button>
.The :checked
pseudo-class is particularly popular, as it indicates whether a checkbox is selected.
.checkbox:checked + label { font-style: italic; } input:disabled { background-color: #EEEEEE; }
Structural pseudo-classes target elements based on their position within the document structure. Some of the most commonly used examples include :first-child
, :last-child
, and :nth-child(n)
. These can be used to style specific child elements based on their position within a container. Another example is :root
, which targets the highest-level parent element in the DOM.
There are also pseudo-classes that don’t fit neatly into other categories, such as:
:not(x)
, which selects elements that don’t match the specified selector x:lang(language-code)
for targeting elements based on the language of their content:dir(directionality)
, which selects elements with content in a specific directionality (e.g., left-to-right or right-to-left).p:lang(ko) { background-color: #FFFF00; } :root { background-color: #FAEBD7; }
One of the most challenging aspects of pseudo-classes is understanding the difference between the :nth-child
and :nth-of-type
pseudo-classes.
Both of these are structural pseudo-classes that target specific elements within a parent element (container), but they do so in distinct ways.
Assume n is 2. The :nth-child(n)
selector targets an element that is the second child of its parent element, regardless of the type of element. On the other hand, :nth-of-type(n)
targets the second occurrence of a specific type of element (e.g., a paragraph) within the parent element.
Let’s take a look at an example to illustrate this difference:
/* Styles the second child element inside its parent, which can be of any type */ p:nth-child(2) { color: #1E90FF; /* Light blue */ } /* Styles the second paragraph inside its parent element */ p:nth-of-type(2) { font-weight: bold; }
Now, let’s see how this CSS affects the HTML in two different scenarios.
In Case 1, the second element inside a <div>
is an unordered list, so the :nth-child(2)
rule does not apply to the paragraphs. Although the unordered list is the second child, it is not a paragraph.
If, however, the parent element contains a second paragraph, the :nth-of-type(2)
rule will apply, since this rule specifically targets <p>
elements and ignores other types of elements (like unordered lists) within the parent element.
In our example, the :nth-of-type(2)
rule will style the second paragraph, which is Child 3 in this case.
<!-- Case 1 --> <div> <p>Paragraph 1, Child 1</p> <ul>Unordered List 1, Child 2</ul> <p>Paragraph 2, Child 3</p> </div>
In Case 2, we move the unordered list to the third position, placing the second paragraph before it. Now, both the :nth-child(2)
and :nth-of-type(2)
rules will apply, as the second paragraph is both the second child of its parent <div>
and the second <p>
element.
<!-- Case 2 --> <div> <p>Paragraph 1, Child 1</p> <p>Paragraph 2, Child 2</p> <ul>Unordered List 1, Child 3</ul> </div>
To explore the differences between :nth-child
and :nth-of-type
further, CSS Tricks has a great post on the topic. If you use SASS, Family.scss can help you create complex nth-child based elements.
When discussing pseudo-classes, it’s crucial to understand how they differ from pseudo-elements to avoid confusion.
Pseudo-elements
, like ::before
and ::after
(see this tutorial on how to use them), are also added by user agents and can be targeted and styled with CSS in a manner similar to pseudo-classes.
The key difference is that pseudo-classes are used to select HTML elements that already exist in the document tree, though they may not be explicitly marked, while pseudo-elements allow us to style elements that don’t typically exist in the DOM on their own. Examples include ::before
and ::after
, or parts of existing elements like ::first-letter
and ::placeholder
.
There is also a difference in syntax: pseudo-elements are generally written with double colons ::
, while pseudo-classes use a single colon :
. This can be confusing because, in CSS2, pseudo-elements were also marked with a single colon—browsers still support this older syntax.
Additionally, there are differences in how we can target pseudo-classes and pseudo-elements with CSS.
Pseudo-elements must appear after the sequence of selectors, while pseudo-classes can be positioned anywhere within the CSS selector sequence.
For instance, you can target the last list item in a <ul>
element in two different ways:
<ul> <li class="red"></li> <li></li> <li class="red"></li> <li class="red"></li> </ul>
ul > :last-child.red { color: #B0171F; }
OR
ul > .red:last-child { color: #B0171F; }
The first selector targets the last child inside the <ul>
element that has the class .red
, while the second selector targets the last child among the elements that possess the .red
class inside <ul>
. As you can see, the position of the pseudo-class can vary.
Let’s attempt something similar with pseudo-elements.
ul > .red::after { display: block; content: 'red'; color: #B0171F; }
The CSS above is valid, and the text “red” will appear after the <li>
items with the class .red
.
However, the following code will not work because we cannot change the position of a pseudo-element within the selector sequence.
ul > ::after.red { display: block; content: 'red'; color: #B0171F; }
Only one pseudo-element can be used per selector, whereas pseudo-classes can be combined as long as the combination makes sense. For example, to target first-child elements that are also read-only, you can combine the pseudo-classes :first-child
and :read-only
as follows:
:first-child:read-only { color: #EEEEEE; }
Not all selector syntax that includes a :
is a proper CSS pseudo-class. If you’ve used jQuery, you might be familiar with selectors like $(':checkbox')
, $(':input')
, and $(':selected')
.
It’s important to note that these are not CSS pseudo-classes being targeted by jQuery. Instead, they are known as jQuery selector extensions.
jQuery selector extensions allow you to target HTML elements with simpler keywords. Many of these extensions are shorthand for combinations of standard CSS selectors, represented by a single keyword.
/* Change the font of all input-related HTML elements, like button, select, and input */ $( ":input" ).css("font-family","courier new");
The post Comprehensive Guide to CSS Pseudo-Classes and Their Usage appeared first on Hongkiat.
If I Was Starting My Career Today: Thoughts After 15 Years Spent In UX Design (Part 2) If I Was Starting My Career Today: Thoughts After 15 Years Spent In UX Design (Part 2) Andrii Zhdan 2024-08-09T11:00:00+00:00 2025-03-04T21:34:45+00:00 In the previous article in my two-part […]
Ux
2024-08-09T11:00:00+00:00
2025-03-04T21:34:45+00:00
In the previous article in my two-part series, I have explained how important it is to start by mastering your design tools, to work on your portfolio (even if you have very little work experience — which is to be expected at this stage), and to carefully prepare for your first design interviews.
If all goes according to plan, and with a little bit of luck, you’ll land your first junior UX job — and then, of course, you’ll be facing more challenges, about which I am about to speak in this second article in my two-part article series.
You have probably heard of the Pareto Rule, which states that 20% of actions provide 80% of the results.
“The Pareto Principle is a concept that specifies that 80% of consequences come from 20% of the causes, asserting an unequal relationship between inputs and outputs. The principle was named after the economist Vilfredo Pareto.”
This means that some of your actions will help you grow much faster than others.
But before we go into the details, let’s briefly consider the junior UX designer path. I think it’s clear that, at first, juniors usually assist other designers with simple but time-consuming tasks. Then, the level of complexity and your responsibilities start increasing, depending on your performance.
So, you got your first design job? Great! Here are a few things you can focus on if you want to be growing at a faster pace.
The simple but slow way to go is to do your work and then wait until your superiors notice how good you are and start giving you more complex tasks. The problem is that people focus on themselves too much.
So, to “cut some corners,” you need to actively look for challenges. It’s scary, I know, but remember, people who invented any new groundbreaking UX approach or a new framework you see in books and manuals now used their intuition first. You have the whole World Wide Web full of articles and lectures about that. So, define the skill you want to develop, spend a day reading about this topic, find a real problem, and practice. Then, share what you did and get some feedback. After a few iterations, I bet you will be assigned the first real task for your practice!
Take the time to look again at the screenshot of the Amazon website (from Part One):
User interfaces didn’t appear in their present form right from the start. Instead, they evolved to their current state over the span of many years. And you all were part of their evolution, albeit passively — you registered on different websites, reset your passwords quite a few times, clicked onboarding screens, filled out short and long web forms, used search, and so on.
In your design work, all tasks (or 99% of them, at least at the beginning) will be based on those UX patterns. You don’t need to reinvent the bicycle; you only need to remember what you already know and pay attention to the details while using the interfaces of the apps on your smartphone and on your computer. Ask yourself:
- Why was this designed this way?
- What is not clear enough for me as a user?
- What is thought out well and what is not?
All of today’s great design solutions were built based on common sense and then documented so that other people can learn how to re-use this knowledge. Develop your own “common sense” skill every day by being a careful observer and by living your life consciously. Notice the patterns of good design, try to understand and memorize them, and then implement and rethink them in your own work.
I can also highly recommend the Smart Interface Design Patterns course with Vitaly Friedman. It provides guidelines and best practices for common components in modern interfaces. Inventing a new solution for every problem takes time, and too often, it’s just unnecessary. Instead, we can rely on bulletproof design patterns to avoid issues down the line. This course helps with just that. In the course, you will study hundreds of hand-picked examples, from complex navigation to filters, tables, and forms, and you will work on actual real-life challenges.

The ability to convey complex thoughts and ideas in the form of clear sentences defines how effectively you will be able to interact with other people.
This is a core work skill — a skill that you’ll be actually using your whole life, and not only in your work. I have written about this topic in much detail previously:
“Good communication is about sharing your ideas as clearly as possible.”
— “Effective Communication For Everyday Meetings” (Smashing Magazine)
In my article, I have described all the general principles that apply to effective communication, with the most important being: to develop a skill, you need to practice.
As a quick exercise, try telling your friends about the work you do and not to be boring while explaining the details. You will feel that you are on the right track if they do not try to change the topic and instead ask you additional questions!
Don’t wait for your yearly review to hear about what you were doing right and wrong. Ask people for feedback and suggestions, and ask them often.
To help them start, first, tell them about your weak side and ask them to tell you their own impressions. Try encouraging them to expand their input and ask for recommendations on how you could fix your weaknesses. Don’t forget to tell them when you are trying to apply their suggestions in practice. After all, these people helped you become better, so be thankful.
I see a lot of designers trying to apply all of their experience to every project, and they often complain that it doesn’t work — customers refuse to follow the entire classical UX process, such as defining User Personas, creating the Information Architecture (IA), outlining the customer journey map, and so on. Sometimes, it happens because clients don’t have the time and budget for it, or they don’t see the value because the designer can’t explain it in a proper way.
But remember that many great products were built without using all of today’s available and tested UX approaches &mdahs; this doesn’t mean those approaches are useless. But initially, there was only common sense and many attempts to get better results, and only then did someone describe something as a working approach and specify all the details. So, before trying to apply any of these UX techniques, think about what you need to achieve. Is there any other way to get there within your time and budget?
Learn how the business works. Talk to customers in business language and communicate the value you create and not the specific approach, framework, or tool that you’ll be using.
“Good UX design is where value comes into the picture. We add value when we transform a product or service from delivering a poor experience to providing a good experience.”
— “The Value of Great UX,” by Jared Spool
Yes, user experience should be first, but let’s be honest — we also love nice things! The same goes for your customers; they can’t always see the UX part of your work but can always say whether the interface is good-looking. So, learn the composition and color theory, use elegant illustrations and icons, learn typography, and always strive to make your work visually appealing. Some would say that it’s not so important, but trust me, it is.
As an exercise, try to copy the design of a few beautifully looking interfaces. Take a look at an interface screen, then close it and try to make a copy of it from memory. When you are done, compare the two and then make a few more adjustments in order to have as close a copy of the interface as possible. Try to understand why the original was built the way it is. I bet this process of reproducing an interface will help you understand many things you haven’t been noticing before.
Prepare to get some new tasks in advance. Create a list of questions, and don’t forget to ask about the deadlines. Align your plan and the number of iterations so people know precisely what and when to expect from you. Be curious (but not annoying) by asking or sending questions every few hours (but try to first search for the answers online). Even if you don’t find the exact answer, it’ll help you formulate the right questions better and get a better view of the “big picture.” Remember, one day, you will get a task directly from the customer, so fetching the data you need to complete tasks correctly is an excellent skill to develop.
When you are just beginning to learn, too many articles about UX design will look like absolute “must-reads” to you. But you will drown in the information if you try to read them all in no particular order. Better, instead of just trying to read everything, try first to find a mentor who will help you build a learning plan and will advise you along the way.
Another good way to start is to complete a solid UX online course. If you can’t, take the learning program of any popular UX course out there and research the topics from the course’s list one by one. Also, you can use such a structured list (going from easier to more complex UX topics) for filtering articles you are going to read.
There are many excellent courses out there, and here are a few suggestions:
- “Selection of free UX design courses, including those offering certifications,” by Cheshta Dua
In this article, the author shares a few free UX design courses which helped her get started as a UX designer.- “Best free UX design courses — 2024,” by Cynthia Vinney (UX Design Institute)
This is a comparison of a few free UX design courses, both online and in-person.- “The 10 Best Free UX Design Courses in 2024,” by Rachel Meltze (CareerFoundry)
A selection of free UX design courses — using these you can learn the fundamentals of UX design, the tools designers use, and more about the UX design career path.- “The HTML/CSS Basics (.dev),” by Geoff Graham
The Basics is an excellent online course that teaches the basic principles of front-end development. It’s a good “entry point” for those just coming into front-end development or perhaps for someone with experience writing code from years ago who wants to jump into modern-day development.
“I fear not the man who has practiced 10,000 kicks once, but the man who has practiced one kick 10,000 times.”
— Bruce Lee
You may have read a lot about some new revolutionary UX approaches, but only practicing allows you to convert this knowledge into a skill. Our brain continually works to clear out unnecessary information from our memory. Therefore, actively practicing the ideas and knowledge that you have learned is the only way to signal to your brain that this knowledge is essential to be retained and re-used.
On a related note, you will likely remember also the popular “10,000-hour rule,” which was popularized by Malcolm Gladwell’s bestseller book Outliers.
As Malcolm says, the rule goes like this: it takes 10,000 hours of intensive practice to achieve mastery of complex skills and materials, like playing the violin or getting as good as Bill Gates at computer programming. Turns out, practice is important, and it’s surprising how much time and effort it may take to master something complicated. But later research also suggests that someone could practice for thousands of hours and still not be a master performer. They could be outperformed by someone who practiced less but had a teacher who showed them just what to focus on at a key moment in their practice.
So, remember my advice from the previous section? Try to find a mentor because, as I said earlier, learning and practicing with a mentor and a good plan will often lead to better results.
Instead of a conclusion (or trying to give you the answer to the ultimate question of life, the universe, and everything), only a few final words of advice.
Remember, there doesn’t exist a single correct way to do things because there are no absolute criteria to define “things done properly.” You can apply all your knowledge and required steps in the classical design process, and the product may fail.
At the same time, someone could quickly develop a minimum viable product (MVP) without using all of the standard design phases — and still conquer the market. Don’t believe me?
The first Apple iPhone, introduced 17 years ago, didn’t have even a basic copy/paste feature yet we all know how the iPhone conquered the world (and it’s not only the iPhone, there are many other successful MVP examples out there, often conceived by small startups). It’s because Apple engineers and designers got the core product design concept right; they could release a product that didn’t yet have everything in it.
So yes, you need to read a lot about UX and UI design, watch tutorials, learn the design theory, try different approaches, speak to the people using your product (or the first alpha or beta version of it), and practice. But in the end, always ask yourself, “Is this the most efficient way to bring value to people and get the needed results?” If the answer is “No,” update your design plan. Because things are not happening by themselves. Instead, we, humans, make things happen.
You are the pilot of your plane, so don’t expect someone else to care about your success more than you. Do your best. Make corrections and iterate. Learn, learn, learn. And sooner or later, you’ll reach success!
A Selection Of Design Resources (Part One, Part Two)
One popular layout style on the web is the masonry layout, often used in image galleries and portfolio websites to display images or items of varying sizes. Traditionally, creating a masonry layout required JavaScript libraries, such as the popular Masonry.js by DeSandro and MiniMasonry. However, […]
CodingOne popular layout style on the web is the masonry layout, often used in image galleries and portfolio websites to display images or items of varying sizes.
Traditionally, creating a masonry layout required JavaScript libraries, such as the popular Masonry.js by DeSandro and MiniMasonry. However, with CSS Grid, you can now create this layout using pure CSS.
In this article, we will explore what a CSS Grid masonry layout is and provide some examples to help you understand how it works. Let’s get started.
CSS Grid is a native CSS layout system that provides a grid-based framework where you can define rows and columns and place items within this grid. The masonry layout can be created by combining CSS Grid with certain properties that allow items to span multiple rows or columns, creating the masonry effect. Let’s start with a simple example to understand the basics of creating a masonry layout using CSS Grid.
First, we have the HTML. We have a container with eight items. Each item has a different height and width so that we can see the masonry effect more clearly.
<div class="masonry"> <div class="gallery"> <figure> <img src="images/image-1.jpg" width="600" height="1200" /> </figure> </div> <div class="gallery"> <figure> <img src="images/image-2.jpg" width="400" height="200" /> </figure> </div> // 6 more items... </div>
And, the CSS, as follows:
.masonry { display: grid; grid-template-columns: repeat(6, 1fr); grid-template-rows: masonry; gap: 10px; } // More stylistic styles...
The grid-template-columns
property defines six equal columns, the gap
property adds space between the grid items, and the grid-template-rows: masonry;
property creates the masonry layout based on the available space within the grid container.
You can adjust the layout behavior using the masonry-auto-flow
property. When set to next
, this property displays items in order along the grid axis instead of placing them in the track with the most free space. As shown below, the items are placed in order from left to right, top to bottom, regardless of the available space.
One of the advantages of using CSS Grid is that it allows you to create responsive layouts with ease. You can use media queries to adjust the grid layout based on the screen size. For example, you can change the number of columns in the grid based on the screen width to ensure that the layout looks good on different devices.
@media (max-width: 1200px) { .masonry { grid-template-columns: repeat(4, 1fr); } } @media (max-width: 640px) { .masonry { grid-template-columns: repeat(2, 1fr); } }
You can also change the repeat()
value to use auto-fill
and minmax()
functions to create a responsive layout that automatically adjusts the number of columns based on the available space. The minmax()
function allows you to set a minimum and maximum size for the columns, ensuring that they don’t get too small or too large.
.masonry { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); grid-template-rows: masonry; gap: 10px; }
That’s it! You now have a responsive masonry layout that adjusts based on the screen size. You can experiment with different values for the minmax()
function and the gap
property to achieve the desired layout for your project.
It’s important to note that CSS Grid with the masonry layout is still in the experimental stage and not yet supported in mainstream browsers.
Browser | Version | Support |
---|---|---|
Google Chrome | Not supported | |
Firefox | 77-131 | Experimental. Can be enabled from config. |
Safari | Technology Preview | Supported |
Microsoft Edge | Not supported | |
Opera | Not supported | |
Safari on iOS | Technology Preview | Supported |
Android WebView | Not supported | |
Samsung Internet | Not supported |
As shown in the table, you can view the masonry layout in the Safari Technology Preview or Firefox.
If you’re using Firefox, type about:config
in the address bar, search for the configuration name, and set it to true
. The update will take effect immediately, so you can refresh the page without needing to restart the browser.
The status of browser support may change, so it’s a good idea to check the latest updates from the respective browser documentation or support pages.
The CSS Grid masonry layout is a powerful tool that allows you to create complex grid-based layouts with ease. By combining CSS Grid with media queries and other CSS properties, you can create responsive masonry layouts that look great on all devices. While the masonry layout is still in the experimental stage, it is worth experimenting with to see how it can benefit your projects.
Last but not least, here’s a CodePen demo for you to try out. Enjoy!
See the Pen CSS Grid Masonry by HONGKIAT (@hkdc) on CodePen.
The post Native CSS Masonry Grid appeared first on Hongkiat.
If I Was Starting My Career Today: Thoughts After 15 Years Spent In UX Design (Part 1) If I Was Starting My Career Today: Thoughts After 15 Years Spent In UX Design (Part 1) Andrii Zhdan 2024-08-02T11:00:00+00:00 2025-03-04T21:34:45+00:00 My design career began in 2008. The […]
Ux
2024-08-02T11:00:00+00:00
2025-03-04T21:34:45+00:00
My design career began in 2008. The first book that I read on the topic of design was Photoshop Tips And Tricks by Scott Kelby, which was a book about a very popular design tool, but not about user experience (UX) design itself. Back at the time, I didn’t know many of the approaches and techniques that even junior designers know today because they weren’t invented yet, and also because I was just beginning my learning journey and finding my way in UX design. But now I have diverse experience; I’m myself hiring designers for my team, and I know much more.
In my two-part series of articles, I’ll try to share with you what I wish I knew if I was starting my career today.
“If you want to go somewhere, it is best to find someone who has already been there.”
The two-part series contains four sections, each roughly covering one key stage in your beginner career:
I’ll cover the first three topics in this first article and the fourth one in the second article. In addition, I will include very detailed Further Reading sections at the end of each part.
When you’re about to start learning, every day, you will receive new pieces of evidence of how many things you don’t know yet. You will see people who have been doing this for years and you will doubt whether you can do this, too. But there is a nuance I want to highlight: first, take a look at the following screenshot:
This is the Amazon website in 2008 when I was about to start my design career and received my first paycheck as a beginner designer.
And this is how Amazon looked like even earlier, in 2002:
In 2002, Amazon made 3.93 billion US dollars in profits. I dare say they could have hired the very best designers at the time. So today, when you speak to a designer with twenty years of experience and think, “Oh, this designer must be on a very high level now, a true master of his craft,” remind yourself about the state of UX design that existed when the designer’s career was about to start, sometime in the early 2000s!
A lot of the knowledge that I have learned and that is over five years old is outdated now, and the learning complexity only increases every year.
It doesn’t matter how many years you have been in this profession; what matters are the challenges you met in the last few years and the lessons you’ve learned from them.
“
Are you a beginner or an aspiring user interface/user experience designer? Don’t be afraid to go through all the steps in your UX design journey. Patience and a good plan will let you become a good designer faster than you think.
“The best time to start was yesterday. The next best time is now.”
This was the more philosophical part of my writing, where I wanted to help you become better motivated. Now, let’s continue with the more practical things and advice!
When I was just beginning to learn, most of us did our design work in Adobe Photoshop.
In Photoshop, there were no components, styles, design libraries, auto layouts, and so on. Every screen was in another PSD file, and even making rounded corners on a rectangle object was a difficult task. Files were “heavy,” and sometimes I needed to wait thirty or more seconds to open a file and check what screen was inside while changing a button’s name or label in twenty separate PSD files (each containing only one design screen, remember?) could take up to an hour, depending on the power of your computer.
There were many digital design tools at the time, including Fireworks — which some professionals considered superior to Photoshop, and for quite a few reasons — but this is not the main point of my story. One way or another, Photoshop back then became very popular among designers and we all absolutely had to have it in our toolset, no matter what other tools we also needed and used.
Now computers are much faster, and our design tools have evolved quite a bit, too. For example, I can apply multiple changes to multiple design screens in just a few seconds by using Figma components and a proper structure of the design file, I can design/prototype responsive designs by using auto-layout, and more.
In one word, knowing your design tool can be a real “superpower” for junior UX designers — a power that beginners often ignore. When you know your tool inside-out, you’ll spend less time on the design routine and you’ll have more time for learning new things.
Master your tool(s) of choice (be it Figma Design or Illustrator, Sketch, Affinity Designer, Canva, Framer, and so on) in the most efficient way, and free up to a couple of extra hours every day for reading, doing tutorials, or taking longer breaks.
Learn all the key features and options, and discover and remember the most important hotkeys so you’ll be working without the need to constantly reach for your mouse and navigate the “web” of menus and sub-menus. It’s no secret that we, designers, mostly learn through doing practical tasks. So, imagine how much time it would save you within a few years of your career!
Also, it’s your chance: developers are rolling out new features for beginner designers and pro designers simultaneously, but junior designers usually have more time to learn those updates! So, be faster and get your advantage!
You need to admit it: your portfolio (or, to put it more precisely, the lack of it) will be the main pain point at the start.
You may hear sometimes statements such as: “We understand that being a junior designer is not about having a portfolio…” But the fact is that we all would like to see some results of your work, even if it is your very early work on a few design projects or concepts. Remember, if you have something to show, this would always be a considerable advantage!
I have heard from some juniors that they don’t want to invest time in their portfolio because this work is not payable and it’s time-consuming. But sitting and waiting and getting rejected again and again is also time-consuming. And spending a few of your first career years in the wrong company is also time-consuming (and disappointing, too). So my advice is to spend some time in advance on showcasing your work and then get much better results in the near future.
In case you need some extra motivation, here is a quote from Muhammad Ali, regarded as one of the most significant sports figures of the 20th century:
“I hated every minute of training, but I said to myself, ‘Do not quit. Suffer now and live the rest of your life as a champion.’”
— Muhammad Ali
Ready to fire but have no idea where to start? Here are a few options:
Don’t wait until someone hands you your chance on a “silver platter.” There are many projects that need the designer’s hands and help but can’t get such help yet. Assist them and then show the results of your work in your first portfolio. It gives you a huge advantage over other candidates who haven’t worked on their portfolios yet!
From what I’ve heard, getting the first job is the biggest problem for a junior designer, so I will focus on this part in more detail.
To reach the goal, you should formulate it correctly. It’s already formulated in this case, but most candidates understand it wrong. The right goal here is to be invited to an interview — not to get an offer right now or tell everything about your life in the CV document. You just need to break through the first level of filtering.
Note: Some of these tips are for absolute beginners. Do they sound too obvious to you? Apologies if so. However, all of them are based on my personal experience, so I think there are no tips that I should omit.
Note: There are many ways to show your portfolio, and Figma is only one of them. For ideas, you can check “Figma Portfolio Templates & Examples” (a curated selection of portfolio templates for Figma). Or even better, you can self-host your portfolio on your own domain and website; however, this may require some more advanced technical skills and knowledge, so you can leave this idea for later.
The test task aims to assess what we can expect from you in the workplace. And this is not just about the quality of your design skills — it’s also about how you will communicate with others and how you will be able to propose practical solutions to problems.
What do I mean by “practical solutions”? In the real world, designers always work within certain limitations (constraints), such as time, budget, team capacity, and so on. So, if you have some bright ideas that are likely very hard to implement, keep these for the interview. The test task is a way to show that you are someone who can define the correct problems and do the proper work, e.g. find the solutions to them.
A few words of advice on how to do exactly that:
The interview is the most challenging part because the most optimal way to prepare for it depends on the specific company where you’re applying for the job and the interviewer’s experience. But there are still a few “universal” things you can do in order to increase your chances:
Thank you for following me so far! Hopefully, you have learned your design tools, worked on your portfolio, and prepared meticulously for your first interviews. If all goes according to plan, sooner or later, you’ll get your first junior UX job. And then you’ll face more challenges, about which I will speak in detail in the second part of my two-part article series.
But before that, do check Further Reading, where I have gathered a few resources that will be very useful if you are just about to begin your UX design career.
Basic Design Resources
A List of Design Resources from the Nielsen Norman Group
In traditional responsive design, we rely on media queries to change styles based on the overall viewport size. This works well for adjusting layouts for different screen sizes, but it falls short when you need components to adapt based on their container’s size. To solve […]
CodingIn traditional responsive design, we rely on media queries to change styles based on the overall viewport size. This works well for adjusting layouts for different screen sizes, but it falls short when you need components to adapt based on their container’s size.
To solve this situation, Container Queries were introduced in CSS. They allow you to apply styles to elements based on the dimensions of their containing block, giving you more granular control over responsive design.
Let’s say we have a Card component, containing an image, title, and a few paragraphs. The Card has two layout modes: horizontal for large screens and vertical for smaller screens.
In the horizontal mode, the image will be on the left, and the title and paragraphs are on the right.
In the vertical mode, the image is on top, and the title and paragraphs are below it.
We want this Card to switch between these two modes. Traditionally, we would wrap the styles around the @media
query, for example:
.card { display: flex; gap: 4rem; } .card .featured-img { width: 40%; } .card .content { width: 60%; } @media screen and (width <= 720px) { .card { flex-direction: column; } .card .featured-img { width: 100%; } .card .content { width: 100%; } }
The problem here is that Media Queries only account for the viewport size, not the container size. If the Card is placed inside a container with a width of 500px, the Card will still be in the horizontal mode, even though it’s not suitable for the container size. We may end up with the content and the image being squished, or the image overflowing the container.
This is one example where Container Queries can be useful. With Container Queries, we can apply styles based on the container’s size, instead of just the viewport size.
To use them, we will need to wrap our .card
with a new container. In this example, we will name it .card-container
. Then we can add it with the container-type: inline-size
declaration.
.card-container { container-type: inline-size; width: 100%; }
The inline-size
value specifically enables querying the inline dimension, usually the width in horizontal writing modes of a container.
When we set container-type: inline-size
on an element, we’re essentially telling the browser to treat that element as a container whose width can be queried using Container Queries. This is required for applying styles based on the size of the container, rather than the viewport. The width
is also important to ensure the container takes up the full width of its parent.
Now, we can apply the styles based on the container’s size in addition to the Media Queries:
@container (max-width: 720px) { .card { flex-direction: column; } .card .featured-img { width: 100%; } .card .content { width: 100%; } }
The two cards from our example should now switch to the vertical layout when the container’s width is less than 720px, regardless of the current viewport size.
Browser | Desktop Version | Mobile Version |
---|---|---|
Google Chrome | 105 and later | 105 and later |
Mozilla Firefox | 109 and later | 109 and later |
Safari | 16.4 and later | 16.4 and later |
Microsoft Edge | 105 and later | 105 and later |
Opera | 91 and later | 91 and later |
Internet Explorer | Not supported | Not supported |
Samsung Internet | N/A | 20.0 and later |
We’ve walked through a very common use case of using Container Queries. We can actually do so much more with them to create more innovative features on our website, such as combining them with animations, interactive elements, and more. Here are some demos of using Container Queries for your inspiration.
You can resize the container size vertically or horizontally and see the house expand with more rooms and windows.
See the Pen CSS Container Query House by Arco (@Lumocra) on CodePen.
See the Pen Responsive House with CSS Container Query by Gayane Gasparyan (@gayane-gasparyan) on CodePen.
Click the button Add Squishy to add more squishies inside the block and see how their reaction changes the more you add as there isn’t enough room inside.
See the Pen CSS Container Queries by Max Swann (@maxcswann) on CodePen.
The post CSS Container Queries appeared first on Hongkiat.
CSS Scroll Snap was introduced to allow you to define snap points for scrollable elements. It ensures that the scrolling lands precisely at the desired points. This new CSS feature is especially useful for creating carousels, slideshows, or any layout where you want to control […]
CodingCSS Scroll Snap was introduced to allow you to define snap points for scrollable elements. It ensures that the scrolling lands precisely at the desired points.
This new CSS feature is especially useful for creating carousels, slideshows, or any layout where you want to control the user’s scrolling experience. Let’s see how it works.
The CSS Scroll Snap module introduces two main new properties to give us more control of the scrolling behavior:
scroll-snap-type
: This property is applied to the container element to define the snapping behavior. It can be set to x
, y
, or both
to specify the axis of snapping. It also takes a second argument which can be set to mandatory
or proximity
. The mandatory
value forces the scroll to snap to the nearest snap point, while proximity
allows the scroll to stop at any point within the snap area.scroll-snap-align
: This property is applied to the scrollable elements within the container to define the snap points. It can be set to start
, center
, or end
to specify where the element should snap to the container. It can also be set to none
to disable snapping for a specific element.First, let’s say we want to create a horizontal carousel of images. We want each image to slide and immediately snap into place as we scroll it. First, we place the HTML, as follows:
<div class="carousel"> <div class="slide"> <img src="/image-1.jpg" width="600" height="400" /> </div> <div class="slide"> <img src="/image-2.jpg" width="600" height="400" /> </div> <div class="slide"> <img src="/image-3.jpg" width="600" height="400" /> </div> <div class="slide"> <img src="/image-4.jpg" width="600" height="400" /> </div> </div>
As well as the styles.
.carousel { display: flex; overflow-x: scroll; scroll-snap-type: x mandatory; } .image { flex: 0 0 100%; scroll-snap-align: center; /* Stylistic elements */ width: 100%; height: 100vh; display: flex; align-items: center; justify-content: center; font-size: 2rem; background-color: #dddddd; }
In this example, we set the scroll-snap-type
property to x mandatory
on the .carousel
container, indicating that the scroll snapping should happen horizontally and be mandatory. We also set the scroll-snap-align
property to center
on the .image
elements, meaning each image will snap to the center of the container as you scroll.
See the Pen Scroll Snap by HONGKIAT (@hkdc)on CodePen.
To make it scroll vertically, we can simply set the scroll-snap-type
value to y
, and change the direction of our Flex layout so each element would stack vertically.
.carousel { display: flex; flex-direction: column; overflow-y: scroll; height: 100vh; scroll-snap-type: y mandatory; } /* ...Remaining code... */
Now, let’s scroll vertically.
See the Pen Scroll Snap (Vertical) by HONGKIAT (@hkdc) on CodePen.
Browser | Desktop Version | Mobile Version |
---|---|---|
Google Chrome | 69 and later | 127 and later |
Mozilla Firefox | 68 and later | 68 and later |
Safari | 11 and later | 11 and later |
Microsoft Edge | 79 and later | 79 and later |
Opera | 64 and later | 80 and later |
Internet Explorer | Not supported | Not supported |
Samsung Internet | N/A | 10.1 and later |
CSS Scroll Snap is a powerful tool for creating smooth and controlled scrolling experiences. Whether you’re building a carousel, a slideshow, or any scrollable layout, you can now create the perfect scrolling effect without any JavaScript added.
In this article, we’ve only touched the very basic implementations. There are a lot more creative ways we can leverage CSS Scroll Snap. Here are some of them for your inspiration.
Our carousel created in this article is pretty basic. The following demo shows how you can add controls like buttons and pagination into the carousel, all without any JavaScript involved.
See the Pen A CSS-only Carousel Slider by Christian Schaefer (@Schepp)on CodePen.
Similar to what we created here, but with more vibrant colors, added with animated text.
See the Pen Animated Verbs by Ryan Mulligan (@hexagoncircle)on CodePen.
Creative use of grid layouts combined with CSS Scroll Snap on each column.
See the Pen Modern Blog Layout with CSS Grid by Aysenur Turk (@TurkAysenur)
on CodePen.
The post Snappy Scroll with CSS Scroll Snap appeared first on Hongkiat.
Rethinking The Role Of Your UX Teams And Move Beyond Firefighting Rethinking The Role Of Your UX Teams And Move Beyond Firefighting Paul Boag 2024-07-29T18:00:00+00:00 2025-03-04T21:34:45+00:00 In my experience of building and supporting UX teams, most of them are significantly under-resourced. In fact, the term […]
Ux
2024-07-29T18:00:00+00:00
2025-03-04T21:34:45+00:00
In my experience of building and supporting UX teams, most of them are significantly under-resourced. In fact, the term “team” can often be a stretch, with many user experience professionals finding themselves alone in their roles.
Typically, there are way more projects that impact the user experience than the team can realistically work on. Consequently, most UX teams are in a constant state of firefighting and achieve relatively little in improving the overall experience.
We can complain about being under-resourced as much as we want, but the truth is that our teams are unlikely to grow to a size where we have sufficient staff to address every detail of the experience. Therefore, in this post, I want to step back and reconsider the role of user experience professionals and how UX teams can best improve the user experience of an organization.
There is a danger that as UX professionals, we focus too much on the tools of our trade rather than the desired outcome.
In other words, we tend to think that our role involves activities such as:
But these are merely the means to an end, not the end goal itself. These activities are also time-consuming and resource-intensive, potentially monopolizing the attention of a small UX team.
Our true role is to improve the user experience as they interact with our organization’s digital channels.
“
This reframing of our role opens up new possibilities for how we can best serve our organizations and their customers. Instead of solely focusing on the tactical activities of UX, we must proactively identify the most impactful opportunities to enhance the overall customer experience.
If our goal is to elevate the customer experience, rather than solely executing UX activities, we need to change how we approach our role, especially in under-resourced teams.
To maximize our impact, we must shift from a tactical, project-based mindset to a more strategic, leadership-oriented one.
“
As I help shape UX teams in organizations, I achieve this by focusing on four critical areas:
Let’s explore these in turn.
It is important for any UX team to demonstrate its value to the organization. One way to achieve this is by creating a set of tangible resources that can be utilized by others throughout the organization.
Therefore, when creating a new UX team, I initially focus on establishing a core set of resources that provide value and leave an impressive impression.
Some of the resources I typically focus on producing include:
These resources need to be viewed as living services that your UX team supports and refines over time. Note as well that these resources include educational elements. The importance of education and training cannot be overstated.
By providing training and educational resources, your UX team can empower and upskill the broader organization, enabling them to better prioritize and champion user experience improvements. This approach effectively extends the team’s reach beyond its limited internal headcount, seeking to turn everybody into user experience practitioners.
This training provision should include a blend of ‘live’ learning and self-learning materials, with a greater focus on the latter since it can be created once and updated periodically.
Most of the self-learning content will be integrated into the playbook and will either be custom-created by your UX team (when specific to your organization) or purchased (when more generic).
In addition to this self-learning content, the team can also offer longer workshops, lunchtime inspirational presentations, and possibly even in-house conferences.
Of course, the devil can be in the details when it comes to the user experience, so colleagues across the organization will also need individual support.
Although your UX team may not have the capacity to work directly on every customer experience initiative, you can provide consultative services to guide and support other teams. This strategic approach enables your UX team to have a more significant impact by empowering and upskilling the broader organization, rather than solely concentrating on executing design artifacts.
Services I tend to offer include:
But it is important that your UX team limits their involvement and resists the urge to get deeply involved in the execution of every project. Their role is to be an advisor, not an implementer.
Through the provision of these consultative services, your UX team will start identifying individuals across the organization who value user experience and recognize its importance to some degree. The ultimate goal is to transform these individuals into advocates for UX, a process that can be facilitated by establishing a UX community within your organization.
Building a UX community within the organization can amplify the impact of your UX team’s efforts and create a cohesive culture focused on customer experience. This community can serve as a network of champions and advocates for user experience, helping spread awareness and best practices throughout the organization.
Begin by creating a mailing list or a Teams/Slack channel. Using these platforms, your UX team can exchange best practices, tips, and success stories. Additionally, you can interact with the community by posing questions, creating challenges, and organizing group activities.
For example, your UX team could facilitate the creation of design principles by the community, which could then be promoted organization-wide. The team could also nurture a sense of friendly competition by encouraging community members to rate their digital services against the System Usability Scale or another metric.
The goal is to keep UX advocates engaged and advocating for UX within their teams, with a continual focus on growing the group and bringing more people into the fold.
Finally, this community can be rewarded for their contributions. For example, they could have priority access to services or early access to educational programs. Anything to make them feel like they are a part of something special.
I understand that many of my suggestions may seem unattainable. Undoubtedly, you are deeply immersed in day-to-day project tasks and troubleshooting. I acknowledge that it is much easier to establish this model when starting from a blank canvas. However, it is possible to transition an existing UX team from tactical project work to UX leadership.
The key to success lies in establishing a new, clear mandate for the group, rather than having it defined by past expectations. This new mandate needs to be supported by senior management, which means securing their buy-in and understanding of the broader value that user experience can provide to the organization.
I tend to approach this by suggesting that your UX team be redefined as a center of excellence (CoE). A CoE refers to a team or department that develops specialized expertise in a particular area and then disseminates that knowledge throughout the organization.
This term is familiar to management and helps shift management and colleague thinking away from viewing the team as UX implementors to a leadership role. Alongside this new definition, I also seek to establish new objectives and key performance indicators with management.
These new objectives should focus on education and empowerment, not implementation. When it comes to key performance indicators, they should revolve around the organization’s understanding of UX, overall user satisfaction, and productivity metrics, rather than the success or failure of individual projects.
It is not an easy shift to make, but if you do it successfully, your UX team can evolve into a powerful force for driving customer-centric innovation throughout the organization.
Managing CSS can be tricky, especially when styles need to override each other. This often makes it hard to keep the styles in the right places. To simplify things, the :where selector was added in CSS. This is a special CSS selector that allows you […]
CodingManaging CSS can be tricky, especially when styles need to override each other. This often makes it hard to keep the styles in the right places. To simplify things, the :where
selector was added in CSS. This is a special CSS selector that allows you to group selectors without increasing their specificity, making it easier to override styles when needed.
Consider the following HTML:
1st paragraph
2nd paragraph
3rd paragraph
4th paragraph
5th paragraph
We have two div
elements. One is inside #root
, and the other is outside of it. We want paragraphs inside #root
to be red and paragraphs inside .section
to be green. Typically, you can write CSS as follows:
#root p { color: red; } .section p { color: green; }
However, with this CSS, the paragraph inside .section
will be green, but the paragraphs inside #root
will remain red instead of turning green. This happens because the specificity of the #root
selector is higher than that of the .section
selector.
See the Pen CSS :where selector by HONGKIAT (@hkdc) on CodePen.
To solve this situation, traditionally, we could update our CSS as follows:
#root p { color: red; } .section p, #root .section p { color: green; }
But this is not ideal because it increases the specificity of the selector and makes them look more complex. It will eventually cause more problems when we need to override the styles.
This is where the :where
selector comes in. With the :where
selector, you can group selectors without increasing their specificity. Here’s how we can update our CSS instead:
:where(#root) p { color: red; } .section p { color: green; }
The #root
selector is wrapped with the :where
selector, which will reduce its specificity to 0
. This will allow the paragraph inside .section
to be all green, even though it is inside #root
.
See the Pen CSS :where selector (before) by HONGKIAT (@hkdc)
on CodePen.
:is
selector?The :where
selector is similar to the :is
selector, where we can group a number of selectors together. The main difference is their behavior affecting the specificity within the group. While the :where
selector will remove it (or set it to 0
), the :is
selector may increase the specificity of the selector with the highest specificity within the group.
Let’s take a look at the following example:
.section p { color: green; } .section .highlight { color: orange; } p:first-of-type { color: red; }
The result would be that only the first and third paragraphs would turn red. The second paragraph would remain orange since .section .highlight
has higher specificity than the p:first-of-type
, even though it is also the first paragraph.
See the Pen CSS :where vs :is selector by HONGKIAT (@hkdc) on CodePen.
Traditionally, we can always rewrite our CSS, as follows:
p:first-of-type, .section p:first-of-type { color: red; }
Alternatively, we can also write it this way:
p:first-of-type, p.highlight:first-of-type { color: red; }
However, this again results in more complex selectors and complicated specificity issues down the road. With the :is
selector, we can have it much simpler to solve this issue with the following rules.
:is(div, section, .section) p:first-of-type { color: red; }
We group together div
, section
, and .section
. This group will have the same specificity as .section
so the color red will apply to both within the div
and the section
elements as well.
See the Pen CSS :where vs :is selector (applied) by HONGKIAT (@hkdc) on CodePen.
Browser | Desktop Version | Desktop Support | Mobile Version | Mobile Support |
---|---|---|---|---|
Google Chrome | 88 and later | Supported | 88 and later | Supported |
Mozilla Firefox | 78 and later | Supported | 78 and later | Supported |
Safari | 14.1 and later | Supported | 14.5 and later (iOS) | Supported |
Microsoft Edge | 88 and later | Supported | 88 and later | Supported |
Opera | 75 and later | Supported | 61 and later | Supported |
Internet Explorer | Not supported | Not supported | Not supported | Not supported |
Samsung Internet | N/A | N/A | 14.0 and later | Supported |
The :where
selector is a great addition to CSS that allows you to group selectors without increasing their specificity. This makes it a perfect selector to add base styles to a group of elements without worrying about the specificity of the selector. It overall makes it easier to manage styles without complicating specificity and override them when needed.
Bonus: Check out Specificity Calculator to see how the specificity of your CSS selectors is calculated.
The post :where() – CSS: Cascading Style Sheets appeared first on Hongkiat.