<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Impressive Webs</title>
	<atom:link href="https://www.impressivewebs.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.impressivewebs.com/</link>
	<description>Articles on Front-end Web Development</description>
	<lastBuildDate>Sun, 23 Feb 2025 21:56:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>YouTube&#8217;s Time-Based UX Problem for Live Sports</title>
		<link>https://www.impressivewebs.com/youtube-time-based-ux-problem-live-sports/</link>
					<comments>https://www.impressivewebs.com/youtube-time-based-ux-problem-live-sports/#respond</comments>
		
		<dc:creator><![CDATA[Louis Lazaris]]></dc:creator>
		<pubDate>Mon, 30 Sep 2024 10:00:00 +0000</pubDate>
				<category><![CDATA[UX]]></category>
		<category><![CDATA[Web Design Articles]]></category>
		<guid isPermaLink="false">https://www.impressivewebs.com/?p=17659</guid>

					<description><![CDATA[<p><img src="https://s3.amazonaws.com/impressivewebs/2024-09/avplogo.png" loading="lazy" alt="AVP Logo" width="184" height="184" class="article_image"> I like to play beach volleyball here in the Toronto area. I also watch beach volleyball on YouTube, which includes a lot of live streams from the <a href="https://avp.com/">AVP league</a> in the US. It's a fun sport that I recommend to anyone looking for a new athletic competition to follow.</p>
<p>In most leagues and tournaments, beach volleyball games have a 3-set format, with each set finishing when a team reaches 21 points (or higher if they're not yet ahead by 2). The third set (played if needed) will go up to 15 points (again, win by 2). Some leagues/tournaments will play all three sets up to 15. It depends on the venue, tournament, etc.</p>
<p>The post <a href="https://www.impressivewebs.com/youtube-time-based-ux-problem-live-sports/">YouTube&#8217;s Time-Based UX Problem for Live Sports</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2024-09/avplogo.png" loading="lazy" alt="AVP Logo" width="184" height="184" class="article_image"> I like to play beach volleyball here in the Toronto area. I also watch beach volleyball on YouTube, which includes a lot of live streams from the <a href="https://avp.com/">AVP league</a> in the US. It&#8217;s a fun sport that I recommend to anyone looking for a new athletic competition to follow.</p>
<p>In most leagues and tournaments, beach volleyball games have a 3-set format, with each set finishing when a team reaches 21 points (or higher if they&#8217;re not yet ahead by 2). The third set (played if needed) will go up to 15 points (again, win by 2). Some leagues/tournaments will play all three sets up to 15. It depends on the venue, tournament, etc.</p>
<p>I rarely watch a match live, but I often pick up the live streams a few hours after they air or possibly in the following days or weeks. Even though I&#8217;m not watching the matches live, I don&#8217;t know who the winners are, so I like to go into each viewing and be surprised with the result.</p>
<p>Unfortunately, that&#8217;s often not possible due to YouTube&#8217;s video duration indicator on the thumbnail. Here&#8217;s an example of a match I watched this weekend:</p>
<p><a href="https://www.youtube.com/watch?v=UDz8pCeFHbU"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2024-09/avp-match.png" loading="lazy" alt="AVP Match with time duration indicator" width="770" height="611" class="wide_image wi_new"></a></p>
<p>Just looking at the video duration and the players involved, before I even watched the video, I was about 95% sure of the result. Why? Because the duration is 42:43.</p>
<p>I know that Andy Benesh and Miles Partain are the most dominant team on the tour right now. I also know that a single beach volleyball set usually takes about 20-30 minutes. Since this match&#8217;s sets end at 15 points, it&#8217;s definitely about 20 minutes per set.</p>
<p>Simply by looking at the video duration, I know two things before watching the video:</p>
<ul>
<li>The match lasted only two sets</li>
<li>Whoever won the first set won the match</li>
</ul>
<p>Thus, I&#8217;m almost positive the winners were Andy and Miles because of how unlikely it is that they lost in straight sets.</p>
<p>This means the only time I&#8217;m genuinely surprised at the result of a match is if the video duration is about 1 hour. Since the match is a best-of-three, the fact that someone wins set one won&#8217;t tell me anything about the result.</p>
<p>This is a clear example where the platform being used to broadcast the event is harming the user experience. Sure, it&#8217;s still fun to watch the matches — but it&#8217;s more fun to watch when you don&#8217;t know the result.</p>
<p>Adding to this, even in the case where a match is about one-hour in length, there&#8217;s the possibility that the ending is spoiled before it actually ends. For example, if I&#8217;m in minute 57 of a 1-hour video and Team A has match point and is ahead by 3 points, I know there&#8217;s not going to be a comeback from Team B. Due to the nature of volleyball, it is physically impossible for team Team B to score 5 or more points in less than 3 minutes.</p>
<p>That latter example is less concerning. It&#8217;s the thumbnail duration spoiler that is the bigger problem.</p>
<p>So what&#8217;s the solution? Yes, there are browser extensions that remove the progress indicator and duration, <a href="https://chromewebstore.google.com/detail/hide-youtube-progress-bar/peojoklnhinheognhigeliholccihoec">like this one</a>. But that&#8217;s not going to help me when I do the bulk of my watching on mobile. I haven&#8217;t been able to find a setting or other way to change this on mobile (not to mention that they would have to remove the duration for all videos, including those in your recommended, subscriptions, etc).</p>
<p>There are a couple of ways to resolve or improve this problem:</p>
<ol>
<li>
<p>YouTube could automatically remove the duration indicator from video thumbnails for all livestreamed videos that are sports, games, etc. (this could also be an optional setting for the user or even for the channel that streamed the event).</p>
</li>
<li>
<p>Events that livestream sports or games where the result can be strongly implied by the video duration could append empty livestream time to all their videos.</p>
</li>
</ol>
<p>I don&#8217;t see YouTube changing this anytime soon, so option 2 is what I would do if I ran the AVP tour&#8217;s livestreaming production. I would leave the stream running for each game until the duration of the video reaches one hour or more (depending on the tournament). If all the AVP livestreamed videos were one hour in length or longer, that would disguise the game result and allow all viewers to experience the event as if it were live.</p>
<p>What I&#8217;ve described here is specific to volleyball, but a similar principle applies to all sorts of events where duration implies spoilers. Even older videos that were never livestreamed could benefit from the lack of duration and progress bar. For example, not everyone has seen the incredible and improbable <a href="https://www.youtube.com/watch?v=Fay5LnYOCqc">2011 World Series Game 6</a> in MLB. Time spoilers completely ruin a first viewing of that game, and I&#8217;m sure there are other examples.</p>
<p>The post <a href="https://www.impressivewebs.com/youtube-time-based-ux-problem-live-sports/">YouTube&#8217;s Time-Based UX Problem for Live Sports</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.impressivewebs.com/youtube-time-based-ux-problem-live-sports/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Don&#8217;t Let ChatGPT Write Your Code</title>
		<link>https://www.impressivewebs.com/dont-let-chatgpt-write-your-code/</link>
					<comments>https://www.impressivewebs.com/dont-let-chatgpt-write-your-code/#comments</comments>
		
		<dc:creator><![CDATA[Louis Lazaris]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 11:00:00 +0000</pubDate>
				<category><![CDATA[Web Design Articles]]></category>
		<guid isPermaLink="false">https://www.impressivewebs.com/?p=17630</guid>

					<description><![CDATA[<p><img src="https://s3.amazonaws.com/impressivewebs/2023-12/chatgpt.png" loading="lazy" alt="ChatGPT" width="184" height="184" class="article_image"></p>
<p>We can all agree it's ridiculous to suggest that we should ignore a modern tool that makes it exponentially easier to finish our work.</p>
<p>But as I've learned in 20+ years of writing code, there's always going to be a drawback to using any tool that "makes life easier". In this case, AI-based tools that use ChatGPT or some other AI-based foundation are similar to the frameworks we've been using for years.</p>
<p>The post <a href="https://www.impressivewebs.com/dont-let-chatgpt-write-your-code/">Don&#8217;t Let ChatGPT Write Your Code</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2023-12/chatgpt.png" loading="lazy" alt="ChatGPT" width="184" height="184" class="article_image"></p>
<p>We can all agree it&#8217;s ridiculous to suggest that we should ignore a modern tool that makes it exponentially easier to finish our work.</p>
<p>But as I&#8217;ve learned in 20+ years of writing code, there&#8217;s always going to be a drawback to using any tool that &#8220;makes life easier&#8221;. In this case, AI-based tools that use ChatGPT or some other AI-based foundation are similar to the frameworks we&#8217;ve been using for years.</p>
<p>There are developers who can build incredible websites with React, Angular, Vue, or Svelte. But many of those same developers couldn&#8217;t do basic DOM manipulation or build a simple Ajax-based website (or better yet, a <a href="https://www.codeinwp.com/blog/fetch-api-tutorial-for-beginners/">Fetch API</a>-based website) with pure JavaScript.</p>
<p>Now ChatGPT is everywhere, in almost any tool we use, ready to do all the work for us.</p>
<p>I can&#8217;t see this as being a good thing in the long run. I think two things can be true at once:</p>
<ul>
<li>It&#8217;s productive to use AI-based tools to complete our work</li>
<li>It makes us dumber to use AI-based tools to complete our work</li>
</ul>
<p>So here are my suggestions (meant for front-end developers, but the same concept applies elsewhere):</p>
<p>Every once in a while, when you&#8217;re not in a time constraint, write code using a blank slate. Don&#8217;t use a framework and don&#8217;t ask ChatGPT questions. Just write HTML, CSS, and JavaScript from scratch. If you don&#8217;t know how to do something, look it up online like you did back way back in 2021.</p>
<p>If you&#8217;re pretty sure of what feature to use (like Flexbox) but aren&#8217;t sure about how exactly to use it, look it up <a href="https://developer.mozilla.org/en-US/">on MDN</a> or another similar resource. Or find a nice tutorial that walks through all the features. I&#8217;ve done simple but interactive ones <a href="https://www.codeinwp.com/blog/css-grid-tutorial-layout/">for CSS Grid</a> and for <a href="https://www.codeinwp.com/blog/css-flexbox-tutorial/">Flexbox</a> that you might enjoy.</p>
<p>When you write a piece of code, do your best to understand what every line — and even every character — is doing. If you change the code slightly, like changing a CSS value, ask yourself, Why does it break? Why does it not break? Endeavour to understand it. Don&#8217;t just move on because &#8220;it works&#8221;.</p>
<p>The same applies to JavaScript. MDN&#8217;s resource is, again, invaluable. So is <a href="https://stackoverflow.com/">Stack Overflow</a>. I&#8217;ve been writing JavaScript tips in <a href="https://webtoolsweekly.com/">my newsletter</a> since 2013. Every one of those tips can be found in the newsletter archives or (if you prefer) in an <a href="https://leanpub.com/b/javascriptdombundle2/">e-book bundle</a> that discusses more than 300 different JavaScript and DOM features, most of which are lesser-known.</p>
<p>All this being said, it is true that ChatGPT itself can be used as a search engine or question/answer engine. But there&#8217;s something lacking when we go that route. The answers it gives are often <em>too good</em> and turn us into brainless robots who copy and paste the answers without much thought. And I&#8217;ve already had problems when using ChatGPT myself when it comes to debugging, maintaining, and updating code. It almost feels like you save time in the beginning, but lose a lot of that time later.</p>
<p>Ultimately, we&#8217;re all going to do what helps us finish our jobs, makes us more money, and pleases our bosses and clients. But let&#8217;s not forget about raw coding. That&#8217;s the kind of work that I believe makes us better web developers and will help us be capable in a job interview.</p>
<p>The post <a href="https://www.impressivewebs.com/dont-let-chatgpt-write-your-code/">Don&#8217;t Let ChatGPT Write Your Code</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.impressivewebs.com/dont-let-chatgpt-write-your-code/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
		<item>
		<title>CSS Rules vs. CSS Rulesets</title>
		<link>https://www.impressivewebs.com/css-rules-vs-css-rulesets/</link>
					<comments>https://www.impressivewebs.com/css-rules-vs-css-rulesets/#comments</comments>
		
		<dc:creator><![CDATA[Louis Lazaris]]></dc:creator>
		<pubDate>Tue, 20 Sep 2022 21:30:36 +0000</pubDate>
				<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Web Design Articles]]></category>
		<guid isPermaLink="false">https://www.impressivewebs.com/?p=17262</guid>

					<description><![CDATA[<p><img src="https://s3.amazonaws.com/impressivewebs/2022-09/css-rules.png" loading="lazy" alt="CSS Rules vs. CSS Rulesets" width="184" height="184" class="article_image"> Over the last 10 years or so I've done a ton of technical editing work. I've helped with CSS articles and CSS books for various online and print publications. One of the things that comes up often when I make suggestions is the difference between a <em>CSS rule</em> and a <em>CSS ruleset</em>.</p>
<p>In most cases, almost all authors use the term "CSS rules" to refer to the blocks of CSS that include the selector and the CSS declarations. Is this correct?</p>
<p>The post <a href="https://www.impressivewebs.com/css-rules-vs-css-rulesets/">CSS Rules vs. CSS Rulesets</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Over the last 10 years or so I&#8217;ve done a ton of technical editing work. I&#8217;ve helped with CSS articles and CSS books for various online and print publications. One of the things that comes up often when I make suggestions is the difference between a <em>CSS rule</em> and a <em>CSS ruleset</em>.</p>
<p>In most cases, almost all authors use the term &#8220;CSS rules&#8221; to refer to the blocks of CSS that include the selector and the CSS declarations. Is this correct?</p>
<p>Way back in 2010, I wrote a full article on <a href="https://www.impressivewebs.com/css-terms-definitions/">defining CSS terms</a>, which I still stand by today. But I&#8217;ve updated the &#8220;CSS rulesets&#8221; portion of that article, which I thought I would explain in more detail here.</p>
<p>According to W3C&#8217;s <a href="https://www.w3.org/TR/css-syntax-3/#style-rules">latest document on CSS syntax</a>:</p>
<blockquote><p>A style rule is a qualified rule that associates a selector list with a list of property declarations and possibly a list of nested rules. They are also called rule sets in CSS2.</p></blockquote>
<p>So it is technically correct to refer to these chunks of CSS as &#8220;style rules&#8221;, &#8220;rules&#8221;, or &#8220;rule sets&#8221;. Interestingly, the spec uses &#8220;rule sets&#8221; (two words) whereas <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Syntax#css_rulesets">MDN uses &#8220;rulesets&#8221;</a> (one word). MDN also uses &#8220;rule&#8221; as an acceptable synonym, but doesn&#8217;t seem to mention anything on &#8220;style rules&#8221;. Maybe that needs a refresh.</p>
<p>As the above quote from W3C indicates, it seems like the W3C considers &#8220;rule set&#8221; to be a bit of an outdated term, preferring the term &#8220;style rule&#8221; (or possibly &#8220;rule&#8221; for short). I know some authors in the past have referred to individual lines of CSS as CSS rules, but that&#8217;s not correct. The individual lines are called <em>declarations</em> and the entire group of lines inside the curly braces are called a <em>declaration block</em>. The code below, with comments, demonstrates this:</p>
<pre><code>/* Everything below is a style rule (or rule set, or just rule) */
section { /* Everything between the braces is a declaration block */
  margin: 0 20px; /* This line is an individual declaration */
  color: #888; /* Another declaration */
}
</code></pre>
<p>Understanding these terms isn&#8217;t crucial to writing CSS code. But I think it&#8217;s important when it comes to writing articles, tutorials, and books about the topic.</p>
<p>In summary:</p>
<ul class="body_list">
<li><em>Style rule</em> is the preferred official term</li>
<li><em>Rule</em> is considered a short version of style rule</li>
<li><em>Rule set</em> (or ruleset) is an acceptable but possibly outdated synonym</li>
<li>An individual property/value line is a <em>declaration</em>, not a rule</li>
</ul>
<p>The post <a href="https://www.impressivewebs.com/css-rules-vs-css-rulesets/">CSS Rules vs. CSS Rulesets</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.impressivewebs.com/css-rules-vs-css-rulesets/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Filestack: A File Uploader and Powerful APIs to Deliver and Transform App Content</title>
		<link>https://www.impressivewebs.com/filestack-file-uploader-powerful-apis-deliver-transform-app-content/</link>
					<comments>https://www.impressivewebs.com/filestack-file-uploader-powerful-apis-deliver-transform-app-content/#respond</comments>
		
		<dc:creator><![CDATA[Louis Lazaris]]></dc:creator>
		<pubDate>Wed, 11 May 2022 10:00:00 +0000</pubDate>
				<category><![CDATA[Sponsored]]></category>
		<category><![CDATA[Web Design Articles]]></category>
		<guid isPermaLink="false">https://www.impressivewebs.com/?p=16944</guid>

					<description><![CDATA[<p><img src="https://s3.amazonaws.com/impressivewebs/2022-05/article-thumb.png" loading="lazy" alt="Filestack" width="184" height="184" class="article_image"> [Sponsored] If you’re building an app that requires a lot of user-generated content and media that needs to be processed, tagged, filtered, or otherwise manipulated in real-time, you definitely want a solution that’s fast and seamless and doesn’t get in the way of your app’s primary functionality. Filestack is a service you’ll want to consider. Here’s what Filestack offers:</p>
<p>The post <a href="https://www.impressivewebs.com/filestack-file-uploader-powerful-apis-deliver-transform-app-content/">Filestack: A File Uploader and Powerful APIs to Deliver and Transform App Content</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong><em>The following is a sponsored article for <a href="https://www.filestack.com/">Filestack</a>, a file uploader service with powerful APIs to deliver and transform files to your apps.</em></strong></p>
<p>If you’re building an app that requires a lot of user-generated content and media that needs to be processed, tagged, filtered, or otherwise manipulated in real-time, you definitely want a solution that’s fast and seamless and doesn’t get in the way of your app’s primary functionality.</p>
<p><a href="https://www.filestack.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-05/filestack.png" alt="Filestack" class="wide_image"></a></p>
<p><a href="https://www.filestack.com/">Filestack</a> is a service you’ll want to consider. Here’s what Filestack offers:</p>
<ul class="body_list">
<li>A beautiful file uploader that’s easy to integrate into your app and connects to popular storage services</li>
<li>On-the-fly image transforms and file conversion via URL parameters</li>
<li>Secure and reliable content delivery</li>
<li>Powerful AI-based Intelligence tagging and scanning</li>
</ul>
<p>Let’s take a closer look at some of these features so you’ll know if Filestack is a good fit for your product’s platform.</p>
<h2 id="filestacks-file-uploader">Filestack’s File Uploader</h2>
<p><a href="https://www.filestack.com/products/file-upload/">Filestack Upload</a> is a file uploader for your app that can drastically improve how your app handles file picker functionality. And notably:</p>
<blockquote><p>Filestack Upload gives you the same upload technology used by internet giants without the struggle of having to maintain it.</p></blockquote>
<p>Due to concerns with security, privacy, and performance, this is definitely the kind of app feature you don’t want to build from scratch. Having a secure and reliable service that’s easy to integrate is a huge plus for getting file upload functionality working and bug-free.</p>
<p>Once you’ve signed up for an account, you can choose from one of three File Picker implementations: Web, iOS, and Android. Your account will give you access to your own private API key that you can use to start integrating Filestack’s features. The file pickers increase your app’s file upload speeds by up to 3.6 times. In addition to local file uploads, the file pickers integrate with many popular services, including:</p>
<ul class="body_list">
<li>Dropbox</li>
<li>Google Drive</li>
<li>OneDrive</li>
<li>GitHub</li>
<li>Facebook</li>
<li>Instagram</li>
<li>Google Photos</li>
<li>Box</li>
</ul>
<p>Filestack’s service includes something called <a href="https://www.filestack.com/products/file-upload/technology/">Intelligent Ingestion</a> that guarantees upload success 99.99% of the time.</p>
<p>If you’re building a web app, the Filestack docs show you how to integrate a <a href="https://www.filestack.com/docs/uploads/pickers/web/">JavaScript file picker</a>, which is part of Filestack’s <a href="https://github.com/filestack/filestack-js">open-source SDK</a>. You can try out a live example in the JSFiddle demo below:</p>
<p><script async="" src="//jsfiddle.net/ImpressiveWebs/sd5q70a3/embed/result/dark/"></script></p>
<p>Notice the easy-to-use UI, along with the integrations options shown on the left side of the file picker (Dropbox, Instagram, etc). This is just one example but the file picker is fully customizable according to your app’s needs.</p>
<p>If you try uploading a local image to the demo page, you can see a demonstration of the image manipulation features available to the user. These include ability to crop, rotate, and decorate the image with a simple circle background/frame.</p>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-05/filestack-crop.png" alt="Cropping an Image with Filestack's File Uploader" class="wide_image"></p>
<p>When files are uploaded, Filestack’s CDN ensures the files are accessible on mobile or desktop, with no need to fret over file quality or any other device-specific constraints.</p>
<h2 id="filestacks-processing-engine">Filestack’s Processing Engine</h2>
<p>Another solid feature offered by Filestack’s service is their <a href="https://www.filestack.com/docs/transformations/overview/">processing engine</a> that allows you to use the Filestack API to transform files either in real time or via <a href="https://www.filestack.com/docs/workflows/overview/">custom workflows</a>.</p>
<p>For example, any image that’s uploaded can be manipulated via simple changes in the file URL to make the necessary transformations in real time.</p>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-05/filestack-url-api.png" alt="Filestack's URL API" class="wide_image"></p>
<p>As an example files are stored in Filestack’s CDN using a URL that looks like this:</p>
<pre><code>https://cdn.filestackcontent.com/pdn7PhZdT02GoYZCVYeF
</code></pre>
<p>Note that this example doesn’t include an API key. Your real-world examples would use the URL format shown in the image above, which includes the API key.</p>
<p>Once the file is live, it can then be transformed using URLs like the following:</p>
<pre><code>https://cdn.filestackcontent.com/resize=width:400/pdn7PhZdT02GoYZCVYeF
https://cdn.filestackcontent.com/resize=width:500/sepia=tone:80/polaroid/pdn7PhZdT02GoYZCVYeF
https://cdn.filestackcontent.com/resize=width:500/rotate=deg:180/pdn7PhZdT02GoYZCVYeF</code></pre>
<p>Note the different values used to resize, rotate, add special effects, and so forth. Filestack’s documentation covering <a href="https://www.filestack.com/docs/api/processing/?utm_source=ImpressiveWebs&amp;utm_medium=Leads%20Acquisition&amp;utm_content=FilestackUploaderAPIs&amp;utm_campaign=SponsoredArticle">the Processing API</a> provides more info on what’s possible with transformations.</p>
<p>Notably, these on-the-fly transformations have no effect on the original image. This means you can use the API to programmatically build all the different image sizes you need for your app – which might include thumbnails, different sizes for responsive images, user-edited images, and more.</p>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-05/filestack-sdks.png" alt="Filestack SDKs for integrating with different languages" class="wide_image"></p>
<p>Filestack’s service includes SDKs for integrating with <a href="https://www.impressivewebs.com/ebooks-frontend-developers/">JavaScript</a>, Angular, <a href="https://www.impressivewebs.com/learn-react-so-do-i/">React</a>, PHP, Ruby, Python, and Java. Whatever language you’re using, you’ll have access to callbacks, webhooks, and more for doing whatever your app requires.</p>
<h2 id="filestacks-intelligence-technology-and-workflows">Filestack’s Intelligence Technology and Workflows</h2>
<p>One of the most powerful parts of Filestack’s service is their <a href="https://www.filestack.com/products/intelligence/">Intelligence engine</a>. This technology uses state-of-the-art machine learning that allows you to automatically and programmatically organize and tag your images based on various factors.</p>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-05/filestack-tagging.png" alt="Tagging Images in Filestack" class="wide_image"></p>
<p>Here are some of the features of the Intelligence engine:</p>
<ul class="body_list">
<li><strong>Object Recognition</strong> &#8211; Allows you to auto-tag images based on objects detected. For example, a photo with a young child playing baseball could be auto-tagged with terms like bat, ball, child, sports, etc.</li>
<li><strong>Image Sentiment</strong> &#8211; This enables you to auto-detect emotions expressed in an image (e.g. happy/sad people)</li>
<li><strong>Explicit Content Detection</strong> &#8211; Easily protect users from NSFW images and videos by filtering based on an SFW Boolean returned in the API call</li>
<li><strong>Optical Character Recognition</strong> &#8211; This powerful feature allows you to extract text from images, including from both handwritten and printed characters</li>
<li><strong>Copyright Detection</strong> &#8211; Lets you detect whether an image is copyright protected or not; if it is protected, details such as purchase link, photographer name, etc. are returned in the API call</li>
<li><strong>Video Intelligence</strong> &#8211; Uses automatic video-tagging that improves your website’s SEO</li>
</ul>
<p>All of these intelligence features can be used as part of <a href="https://www.filestack.com/products/workflows/">Filestack Workflows</a>. This no-code feature lets you build your own streamlined content tasks to automate how uploaded files are handled. Some examples of how Workflows might be used along with Filestack Intelligence include:</p>
<ul class="body_list">
<li>An education-related app that allows students to upload assignments in different file formats. The content is automatically scanned for viruses, plagiarism, NSFW content, and items are tagged accordingly.</li>
<li>A social networking app that scans and tags posts and bio photos to filter out or tag content that’s found to be against community guidelines, infringes on copyright, contains NSFW content, etc.</li>
<li>A personal finance app that allows documents to be uploaded by users. Files can be automatically converted to different formats for storage purposes. Receipts and other scanned content can be automatically converted to editable text format.</li>
</ul>
<p>That’s just a small sampling of what’s possible. With Workflows, you can automate just about any set of tasks into a single API call for an easy-to-maintain and streamlined process.</p>
<h2 id="conclusion">Try Filestack&#8217;s File Uploader and More</h2>
<p>Whether it&#8217;s the file uploader, the CDN, the Intelligence engine and more — <a href="https://www.filestack.com/">Filestack</a> is packed with powerful features and I was only able to scratch the surface of what’s possible in this review. The documentation is pretty extensive and might require a little patience while getting to know many of the features, but the team at Filestack will be more than happy to assist you to get up and running with any of products on the Filestack platform.</p>
<p>You can sign up for <a href="https://www.filestack.com/pricing/">the free plan</a> that allows up to 1GB of view/download bandwidth per month along with 500 uploads, 1,000 transformations, and up to 1GB storage on their CDN (your own external storage integration is no charge).</p>
<p>The post <a href="https://www.impressivewebs.com/filestack-file-uploader-powerful-apis-deliver-transform-app-content/">Filestack: A File Uploader and Powerful APIs to Deliver and Transform App Content</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.impressivewebs.com/filestack-file-uploader-powerful-apis-deliver-transform-app-content/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to Disable JavaScript in Almost Any Browser</title>
		<link>https://www.impressivewebs.com/how-to-disable-javascript-in-almost-any-browser/</link>
					<comments>https://www.impressivewebs.com/how-to-disable-javascript-in-almost-any-browser/#comments</comments>
		
		<dc:creator><![CDATA[Louis Lazaris]]></dc:creator>
		<pubDate>Mon, 04 Apr 2022 10:00:00 +0000</pubDate>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web Design Articles]]></category>
		<category><![CDATA[Web Design Tutorials]]></category>
		<guid isPermaLink="false">https://www.impressivewebs.com/?p=16920</guid>

					<description><![CDATA[<p><img src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs.png" loading="lazy" alt="Disable JavaScript in the Browser" width="184" height="184" class="article_image"> In 2022 I think it’s still important as a web developer to test your how your websites look and function when users disable JavaScript in their browser. Developing in this way used to be a cornerstone of Progressive Enhancement and can be handy on both desktop or mobile.</p>
<p>I still find myself wanting disabling JavaScript on pages I visit. Sometimes it’s to test a page I’m working on, but in other instances it’s simply to visit a web page that’s not functioning correctly and I want to see if JavaScript is the culprit.</p>
<p>The post <a href="https://www.impressivewebs.com/how-to-disable-javascript-in-almost-any-browser/">How to Disable JavaScript in Almost Any Browser</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs.png" loading="lazy" alt="Disable JavaScript in the Browser" width="184" height="184" class="article_image"> In 2022 I think it’s still important as a web developer to test your how your websites look and function when users disable JavaScript in their browser. Developing in this way used to be a cornerstone of Progressive Enhancement and can be handy on both desktop or mobile.</p>
<p>I still find myself wanting disabling JavaScript on pages I visit. Sometimes it’s to test a page I’m working on, but in other instances it’s simply to visit a web page that’s not functioning correctly and I want to see if JavaScript is the culprit.</p>
<p>So here’s a list (that I’ll keep updated) showing you how to disable JavaScript in different browsers on desktop and mobile.</p>
<ul class="body_list">
<li><a href="#disable-javascript-in-chrome">Chrome</a></li>
<li><a href="#disable-javascript-in-firefox">Firefox</a></li>
<li><a href="#disable-javascript-in-microsoft-edge">Microsoft Edge</a></li>
<li><a href="#disable-javascript-in-brave-browser">Brave Browser</a></li>
<li><a href="#disable-javascript-in-opera">Opera</a></li>
<li><a href="#disable-javascript-in-vivaldi">Vivaldi</a></li>
<li><a href="#disable-javascript-in-devtools-in-chromium-based-browsers">DevTools in Chromium-based Browsers</a></li>
<li><a href="#disable-javascript-in-firefox-developer-tools">Firefox Developer Tools</a></li>
<li><a href="#disable-javascript-in-safari-desktop-on-mac">Safari Desktop on Mac</a></li>
<li><a href="#disable-javascript-in-safari-for-ios">Safari for iOS</a></li>
<li><a href="#disable-javascript-in-internet-explorer">Internet Explorer</a></li>
<li><a href="#disable-javascript-in-tor-browser">Tor Browser</a></li>
<li><a href="#disable-javascript-in-chrome-for-android">Chrome for Android</a></li>
<li><a href="#disable-javascript-in-opera-mobile-or-opera-mini">Opera Mobile or Opera Mini</a></li>
<li><a href="#disable-javascript-in-android-browser">Android Browser</a></li>
<li><a href="#disable-javascript-in-samsung-internet-browser-for-android">Samsung Internet Browser for Android</a></li>
<li><a href="#disable-javascript-in-duckduckgo-privacy-browser">DuckDuckGo Privacy Browser</a></li>
<li><a href="#disable-javascript-in-uc-browser-qq-baidu-kaios-etc">UC Browser, QQ, Baidu, KaiOS, etc.</a></li>
<li><a href="#disable-javascript-in-firefox-mobile">Firefox Mobile</a></li>
</ul>
<h2 id="disable-javascript-in-chrome">Disable JavaScript in Chrome</h2>
<p>In Google Chrome, I’m sure this setting has changed places a few times over the years, but you can always do a quick keyword search to find it.</p>
<ul>
<li>Click the three dots menu in the top right corner</li>
<li>Choose “Settings”</li>
<li>On the left-side menu click “Privacy and security”</li>
<li>Choose “Site settings”</li>
<li>Scroll to the bottom to the “Content” section and click “JavaScript”</li>
<li>Choose the option “Don’t allow sites to use JavaScript”</li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-chrome.png" loading="lazy" alt="Disable JavaScript in Chrome" width="742" height="290" class="wide_image wi_new"></p>
<p>As mentioned, it’s not always easy to remember exactly where this is so if you forget, just type “JavaScript” in the “Search settings” box at the top when the settings page first appears. The search will indicate that you should click on the “Site settings” option and then from there the “JavaScript” feature will be highlighted.</p>
<h2 id="disable-javascript-in-firefox">Disable JavaScript in Firefox</h2>
<p>Firefox has a completely different way of doing this. If you go into the settings page via the “Tools” menu, you’ll see a search option. But typing “JavaScript” into that search field doesn’t bring up anything.</p>
<p>Disabling JavaScript in Firefox is done as follows:</p>
<ul>
<li>In the browser address bar (where you type URLs), type “about:config”</li>
<li>If necessary, on the “Proceed with Caution” page, click “Accept the Risk and Continue”</li>
<li>In the “Search preference name” field, type “JavaScript”</li>
<li>One of the preferences will be “javascript.enabled”; double click this line</li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-firefox.png" loading="lazy" alt="Disable JavaScript in Firefox" width="997" height="431" class="wide_image wi_new"></p>
<p>You can also filter it down even more by typing “javascript.enabled” but it’s basically the same thing, it just shows you other JavaScript-related preferences.</p>
<h2 id="disable-javascript-in-microsoft-edge">Disable JavaScript in Microsoft Edge</h2>
<p>The Edge browser is now built on Chromium, so you’ll find this is similar to disabling JavaScript in Chrome. You can do a search for the keyword on the settings page, or follow these steps:</p>
<ul>
<li>Click the three-dots menu icon in the top right corner</li>
<li>Select “Cookies and site permissions” on the left-side menu</li>
<li>Scroll down a little to the “All permissions” section</li>
<li>Click “JavaScript”</li>
<li>Turn off the “Allowed (recommended)” toggle</li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-edge.png" loading="lazy" alt="Disable JavaScript in Edge" width="1210" height="466" class="wide_image wi_new"><br />
From there, similar to other browsers, you can even enable or disable JavaScript on a per-site basis if necessary.</p>
<h2 id="disable-javascript-in-brave-browser">Disable JavaScript in Brave Browser</h2>
<p>Brave is another Chromium-based browser that’s gained popularity over the last few years because of its privacy features and Brave Rewards program. In Brave you can likewise do a search for the JavaScript setting, or follow these steps:</p>
<ul>
<li>Click the hamburger (three-line) menu in the top right corner</li>
<li>Choose “Settings”</li>
<li>Click “Security and Privacy” on the left-side menu</li>
<li>Click “Site and Shield Settings”</li>
<li>Scroll down to the “Content” section and click “JavaScript”</li>
<li>Select the option “Don’t allow sites to use Javascript”</li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-brave.png" loading="lazy" alt="Disable JavaScript in Brave" width="905" height="438" class="wide_image wi_new"><br />
For some reason, all these Chromium browsers spell “JavaScript” wrong in this area of the settings, using the casing “Javascript”. You’d think Brave, the browser that was founded by the guy who invented JavaScript would correct that – but apparently not.</p>
<h2 id="disable-javascript-in-opera">Disable JavaScript in Opera</h2>
<p>Opera is another browser that has moved over to Chromium, but the options and settings are a little different from the others I’ve described above.</p>
<ul>
<li>Click the three-line “Easy setup” menu button in the top right corner</li>
<li>At the bottom of the “Easy setup” menu, click “Go to full browser settings”</li>
<li>Click “Site settings”</li>
<li>Scroll down to the “Content” section and choose “JavaScript”</li>
<li>Select the option “Don’t allow sites to use Javascript”</li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-opera.png" loading="lazy" alt="Disable JavaScript in Chrome" width="748" height="310" class="wide_image wi_new"><br />
Again, once you’re on the Settings page, you can do a search if you forget where the option is.</p>
<h2 id="disable-javascript-in-vivaldi">Disable JavaScript in Vivaldi</h2>
<p><a href="https://vivaldi.com/">Vivaldi</a> is a relatively new browser launched in 2016 that was co-founded by a former CEO of Opera Software, so its features are similar to pre-Chromium Opera, though it also uses Chromium as its base.</p>
<p>Vivaldi is a little confusing, because there doesn’t seem to be a way to access the full settings from the browser UI. For example, there’s a cog icon in the bottom left corner, and you can also access “Settings…” by clicking the Vivaldi logo in the top left corner. But neither of these can access the JavaSript setting.</p>
<p>To disable JavaScript in Vivaldi, do the following:</p>
<ul>
<li>In the address bar type “chrome://settings/content/javascript” (notice it says “chrome” not “vivaldi”)</li>
<li>Choose the option “Don’t allow sites to use JavaScript”</li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-vivaldi.png" loading="lazy" alt="Disable JavaScript in Vivaldi" width="921" height="428" class="wide_image wi_new"><br />
What’s strange is if you type “vivaldi://settings/content/javascript” you won’t get the same screen. So it seems like using “chrome://” as the URL’s protocol forces Vivaldi to bring up the Chromium-based settings that aren’t directly accessible through the browser UI. As you can see in the screenshot, the URL will still redirect to “vivaldi://” but you have to type “chrome://” to get this settings page.</p>
<p>That being said, since this is a Chromium-based browser that includes the same DevTools as Chrome, Brave, Edge, etc., you can also disable JavScript as follows:</p>
<ul>
<li>Hit F12 to open the developer tools (or use “Inspect” from the context menu)</li>
<li>Click the “Settings” cog icon in the top right corner of DevTools</li>
<li>On the right side under “Debugger”, check the box next to “Disable JavaScript”</li>
</ul>
<h2 id="disable-javascript-in-devtools-in-chromium-based-browsers">Disable JavaScript in DevTools in Chromium-based Browsers</h2>
<p>In addition to the steps listed above for various Chromium-based browsers, if you’re regularly inside your browser’s developer tools, you can disable JavaScript as follows:</p>
<ul>
<li>Open DevTools (F12) or use the “Inspect Element” option in the right-click menu</li>
<li>Click the Settings icon, the small gray cog wheel in the top right corner</li>
<li>On the “Preferences” tab, find the “Debugger” section</li>
<li>Check the option to “Disable JavaScript”</li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-devtools.png" loading="lazy" alt="Disable JavaScript in DevTools" width="1129" height="324" class="wide_image wi_new"><br />
For a quicker way to do this, you can do the following inside DevTools:</p>
<ul>
<li>Use the keyboard shortcut CTRL-SHIFT-P / CMD-SHIFT-P to open the Command Palette</li>
<li>Type “JavaScript”</li>
<li>Click “Disable JavaScript” from the list of items that appears</li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-devtoolscommand.png" loading="lazy" alt="Disable JavaScript in DevTools using the command palette" width="790" height="417" class="wide_image wi_new"><br />
You can also open the command palette by clicking the three-dots icon next to the cog icon, and choosing the “Run command” option. These options should be more or less the same on Chrome, Edge, Opera, and Brave.</p>
<h2 id="disable-javascript-in-firefox-developer-tools">Disable JavaScript in Firefox Developer Tools</h2>
<p>In Firefox’s developer tools, you can use the following steps:</p>
<ul>
<li>Open Developer Tools (F12 or Inspect an element on the page)</li>
<li>Click the three-dots icon in the top right corner</li>
<li>Choose “Settings”</li>
<li>On the right side, under “Advanced settings”, check the box next to “Disable JavaScript”</li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-ffdevtools.png" loading="lazy" alt="Disable JavaScript in Firefox Developer Tools" width="1022" height="318" class="wide_image wi_new"></p>
<h2 id="disable-javascript-in-safari-desktop-on-mac">Disable JavaScript in Safari Desktop on Mac</h2>
<p>The Safari browser for desktop is no longer available for Windows machines, but you can disable JavaScript on Safari on MacOS as follows:</p>
<ul>
<li>In the menu area at the top, click “Safari”</li>
<li>Choose “Preferences…”</li>
<li>Uncheck the option “Enable JavaScript”</li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-safaridesktop.png" loading="lazy" alt="Disable JavaScript in Safari for Mac" width="888" height="328" class="wide_image wi_new"><br />
I did not try this on the latest version of Safari, but I’m assuming it’s the same basic steps.</p>
<h2 id="disable-javascript-in-safari-for-ios">Disable JavaScript in Safari for iOS</h2>
<p>On an iPhone, iPad, or other iOS-based device, you can disable JavaScript as follows:</p>
<ul>
<li>On your home screen click the “Settings” app</li>
<li>In the left-side menu, scroll down and select “Safari”</li>
<li>On the right pane, scroll down to the bottom and choose “Advanced”</li>
<li>Tap to toggle off the “JavaScript” option</li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-safariios.png" loading="lazy" alt="Disable JavaScript in Safari for iOS" width="800" height="516" class="wide_image wi_new"></p>
<h2 id="disable-javascript-in-chrome-for-ios">Disable JavaScript in Chrome for iOS</h2>
<p>It seems as though there was a way to do this in the past, but from what I can tell, there is no longer a setting that allows you to disable JavaScript in Chrome on iOS.</p>
<p>You can find website-related settings using the following steps:</p>
<ul>
<li>In Chrome, tap the three-dots icon in the top right corner</li>
<li>Scroll down and select “Settings”</li>
<li>Scroll down and choose “Content Settings”</li>
</ul>
<p>According to some websites, the option used to be there, but now I only see “Block Pop-ups” and “Default apps”, neither of which leads to a JavaScript setting.</p>
<h2 id="disable-javascript-in-internet-explorer">Disable JavaScript in Internet Explorer</h2>
<p>If you must for some ungodly reason use IE11 or an older version of Internet Explorer, you can disable JavaScript as follows:</p>
<ul>
<li>Click the cog icon in the top right corner</li>
<li>If you’re using a version older than IE11, click the “Tools” menu</li>
<li>Choose “Internet options”</li>
<li>This brings up the Windows Internet Options dialog, which is also accessible directly through Windows control panel</li>
<li>On the “Security” tab click the button “Custom level…”</li>
<li>Scroll all the way down to the “Scripting” section</li>
<li>Under “Active scripting” click “Disable”</li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-ie.png" loading="lazy" alt="Disable JavaScript in Internet Explorer" width="800" height="578" class="wide_image wi_new"></p>
<p>As a side point, my website looks atrocious in IE11 even with JavaScript enabled, which I assume is true of many websites that now use features like Flexbox and Grid for layout.</p>
<h2 id="disable-javascript-in-tor-browser">Disable JavaScript in Tor Browser</h2>
<p>I don’t use the <a href="https://www.torproject.org/">Tor browser</a>, but I have it installed and disabling JavaScript in Tor is more or less similar to how you do it in Chromium-based browsers.</p>
<ul>
<li>Click the three-line hamburger menu icon in the top right corner</li>
<li>Choose “Settings”</li>
<li>On the left-side menu click “Privacy &amp; Security”</li>
<li>Scroll down to the section called “Security”</li>
<li>Under “Security Level” select the third option “Safest”</li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-tor.png" loading="lazy" alt="Disable JavaScript in Tor Browser" width="946" height="587" class="wide_image wi_new"><br />
As you can see, this isn’t an option that is specifically for JavaScript but for a number of features that can cause privacy or security concerns.</p>
<h2 id="disable-javascript-in-chrome-for-android">Disable JavaScript in Chrome for Android</h2>
<p>I don’t use Android, so this is based on what other websites say, but it looks to be very similar to other Chrome browsers. You can disable JavaScript on Android using the following steps:</p>
<ul>
<li>In the Chrome app, tap the three-dots icon in the top right corner</li>
<li>Choose “Settings”</li>
<li>Scroll down and tap on “Site Settings”</li>
<li>Tap “JavaScript”</li>
<li>Toggle the option to enable/disable JavaScript</li>
</ul>
<h2 id="disable-javascript-in-opera-mobile-or-opera-mini">Disable JavaScript in Opera Mobile or Opera Mini</h2>
<p>The mobile version of Opera works similarly to other mobile browsers. You can access the settings by clicking the <a href="https://www.impressivewebs.com/accessible-keyboard-friendly-hamburger-menu-slide-out-navigation/">hamburger menu</a> in the bottom menu.</p>
<p>Unfortunately, from what I can tell, there doesn’t seem to be an option to disable JavaScript in this browser. There is an option to block ads, popups, and cookie dialogs, but nothing that’s specifically to disable JavaScript.</p>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-04/disablejs-operamobile.png" loading="lazy" alt="Disable Various Features in Opera Mobile" width="800" height="542" class="wide_image wi_new"></p>
<p>As for Opera Mini, the old mobile browser that hasn’t been updated in a few years, technically this browser doesn’t run JavaScript on the client. Opera Mini serves static pages that are rendered on a proxy server. This means any JavaScript on the page will run on the proxy server, then you’ll get a static page with links rendered in the viewport.</p>
<h2 id="disable-javascript-in-android-browser">Disable JavaScript in Android Browser</h2>
<p>You can disable JavaScript on the generic browser that comes installed on Android phones as follows:</p>
<ul>
<li>In the browser, tap the three-dots icon in the top right corner</li>
<li>Choose “Settings”</li>
<li>Choose “Advanced”</li>
<li>Choose “Content settings”</li>
<li>Uncheck the box next to “Enable JavaScript”</li>
</ul>
<p>These steps might differ a little depending on the age of your Android phone.</p>
<h2 id="disable-javascript-in-samsung-internet-browser-for-android">Disable JavaScript in Samsung Internet Browser for Android</h2>
<p>The Samsung Internet browser that comes installed on Samsung Galaxy devices has about 2-3% usage worldwide. You can disable JavaScript in Samsung Internet as follows:</p>
<ul>
<li>Tap the hamburger menu in the bottom right corner</li>
<li>Choose “Settings”</li>
<li>Under “Advanced”, select “Sites and downloads”</li>
<li>Under “Sites” toggle off the “Allow JavaScript” option</li>
</ul>
<h2 id="disable-javascript-in-duckduckgo-privacy-browser">Disable JavaScript in DuckDuckGo Privacy Browser</h2>
<p>DuckDuckGo, well-known for its privacy-focused search engine, has an iOS and Android app called DuckDuckGo Privacy Browser that is also slated to include a desktop version soon.</p>
<p>While there is a “Settings” option accessible via the three-dot icon in the top-right area of the browser, I don’t see a way to disable JavaScript there or through the system settings for the app.</p>
<h2 id="disable-javascript-in-uc-browser-qq-baidu-kaios-etc">Disable JavaScript in UC Browser, QQ, Baidu, KaiOS, etc.</h2>
<p>There are browsers popular in China, India, and other areas that I have not been able to find any definitive sources or do any <a href="https://www.impressivewebs.com/solutions-tools-dealing-with-broken-links-web-pages/">testing</a> of my own on how to disable JavaScript.</p>
<p>If you know how to disable JavaScript in any of these browsers, feel free to post a comment. Otherwise, in most cases you should be able to track down the settings by clicking the hamburger menu or a similar icon on the browser’s UI.</p>
<h2 id="disable-javascript-in-firefox-mobile">Disable JavaScript in Firefox Mobile</h2>
<p>I installed Firefox Mobile on iOS and I cannot see a way to disable JavaScript in that browser, either through the browser&#8217;s &#8220;Settings&#8221; button or through the OS&#8217;s settings for that app.</p>
<p>There are options to block pop-up windows, block images, and some tracking protection settings but nothing specific to disable JavaScript in Firefox Mobile.</p>
<h2 id="anything-i-missed">Anything I Missed?</h2>
<p>If there’s a browser not listed here and you know how to disable JavaScript in it, feel free to let me know in the comments and I’ll add it to the post.</p>
<p>You can also post any corrections since I wasn’t able to test on all these devices.</p>
<p>The post <a href="https://www.impressivewebs.com/how-to-disable-javascript-in-almost-any-browser/">How to Disable JavaScript in Almost Any Browser</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.impressivewebs.com/how-to-disable-javascript-in-almost-any-browser/feed/</wfw:commentRss>
			<slash:comments>18</slash:comments>
		
		
			</item>
		<item>
		<title>A Review of ipwhois.io for Reliable Geolocation Data</title>
		<link>https://www.impressivewebs.com/review-ipwhois-reliable-geolocation-data/</link>
					<comments>https://www.impressivewebs.com/review-ipwhois-reliable-geolocation-data/#comments</comments>
		
		<dc:creator><![CDATA[Louis Lazaris]]></dc:creator>
		<pubDate>Mon, 07 Feb 2022 11:00:00 +0000</pubDate>
				<category><![CDATA[Sponsored]]></category>
		<guid isPermaLink="false">https://www.impressivewebs.com/?p=16883</guid>

					<description><![CDATA[<p><img src="https://s3.amazonaws.com/impressivewebs/2022-02/ipwhois-article.png" loading="lazy" alt="ipwhois.io" title="ipwhois.io" width="184" height="184" class="article_image">[Sponsored] If you’re building an app that requires delivering a dynamic experience based on the user’s location or other location-related data, a fast and easy-to-use Geolocation API will certainly come in handy. One such option is <a href="https://ipwhois.io/">ipwhois.io</a>. The service, which is free for small non-commercial projects that need fewer than 10,000 requests per month, is easy to integrate with your tech stack.</p>
<p>As usual, it’s always best to look at a few examples so you can see it in action. Their <a href="https://ipwhois.io/documentation">documentation</a> is short and easy to follow, so I’ll demonstrate using the following example request:</p>
<p>The post <a href="https://www.impressivewebs.com/review-ipwhois-reliable-geolocation-data/">A Review of ipwhois.io for Reliable Geolocation Data</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong><em>The following is a sponsored article for <a href="https://ipwhois.io/">ipwhois.io</a>, a fast IP Geolocation API service for developers.</em></strong></p>
<p>If you’re building an app that requires delivering a dynamic experience based on the user’s location or other location-related data, a fast and easy-to-use Geolocation API will certainly come in handy. One such option is <a href="https://ipwhois.io/">ipwhois.io</a>. The service, which is free for small non-commercial projects that need fewer than 10,000 requests per month, is easy to integrate with your tech stack.</p>
<p><a href="https://ipwhois.io/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2022-02/ipwhois.png" loading="lazy" alt="ipwhois.io" width="770" height="526" class="wide_image wi_new wi_screen"></a></p>
<p>As usual, it’s always best to look at a few examples so you can see it in action. Their <a href="https://ipwhois.io/documentation">documentation</a> is short and easy to follow, so I’ll demonstrate using the following example request:</p>
<pre><code>http://ipwhois.app/json/52.149.246.39
</code></pre>
<p>Notice a few things in the above URL:</p>
<ul class="body_list">
<li>It’s using the ipwhois.app domain, which is different from the primary domain <a href="http://ipwhois.io">ipwhois.io</a></li>
<li>I’m requesting <a href="https://www.impressivewebs.com/what-is-json-introduction-tutorial-for-beginners/">JSON data</a>, but I could alternatively use “xml” or “csv” by adjusting the URL</li>
<li>I’ve appended the IP address that I want to get info for</li>
</ul>
<p>You can run the request as a cURL command in your terminal or visit the URL directly in your browser. Try one of the following links:</p>
<ul class="body_list">
<li><a href="http://ipwhois.app/json/52.149.246.39">http://ipwhois.app/json/52.149.246.39</a></li>
<li><a href="http://ipwhois.app/xml/52.149.246.39">http://ipwhois.app/xml/52.149.246.39</a></li>
<li><a href="http://ipwhois.app/csv/52.149.246.39">http://ipwhois.app/csv/52.149.246.39</a></li>
</ul>
<p>The payload that’s returned for the JSON request looks something like this (I’ve prettified it for readability):</p>
<pre><code>{
  "ip":"52.149.246.39",
  "success":true,
  "type":"IPv4",
  "continent":"North America",
  "continent_code":"NA",
  "country":"United States",
  "country_code":"US",
  "country_flag":"https:\/\/cdn.ipwhois.io\/flags\/us.svg",
  "country_capital":"Washington",
  "country_phone":"+1",
  "country_neighbours":"CA,MX,CU",
  "region":"Virginia",
  "city":"Ashburn",
  "latitude":39.0437567,
  "longitude":-77.4874416,
  "asn":"AS8075",
  "org":"Microsoft Corporation",
  "isp":"Microsoft Corporation",
  "timezone":"America\/New_York",
  "timezone_name":"Eastern Standard Time",
  "timezone_dstOffset":0,
  "timezone_gmtOffset":-18000,
  "timezone_gmt":"GMT -5:00",
  "currency":"US Dollar",
  "currency_code":"USD",
  "currency_symbol":"$",
  "currency_rates":1,
  "currency_plural":"US dollars",
  "completed_requests":15
}
</code></pre>
<p>For demonstration purposes in this instance, the IP I used was the IP address for <a href="https://duckduckgo.com">DuckDuckGo</a>. (As a side point, it’s interesting that the “org” in this payload is listed as “Microsoft Corporation”; I’m assuming this is because DuckDuckGo uses Bing as the basis for its search results as they aren’t a Microsoft-owned company.)</p>
<p>The above JSON payload includes a lot of info, but you can immediately see how it can be useful in your apps. Some of the bits of data you might be interested in include:</p>
<ul class="body_list">
<li>Continent and two-letter continent code</li>
<li>Country and two-letter country code</li>
<li>Country phone code (e.g. <code>+1</code>)</li>
<li>5 different bits of time zone-related values</li>
<li>5 different bits of currency-related values</li>
</ul>
<p>Each request also returns a <code>success</code> Boolean representing whether the request was successful along with an accompanying error message when the value is <code>false</code>.</p>
<p>As mentioned, there’s quite a bit of info on each request. But you don’t need to request all of it – you can limit which fields are returned by using query string parameters:</p>
<pre><code>http://ipwhois.app/xml/52.149.246.39?objects=country,city,timezone,currency
</code></pre>
<p>The payload for the above request (which asks for XML instead of JSON) would be:</p>
<pre><code>&lt;query&gt;
  &lt;country&gt;United States&lt;/country&gt;
  &lt;city&gt;Ashburn&lt;/city&gt;
  &lt;timezone&gt;America/New_York&lt;/timezone&gt;
  &lt;currency&gt;US Dollar&lt;/currency&gt;
&lt;/query&gt;
</code></pre>
<p>The request is also available as a JSONP <a href="https://www.impressivewebs.com/callback-functions-javascript">callback</a>. Simply change the URL to include the <code>callback</code> parameter, which you can set to the name of your callback function:</p>
<pre><code>http://ipwhois.app/json/52.149.246.39?objects=country,city,timezone,currency&amp;callback=myIPInfo
</code></pre>
<p>The above would return the following:</p>
<pre><code>myIPInfo({
  "country":"United States",
  "city":"Ashburn",
  "timezone":"America\/New_York",
  "currency":"US Dollar"
});
</code></pre>
<p>Lastly, you can also append a <code>lang</code> parameter for localization:</p>
<pre><code>http://ipwhois.app/json/52.149.246.39?objects=country,continent,success,currency&amp;lang=fr
</code></pre>
<p>The result:</p>
<pre><code>{
  "success":true,
  "continent":"Am\u00e9rique du Nord",
  "country":"\u00c9tats-Unis",
  "currency":"US Dollar"
}
</code></pre>
<p>Notice for the request I used “fr” (French) as the language, so this is reflected in the data returned.</p>
<p>As mentioned, if you’re building something for non-commercial use that’s under 10,000 requests per month, you can use <a href="https://ipwhois.io/">ipwhois.io</a> free of charge. For details on commercial usage or projects that require 10,000 request or more, check out the <a href="https://ipwhois.io/pricing">pricing page</a>.</p>
<p><a href="http://ipwhois.io">ipwhois.io</a> is a continuously reliable service – they use a neural network that analyzes dozens of sources to update their database in almost real-time. Overall, this is a solid solution for integrating IP-based geolocation data into your JavaScript, Python, PHP, or jQuery apps (there’s code examples for each in the docs).</p>
<p>The post <a href="https://www.impressivewebs.com/review-ipwhois-reliable-geolocation-data/">A Review of ipwhois.io for Reliable Geolocation Data</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.impressivewebs.com/review-ipwhois-reliable-geolocation-data/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Detecting Specific Text Input with HTML and CSS</title>
		<link>https://www.impressivewebs.com/detecting-specific-text-input-with-html-css/</link>
					<comments>https://www.impressivewebs.com/detecting-specific-text-input-with-html-css/#comments</comments>
		
		<dc:creator><![CDATA[Louis Lazaris]]></dc:creator>
		<pubDate>Wed, 20 Oct 2021 01:06:49 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design Tutorials]]></category>
		<guid isPermaLink="false">https://www.impressivewebs.com/?p=16810</guid>

					<description><![CDATA[<p><img src="https://s3.amazonaws.com/impressivewebs/2021-10/accesskey.png" loading="lazy" alt="The accesskey Attribute" width="184" height="184" class="article_image">Recently I came across a CodePen demo by a developer/engineer named Jane that was Tweeted out by Šime Vidas. The demo has a neat collection of HTML and CSS tricks rolled into one that I thought was worth examining in detail.</p>
<p>The page displays a secret message based on specific text input. Ok, that’s no big deal, right? Well this is done using pure HTML and CSS – no JavaScript. I’ve seen stuff like this before, but I thought it would be cool to break down exactly how this works. There are a few notable things happening in the code so I’ll break down each of the parts. </p>
<p>The post <a href="https://www.impressivewebs.com/detecting-specific-text-input-with-html-css/">Detecting Specific Text Input with HTML and CSS</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Recently I came across <a href="https://codepen.io/propjockey/pen/NWjWwLo">a CodePen demo</a> by a developer/engineer named <a href="https://propjockey.io/">Jane</a> that was <a href="https://x.com/simevidas/status/1438626075530174468">Tweeted out by Šime Vidas</a>. The demo has a neat collection of HTML and CSS tricks rolled into one that I thought was worth examining in detail.</p>
<p>The page displays a secret message based on specific text input. Ok, that’s no big deal, right? Well this is done using pure HTML and CSS – no JavaScript. I’ve seen stuff like this before, but I thought it would be cool to break down exactly how this works. There are a few notable things happening in the code so I’ll break down each of the parts. Here’s the demo:</p>
<p class="codepen" data-height="320" data-default-tab="result" data-slug-hash="NWjWwLo" data-user="propjockey" style="height: 320px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/propjockey/pen/NWjWwLo"><br />
Add secret website button codes with vanilla CSS (NO JS!)</a> by Jane <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f49c.png" alt="💜" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (<a href="https://codepen.io/propjockey">@propjockey</a>)<br />
on <a href="https://codepen.io">CodePen</a>.</span></p>
<p><script async="" src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script></p>
<p>Just make sure, as the instruction says, that your cursor is focused inside the CodePen preview window.</p>
<p><!-- https://codepen.io/impressivewebs/pen/eYEzyaM --></p>
<h2 id="using-htmls-accesskey">Using HTML’s <code>accesskey</code></h2>
<p>As the revealed secret message points out, the demo is using HTML’s <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/accesskey"><code>accesskey</code> attribute</a>. That’s a bit of a blast from the past for some of us. It’s an old feature that:</p>
<blockquote><p>provides a hint for generating a keyboard shortcut for the current element.</p></blockquote>
<p>This means the user can trigger focus on the targeted element using a browser- or platform-specific key combination along with the specified <code>accesskey</code> value (which can be any “printable” character generated by the keyboard).</p>
<p>You can set up an <code>accesskey</code> value like this:</p>
<pre><code>&lt;input accesskey="c"&gt;
</code></pre>
<p>MDN’s article on <code>accesskey</code> has a handy chart showing how the accesskey can be triggered by the user on different browsers and platforms. The most likely combination is either ALT-KEY (Windows) or CTRL-ALT-KEY (Mac) – though there are a lot of variations depending on the browser.</p>
<p>In Jane’s demo, the input is visually hidden but still accessible. I’ll get to more on <code>accesskey</code> in a moment but let’s also look at the other interesting things in the demo.</p>
<h2 id="using-the-pattern-attribute">Using the <code>pattern</code> Attribute</h2>
<p>The other thing that makes this trick work is the use of <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern">the <code>pattern</code> attribute</a> on the hidden text field. Strangely, MDN’s article doesn’t display the browser compatibility for <code>pattern</code>, but the attribute seems to be safe to use. If I recall correctly, this feature was added a little later than other HTML5 forms features.</p>
<p>This attribute accepts a regular expression that should be matched for the form field to validate. It can be used on <code>text</code>, <code>tel</code>, <code>email</code>, <code>url</code>, <code>password</code>, and <code>search</code> inputs.</p>
<p>In this instance, the demo isn’t using any special regex characters to do anything fancy – it’s just straight text that’s matched.</p>
<pre><code>&lt;input accesskey="c" pattern="wow!"&gt;
</code></pre>
<p>But there’s no form submission going on here, so how is this form field being “validated”?</p>
<h2 id="the-valid-and-placeholder-shown-pseudo-classes">The <code>:valid</code> and <code>:placeholder-shown</code> Pseudo-classes</h2>
<p>In order to check if the form field is valid, the demo makes use of the <code>:valid</code> CSS pseudo-class. So you can do something like the following to apply different styles to a form field that’s valid but hasn’t been submitted yet:</p>
<pre><code>:valid {
  border: solid 1px green;
}
</code></pre>
<p>This will instantly place a green border on any valid form field, no need for form submission. There’s also a pseudo-class of <code>:invalid</code> which does the opposite. Both have good browser support, so don’t be afraid to use these.</p>
<p>The demo also uses the <code>:placeholder-shown</code> pseudo-class. This pseudo-class targets elements that are using the HTML <code>placeholder</code> attribute and whose <code>placeholder</code> value is visible (i.e. the user hasn’t inserted text to remove the placeholder value).</p>
<pre><code>:placeholder-shown {
  background: white;
}
</code></pre>
<p>This feature isn&#8217;t important to the overall technique, but it&#8217;s part of the big selector that I&#8217;ll discuss next.</p>
<h2 id="the-big-fancy-css-selector">The Big Fancy CSS Selector</h2>
<p>Once we understand those two pseudo-classes, then we can begin to grasp the big selector used in the demo:</p>
<pre><code>.secret-code:not(:placeholder-shown):valid ~ * {
  --secret_code: ;
}
</code></pre>
<p>In addition to the <code>:valid</code> and <code>:placeholder-shown</code> pseudo-classes, the selector is using the more common <code>:not()</code> pseudo-class along with a sibling selector and a universal selector. That’s quite a bit to digest in a single CSS selector, but here’s what it means in plain English:</p>
<ul>
<li>Target all sibling elements</li>
<li>Of every element with a class name of <code>.secret-code</code></li>
<li>That has no placeholder text showing</li>
<li>That&#8217;s valid</li>
</ul>
<p>And once we grasp that selector, then we can move on to the main CSS trick used to toggle the secret message on and off.</p>
<h2 id="the---var-space-toggle-hack">The <code>--var()</code> Space-toggle Hack</h2>
<p>The demo is using a trick referred to as the space-toggle hack (or var-toggle hack), which <a href="https://lea.verou.me/2020/10/the-var-space-hack-to-toggle-multiple-values-with-one-custom-property/">Lea Verou nicely explained</a> a year ago and apparently was first used/discovered <a href="https://x.com/anatudor/status/1284160219963170816">by Ana Tudor</a>. This trick uses <a href="https://www.codeinwp.com/blog/css-variables/">CSS custom properties</a> (i.e. CSS Variables). In fact, Jane has used it in multiple projects including <a href="https://github.com/propjockey/css-sweeper">CSS Mine Sweeper</a> and a library called <a href="https://augmented-ui.com/">Augmented UI</a>.</p>
<p>This technique is a way to easily toggle a set of CSS property/value pairs on a single element using a single property value.</p>
<p>Take note of the inline styles present on the <code>div</code> element in the demo:</p>
<pre><code>&lt;div style="--wow: var(--secret_code) green; color: var(--wow, black);"&gt;
</code></pre>
<p>The odd thing here, and the thing that makes the space-toggle hack work, is the value for the <code>--wow</code> custom property. Before the selector criteria is met, the value of this custom property is invalid. This is because the <code>--secret_code</code> variable has no value set (yet). The value of <code>green</code> that appears after the invalid custom property will take effect once the space character is put in place (hence the name “space-toggle hack”).</p>
<p>This essentially means <code>--wow: var(--secret_code) green;</code> will compute to <code>--wow: green;</code> (because the space is just extra white space, which is fine inside a CSS value).</p>
<p>To make it more clear, in plain English the inline style reads like this:</p>
<ul>
<li>Define the <code>--wow</code> variable with a non-existent custom property followed by a space and the color green</li>
<li>Set the <code>color</code> property to whatever the <code>--wow</code> variable is set to (currently invalid), with a fallback of <code>black</code></li>
<li>Since <code>--wow</code> is currently invalid, use its fallback</li>
</ul>
<p>This is why the color of the text starts out black when you first load the page.</p>
<p>The key to the toggle, then, is to add a space character as a value for <code>--secret_code</code>. This makes the initial definition of <code>--wow</code> valid, so the fallback color of black isn’t used. Once the space character is inserted, the logic is like this:</p>
<ul>
<li>Define the <code>--wow</code> variable with a space character, followed by another space and the color green</li>
<li>Set the <code>color</code> property to whatever the <code>--wow</code> variable is set to (currently a valid space), with a fallback of <code>black</code></li>
<li>Since <code>--wow</code> is currently <em>valid</em>, and doesn’t break the value of <code>green</code>, the color is computed to <code>green</code></li>
</ul>
<p>The same logic applies to the hidden <code>span</code> element that shows the secret message:</p>
<pre><code>&lt;span style="--wow: var(--secret_code) block; display: var(--wow, none);"&gt;
</code></pre>
<p>Again, the value of “block” won’t take effect until the selector criteria is met, thus making <code>var(--secret_code)</code> valid (and, by extension, <code>--wow</code> is valid).</p>
<p>One of the things that first tripped me up about the space-toggle hack is the value that follows the invalid variable. In this case it was <code>green</code>. To me this looked like a fallback value, so the logic didn’t make sense at first glance. But this isn’t a fallback value; it’s a value that gets toggled “on” when the variable next to it gets validated by the space character passed in from the selector’s variable definition.</p>
<p>And one final thing about the space-toggle hack: It’s really not recommended in a lot of cases and will cause problems with some CSS minifiers. A minifier is usually going to delete unwanted space characters like the one set as the value in this hack. I tested it on a few online minifiers and it does indeed cause problems for some, but not all. So be aware of that if you choose to use this technique.</p>
<h2 id="final-warning-about-using-accesskey">Final Warning About Using <code>accesskey</code></h2>
<p>As mentioned, this trick uses the <code>accesskey</code> attribute, which seems like a useful feature to take advantage of. As the original Tweet by Šime mentions, <a href="https://webaim.org/techniques/keyboard/accesskey">WebAIM provides a warning when discussing this subject</a>:</p>
<blockquote><p>Despite good intentions and because of varied and insufficient browser implementations, <code>accesskey</code> very often does not provide a viable solution for keyboard shortcuts on the web.</p></blockquote>
<p>They go on to offer a whole slew of reasons why using <code>accesskey</code> is problematic and conclude with:</p>
<blockquote><p>Due to numerous problems with implementation, <code>accesskey</code> is typically best avoided. If used, they must be implemented carefully. The bottom line: some users will benefit and some will not, and some may even be disadvantaged.</p></blockquote>
<p>While the <code>accesskey</code> part of this trick is the primary reason it works, I hope the rest of it (which is more likely to be used) was somewhat educational to those of you who weren’t as familiar with it all.</p>
<div class="button_holder">
<ul class="button">
<li><a href="https://codepen.io/propjockey/pen/NWjWwLo" title="View Demo">View Demo</a></li>
</ul>
</div>
<p>The post <a href="https://www.impressivewebs.com/detecting-specific-text-input-with-html-css/">Detecting Specific Text Input with HTML and CSS</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.impressivewebs.com/detecting-specific-text-input-with-html-css/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Are These the Most Interesting Front-end Developer Tools for 2021?</title>
		<link>https://www.impressivewebs.com/most-interesting-front-end-developer-tools-2021/</link>
					<comments>https://www.impressivewebs.com/most-interesting-front-end-developer-tools-2021/#comments</comments>
		
		<dc:creator><![CDATA[Louis Lazaris]]></dc:creator>
		<pubDate>Tue, 05 Jan 2021 09:47:31 +0000</pubDate>
				<category><![CDATA[Roundups and Resources]]></category>
		<guid isPermaLink="false">https://www.impressivewebs.com/?p=16742</guid>

					<description><![CDATA[<p><img src="https://s3.amazonaws.com/impressivewebs/2021-01/tools-list.png" loading="lazy" alt="Front-end Tools 2021" width="184" height="184" class="article_image">When I come to the end of any given year, it’s always interesting to look back through the click-through stats for my weekly newsletter <a href="https://webtoolsweekly.com/">Web Tools Weekly</a> to see which tools got the most attention.</p>
<p>This year wasn’t all that different from previous years. I’ve learned that clicks happen for basically one of two reasons:</p>
<p>The post <a href="https://www.impressivewebs.com/most-interesting-front-end-developer-tools-2021/">Are These the Most Interesting Front-end Developer Tools for 2021?</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></description>
										<content:encoded><![CDATA[

<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/tools-list.png" loading="lazy" alt="Front-end Tools 2021" width="184" height="184" class="article_image">When I come to the end of any given year, it’s always interesting to look back through the click-through stats for my weekly newsletter <a href="https://webtoolsweekly.com/">Web Tools Weekly</a> to see which tools got the most attention.</p>

<p>This year wasn’t all that different from previous years. I’ve learned that clicks happen for basically one of two reasons:</p>

<ul>
  <li>Curiosity</li>
  <li>Will Make My Life Easier</li>
</ul>

<p>And ultimately, that latter reason is why people check out any web developer tool.</p>

<p>And notice the title of this post. I’m not claiming that these are the “best” or “most popular” tools (and some of them aren’t even all that new, they were just new to me). But they are possibly the most interesting, even if not necessarily the most useful.</p>

<p>So with that in mind, here’s a big superficial roundup of my newsletter’s 60 most-clicked tools of 2020 — and potentially <strong>the most interesting choices for 2021</strong>. I’m pretty sure you’ll find at least a few items here that you’ll find useful for a future project.</p>

<p><strong><em>Partner Link:</em></strong> <a href="https://www.strikingly.com/a/ygziFY" rel="sponsored"><strong>Strikingly</strong></a> is a website builder platform for creatives and entrepreneurs. With zero code or design skills you can build professional websites on custom domains with all the features you&#8217;ll need.</p>

<p><a href="https://www.strikingly.com/a/ygziFY" rel="sponsored"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/ads/strikingly-banner.jpg" loading="lazy" alt="Strikingly" width="930" height="180" class="wide_image"></a></p>

<h2 id="pikwizard">60. <a href="https://pikwizard.com/">Pikwizard</a></h2>

<p>Anything that resembles the super-popular Unsplash project is going to get a lot of clicks. This library offers over 1 million stock images and videos that are royalty free and safe for commercial use, with no attribution required.</p>

<p><a href="https://pikwizard.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/60-pikwizard.png" loading="lazy" alt="Pikwizard" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>It’s hard to see anyone uprooting Unsplash as the leader in this space, but Pikwizard seems like a good alternative if you’re looking for free stock media without needing to worry about price or giving credit. But note the main drawback to Pikwizard is the fact that “Premium” photos from Adobe are also included in searches.</p>

<h2 id="tailwind-starter-kit">59. <a href="https://github.com/creativetimofficial/tailwind-starter-kit">Tailwind Starter Kit</a></h2>

<p>Tailwind appears early in this list and often, not surprisingly. I’d say Tailwind is the CSS tool that’s most on the rise at the moment, so I’m constantly finding tools and frameworks associated with it in my research.</p>

<p><a href="https://github.com/creativetimofficial/tailwind-starter-kit"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/59-tailwind-starter-kit.png" loading="lazy" alt="Tailwind Starter Kit" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>This toolkit is an open source add-on for Tailwind that features multiple HTML elements and comes with dynamic components for React, Vue, and Angular.</p>

<h2 id="spider">58. <a href="https://tryspider.com/">Spider</a></h2>

<p>Web scraping tools always seem to do well in my newsletter, as do things like HTML to PDF conversion utilities. This one claims to be “the easiest tool to scrape the internet”. It’s not free, but a small one-time fee seems like a good investment if it’s as effective as they claim.</p>

<p><a href="https://tryspider.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/58-spider.png" loading="lazy" alt="Spider" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Just a few clicks to turn a website into organized data that can be downloaded as JSON/CSV with no coding or configuration required.</p>

<h2 id="van11y">57. <a href="https://van11y.net/">Van11y</a></h2>

<p>This is one that wasn’t exactly new in 2020, but it was new to me. It’s a collection of customizable, accessible scripts that includes lots of stuff you probably include often in your UIs: Accordion, tab panel, carousel, tooltips, modals, and more — all built using progressive enhancement.</p>

<p><a href="https://van11y.net/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/57-van11y.png" loading="lazy" alt="Van11y" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>There aren’t a lot of components here, but since the ones included are so common, there’s enough here to make this well worth a bookmark.</p>

<h2 id="css-to-tailwindcss">56. <a href="https://transform.tools/css-to-tailwind">CSS to TailwindCSS</a></h2>

<p>Once again Tailwind is in the spotlight, this time with an online tool to convert standards CSS to the best possible Tailwind CSS equivalents.</p>

<p><a href="https://transform.tools/css-to-tailwind"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/56-css-to-tailwindcss.png" loading="lazy" alt="CSS to TailwindCSS" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>I’m not entirely sure this one is going to be super practical for a lot of projects, but I’m guessing this got a lot of curiosity clicks due to the number of developers currently using Tailwind and probably just wondering what this sort of thing would entail.</p>

<h2 id="radius">55. <a href="https://rangle.io/radius/">Radius</a></h2>

<p>Design systems have been a hot topic for a few years now, so this toolkit isn’t a surprise on the list.</p>

<p><a href="https://rangle.io/radius/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/55-radius.png" loading="lazy" alt="Radius" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>This collection of open-source tools and libraries has the goal of helping you and your team to build a design system from scratch without all the typical roadblocks you might normally face, speeding up the zero-to-hero process that a design system often involves.</p>

<h2 id="sail-ui">54. <a href="https://sailui.github.io/">Sail UI</a></h2>

<p>Once again Tailwind is the main focus here. This collection of basic UI components is pretty small. Personally, I don’t see anything too groundbreaking here, so the Tailwind factor probably played a major role in the initial burst of clicks for this one.</p>

<p><a href="https://sailui.github.io/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/54-sail-ui.png" loading="lazy" alt="Sail UI" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>That being said, I can see this one growing and gaining popularity with some proper oversight and maintenance in the coming year.</p>

<h2 id="control">53. <a href="https://control.rocks/">Control</a></h2>

<p>This has free and paid versions. The free version includes 100+ illustrations that can be customized to create the specific scene you’re looking for. Only PNG for the free version but 100% vector and compatible with AI, Figma, and Sketch for the paid versions.</p>

<p><a href="https://control.rocks/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/53-control.png" loading="lazy" alt="Control" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>You can slightly alter a particular illustration’s subject/theme and also change the style of the illustration (solid or linear). This comes from a startup called Craftwork who offer a number of different graphic-related products.</p>

<h2 id="public-apis">52. <a href="https://public-apis.io/">Public APIs</a></h2>

<p>This is a directory of free public APIs for software developers. Might be a good place to look if you’re just getting started with API-based development or maybe you want some inspiration on a new product or service to build that uses one of the APIs.</p>

<p><a href="https://public-apis.io/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/52-public-apis.png" loading="lazy" alt="Public APIs" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Categories include Open Data, Cryptocurrency, Science, Finance, Sports &amp; Fitness, and lots more.</p>

<h2 id="css-media-vars">51. <a href="https://propjockey.github.io/css-media-vars/">css-media-vars</a></h2>

<p>This is definitely unique in the list. If you’re already familiar with CSS variables and media queries, then you’ll be fascinated by the idea of combining the two concepts.</p>

<p><a href="https://propjockey.github.io/css-media-vars/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/51-css-media-vars.png" loading="lazy" alt="css-media-vars" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>The page offers a live editable demo so you can see exactly how the technique works and how you might customize the various breakpoints.</p>

<h2 id="guijs">50. <a href="https://guijs.dev/">guijs</a></h2>

<p>As I mentioned at the outset, anything that claims to make life easier for developers always gets tons of clicks in my newsletter. This one literally has that as its tagline.</p>

<p><a href="https://guijs.dev/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/50-guijs.png" loading="lazy" alt="guijs" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>It’s a multi-purpose native Windows and Mac app to help you manage your development projects. Includes features for projects, package installation, script management, and more.</p>

<h2 id="wicked-templates">49. <a href="https://www.wickedtemplates.com/">Wicked Templates</a></h2>

<p>Sick of Tailwind yet? Yeah, unlikely. This is a set of four Tailwind templates are easy to customize and can be integrated with whatever your full-stack toolset is (Next.js, Vue, Laravel, Gatsby, React, etc).</p>

<p><a href="https://www.wickedtemplates.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/49-wicked-templates.png" loading="lazy" alt="Wicked Templates" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Only a single template is free, but for the small price of the bundle you can have lifetime support.</p>

<h2 id="h3">48. <a href="https://h3.js.org/">H3</a></h2>

<p>This microframework comes in at under 4KB minified and will help you build client-side single-page applications (SPAs) in modern JavaScript.</p>

<p><a href="https://h3.js.org/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/48-h3.png" loading="lazy" alt="H3" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>How small is it? The API is composed of just seven methods and two properties. Certainly not for every project but maybe the source code alone would be useful to learn from, should you want to delve into developing something like this in the future.</p>

<h2 id="line-awesome">47. <a href="https://icons8.com/line-awesome">Line Awesome</a></h2>

<p>A free alternative to Font Awesome that consists of 1300+ flat-line icons and boasts complete coverage of the main Font Awesome icon set.</p>

<p><a href="https://icons8.com/line-awesome"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/47-line-awesome.png" loading="lazy" alt="Line Awesome" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Also includes the option to import into Figma, Sketch, or Photoshop.</p>

<h2 id="bem-naming-cheat-sheet">46. <a href="https://9elements.com/bem-cheat-sheet/">BEM Naming Cheat Sheet</a></h2>

<p>When I first started the newsletter, I used to include an occasional “Learning Tools” issue that would include stuff like this. While I don’t do that anymore, I decided to include this one and it did quite well.</p>

<p><a href="https://9elements.com/bem-cheat-sheet/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/46-bem-cheat-sheet.png" loading="lazy" alt="BEM Naming Cheat Sheet" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>It’s a nicely designed guide to using the BEM naming method that’s been popular among CSS developers for a number of years.</p>

<h2 id="embla-carousel">45. <a href="https://davidcetinkaya.github.io/embla-carousel/">Embla Carousel</a></h2>

<p>Carousels are always popular and get lots of clicks, so no surprise here. This one is a bare-bones, extensible carousel library with great fluid motion and swipe precision.</p>

<p><a href="https://davidcetinkaya.github.io/embla-carousel/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/45-embla-carousel.png" loading="lazy" alt="Embla Carousel" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>It’s library agnostic, dependency free, and open source so it looks like a good option for vanilla JavaScript projects.</p>

<h2 id="open-peeps">44. <a href="https://www.openpeeps.com/">Open Peeps</a></h2>

<p>A hand-drawn illustration library to create scenes with people, with each drawing made available in PNG or SVG format.</p>

<p><a href="https://www.openpeeps.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/44-open-peeps.png" loading="lazy" alt="Open Peeps" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>You can grab some of them directly on the site or download the whole graphics package that allows you to bring it into your graphics tool of choice. Then mix-and-match for over 500,000 possible combinations of illustrations.</p>

<h2 id="css-section-separator-generator">43. <a href="https://wweb.dev/resources/css-separator-generator">CSS Section Separator Generator</a></h2>

<p>This is one of the simplest tools in the list. It’s an easy way to generate a pure CSS fancy section separator to add to your pages.</p>

<p><a href="https://wweb.dev/resources/css-separator-generator"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/43-css-section-separator-generator.png" loading="lazy" alt="CSS Section Separator Generator" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>You can interactively adjust the look and size of the separator and its pattern, then grab the HTML and CSS to drop into your stylesheet.</p>

<h2 id="lion-web-components">42. <a href="https://github.com/ing-bank/lion">Lion Web Components</a></h2>

<p>A set web components that feature three things all developer want in a UI toolkit: performance, accessibility, and flexibility.</p>

<p><a href="https://github.com/ing-bank/lion"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/42-lion-web-components.png" loading="lazy" alt="Lion Web Components" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>I like how each component on the demo/docs site shows you the accessibility violations (spoiler: there aren’t many) as well as the accessibility “passes”, so you can see how each component is accessible to all users.</p>

<h2 id="debug-visualizer">41. <a href="https://marketplace.visualstudio.com/items?itemName=hediet.debug-visualizer">Debug Visualizer</a></h2>

<p>This VS Code extension has over 31,000 installs and a strong Marketplace rating, telling me a lot of people like it so far.</p>

<p><a href="https://marketplace.visualstudio.com/items?itemName=hediet.debug-visualizer"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/41-debug-visualizer.png" loading="lazy" alt="Debug Visualizer" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>As the name suggest, it allows you to visualize data structures while debugging. Works best with JavaScript/TypeScript and has been tested with C#, Java, PHP, Python, and more. In theory it should work with any language you can debug in VS Code.</p>

<h2 id="geist-ui">40. <a href="https://geist-ui.dev/">Geist UI</a></h2>

<p>This open source design system features a UI library for React and Vue, providing yet another option for building modern interfaces.</p>

<p><a href="https://geist-ui.dev/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/40-geist-ui.png" loading="lazy" alt="Geist UI" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>The main site links to separate docs pages for both versions and there’s also a typography stylesheet and general stylesheet for a number of opinionated but elegant defaults.</p>

<h2 id="sysend.js">39. <a href="https://github.com/jcubic/sysend.js">sysend.js</a></h2>

<p>Here’s another one that’s unique in this list: It’s a small library that allows you to send messages between pages that are open in the same browser.</p>

<p><a href="https://github.com/jcubic/sysend.js"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/39-sysendjs.png" loading="lazy" alt="sysend.js" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>It has no dependencies, supports cross-domain communication, and uses either HTML5 LocalStorage or the newer BroadcastChannel API — whichever one the browser supports.</p>

<h2 id="hero-generator">38. <a href="https://hero-generator.netlify.app/">Hero Generator</a></h2>

<p>I come across lots of online generators for various front-end coding problems, but this one is a little different. It’s an interactive tool to generate a hero image header section for a web page, a common design pattern that you’ll usually reinvent  over and over unnecessarily.</p>

<p><a href="https://hero-generator.netlify.app/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/38-hero-generator.png" loading="lazy" alt="Hero Generator" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>The page live updates as you adjust the settings, then you can grab the full CSS which you can later extend or modify even after you’ve generated it here.</p>

<h2 id="toy-faces">37. <a href="https://amritpaldesign.com/toy-faces">Toy Faces</a></h2>

<p>This is definitely not for every website you’ll build but if you need some fun, diverse 3D avatars for a design mockup or a full-blown project, this might work.</p>

<p><a href="https://amritpaldesign.com/toy-faces"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/37-toy-faces.png" loading="lazy" alt="Toy Faces" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>These 120+ avatars feature a toy-like appearance. They’re not free but you get lifetime access to new releases in the set, available in high-res JPEG and transparent PNG.</p>

<h2 id="halfmoon">36. <a href="https://www.gethalfmoon.com/">Halfmoon</a></h2>

<p>I’m guessing this one grabbed a lot of people’s attention due to it being marketed as having a “built-in dark mode” which a lot of developers are into nowadays.</p>

<p><a href="https://www.gethalfmoon.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/36-halfmoon.png" loading="lazy" alt="Halfmoon" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>But that’s just one feature. It’s a full-blown front-end framework similar to Bootstrap with lots of components and utilities.</p>

<h2 id="v-dashboard">35. <a href="https://github.com/wobsoriano/v-dashboard">V-Dashboard</a></h2>

<p>Admin dashboard starter templates and frameworks always seem to do well in my newsletter, so no surprise that this was one of the most clicked tools.</p>

<p><a href="https://github.com/wobsoriano/v-dashboard"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/35-v-dashboard.png" loading="lazy" alt="v-dashboard" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>This one is built with Vite, Vue 3, Tailwind CSS, and TypeScript.</p>

<h2 id="broider">34. <a href="https://maxbittker.github.io/broider/">broider</a></h2>

<p>Here’s yet another unique entry in this list. This interactive generator creates “9-patch” borders that use CSS’s border-image syntax.</p>

<p><a href="https://maxbittker.github.io/broider/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/34-broider.png" loading="lazy" alt="broider" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>You can draw on the page then copy the CSS that includes a data URI using the border images standard. You can be one of the 20 people in the world who found a use for border images!</p>

<h2 id="falcon">33. <a href="https://github.com/plotly/falcon">Falcon</a></h2>

<p>This was not a new tool but this year was the first time I’d come across it, so it gets the nod in this list. This is an open-source SQL editor for Mac, Windows, and Linux.</p>

<p><a href="https://github.com/plotly/falcon"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/33-falcon.png" loading="lazy" alt="Falcon" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Supports connecting to RedShift, MySQL, PostgreSQL, IBM DB2, Impala, MS SQL, Oracle, SQLite, and more. According the GitHub repo, it hasn’t been updated for a couple of years, but I doubt that poses any major problems for something like this.</p>

<h2 id="neumorphism.io">32. <a href="https://neumorphism.io/">Neumorphism.io</a></h2>

<p>Remember when Neumorphism was everywhere? Well, it still has its place. This online generator will help you interactively produce code for elements that have ‘soft UI’ (i.e. 3D box shadows and lighting).</p>

<p><a href="https://neumorphism.io/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/32-neumorphism.png" loading="lazy" alt="Neumorphism.io" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Offers lots of fine-grained options to perfect the look you’re after.</p>

<h2 id="meraki-ui">31. <a href="https://merakiui.com/">Meraki UI</a></h2>

<p>Another UI library and once again this is based on Tailwind CSS. Buttons, cards, forms, dropdowns, hero components, and more.</p>

<p><a href="https://merakiui.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/31-meraki-ui.png" loading="lazy" alt="Neumorphism.io" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>The one cool thing about this one is that it features the ability to easily switch a UI element to right-to-left (RTL), for support of RTL languages. You can try the RTL feature interactively while testing out the various component demos.</p>

<h2 id="calcolor.co">30. <a href="https://calcolor.co/">calcolor.co</a></h2>

<p>This website provides a dedicated page for every color code with info, various syntaxes for the color (hex, RGB, etc.)</p>

<p><a href="https://calcolor.co/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/30-calcolor.png" loading="lazy" alt="calcolor" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Use it to find matching color variants, learn more about color properties, or convert color values.</p>

<h2 id="tailblocks">29. <a href="https://github.com/mertJF/tailblocks">tailblocks</a></h2>

<p>How many Tailwind tools are we up to now? I believe it’s 7. This one is a set of Tailwind UI components divided into 15 categories.</p>

<p><a href="https://github.com/mertJF/tailblocks"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/29-tailblocks.png" loading="lazy" alt="tailblocks" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>The categories include stuff like e-commerce, blog, CTA, footer, gallery, and lots more.</p>

<h2 id="good-email-code">28. <a href="https://www.goodemailcode.com/">Good Email Code</a></h2>

<p>This is the first of three HTML email code tools to crack the top 30 in this list. This is a small library HTML email components built with best practices for maximum email client support.</p>

<p><a href="https://www.goodemailcode.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/28-good-email-code.png" loading="lazy" alt="Good Email Code" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>There’s a description for each of the components and they include a template, preheader, container, columns, button, and more.</p>

<h2 id="pixel-lite">27. <a href="https://themesberg.com/product/ui-kit/pixel-lite-free-bootstrap-4-ui-kit">Pixel Lite</a></h2>

<p>This beautifully crafted, responsive UI kit based on Bootstrap 4 includes 80 components, 3 sections, 4 example pages, and an optional premium version.</p>

<p><a href="https://themesberg.com/product/ui-kit/pixel-lite-free-bootstrap-4-ui-kit"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/27-pixel-lite.png" loading="lazy" alt="Pixel Lite" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Uses Sass variables so you can easily customize the look to suit your needs.</p>

<h2 id="coded-mails">26. <a href="https://codedmails.com/">Coded Mails</a></h2>

<p>These hassle-free responsive HTML email starters include 60+ templates divided into 6 categories, along with 12 themes.</p>

<p><a href="https://codedmails.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/26-coded-mails.png" loading="lazy" alt="Coded Mails" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>You can preview all templates and themes on both mobile and desktop email views. Free only for non-commercial projects, but worth considering the modest price tag for the full version with extra features.</p>

<h2 id="big-heads">25. <a href="https://bigheads.io/">Big Heads</a></h2>

<p>This library of illustrated heads includes a random character generator that you can then interactively customize on the fly.</p>

<p><a href="https://bigheads.io/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/25-big-heads.png" loading="lazy" alt="Big Heads" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Once you’ve selected your settings, the character can be included in your project with React or as an SVG (which also offers a direct URL to the customized graphic).</p>

<h2 id="codemap">24. <a href="https://codemap.app/">Codemap</a></h2>

<p>This is yet another code visualization tool, which makes me wonder if this is something that’s in demand now.</p>

<p><a href="https://codemap.app/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/24-codemap.png" loading="lazy" alt="Codemap" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>This one is a Mac, Windows, or Linux app that lets you navigate code with a graph, visualizing function calls in an intuitive way.</p>

<h2 id="signature.email">23. <a href="https://signature.email/">signature.email</a></h2>

<p>This is not typically the kind of tool I usually come across, but it was one of the most-clicked tools of the year.</p>

<p><a href="https://signature.email/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/23-signature-email.png" loading="lazy" alt="signature.email" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>It’s a visual drag-and-drop editor for email signatures, to help with consistent branding across team emails. You can pick from various templates, then customize as you see fit.</p>

<h2 id="leaf-php">22. <a href="https://leafphp.netlify.app/">Leaf PHP</a></h2>

<p>Not a front-end tool, but useful for full stack: Create clean, simple, and powerful web applications and APIs quickly.</p>

<p>Besides a few WordPress tools, this is probably the only PHP that I included and — surprise, surprise — it’s one of the most-clicked tools.</p>

<p><a href="https://leafphp.netlify.app/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/22-leaf-php.png" loading="lazy" alt="Leaf PHP" width="770" class="wide_image wi_new wi_screen"></a></p>

<h2 id="blunt">21. <a href="https://github.com/f-prime/Blunt">Blunt</a></h2>

<p>This CSS framework is a little different: It helps with layouts and leaves your styling alone. It only provides helper classes to make positioning and responsive design easier.</p>

<p><a href="https://github.com/f-prime/Blunt"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/21-blunt.png" loading="lazy" alt="Blunt" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>The author made it to fit his own needs due to the fact that other frameworks did either too much or too little.</p>

<h2 id="arwes">20. <a href="https://arwes.dev/">Arwes</a></h2>

<p>This is definitely the coolest project in this whole list. I think the only reason it didn’t get even more clicks is due to the fact that it was already making the rounds in the industry by the time I had included it in mine.</p>

<p><a href="https://arwes.dev/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/20-arwes.png" loading="lazy" alt="Arwes" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>It’s a futuristic sci-fi and cyberpunk-inspired graphical UI framework for web apps and includes some neat animations and audio, so be sure to try out the various components if you haven’t seen this one yet. Not likely you’ll use it on more than one project in a lifetime, but it’s just so fun to play with!</p>

<h2 id="free-illustrations">19. <a href="https://freeillustrations.xyz/">Free Illustrations</a></h2>

<p>This isn’t just a single illustration pack like the others on this list, but a directory of various free illustration sites with info on license, file types, etc., so you can figure out which graphics pack is right for you.</p>

<p><a href="https://freeillustrations.xyz/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/19-free-illustrations.png" loading="lazy" alt="Free Illustrations" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>You can filter by file type (AI, SVG, GIF, SKETCH, PNG, EPS, etc.) so it’s easy to find something that matches your needs.</p>

<h2 id="moretoggles.css">18. <a href="https://jnkkkk.github.io/MoreToggles.css/">MoreToggles.css</a></h2>

<p>CSS utilities that style form elements tend to be pretty popular. This one includes a whole slew of styles for toggles that are checkboxes under the hood.</p>

<p><a href="https://jnkkkk.github.io/MoreToggles.css/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/18-moretoggles.png" loading="lazy" alt="MoreToggles.css" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Be sure to check out the gallery that showcases all the different styles and colors.</p>

<h2 id="patternfly">17. <a href="https://www.patternfly.org/">PatternFly</a></h2>

<p>Another entry in the design system category. This open source design system includes dozens of components and layouts.</p>

<p><a href="https://www.patternfly.org/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/17-patternfly.png" loading="lazy" alt="PatternFly" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Components are available in HTML/CSS or React, with plenty of demos and documentation to help you along.</p>

<h2 id="screenshot.rocks">16. <a href="https://screenshot.rocks/">Screenshot.Rocks</a></h2>

<p>This is a great tool for creating attractive browser and mobile mockups in just a few clicks. Might be useful for slides in presentations.</p>

<p><a href="https://screenshot.rocks/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/16-screenshot-rocks.png" loading="lazy" alt="Screenshot.Rocks" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Enter a URL to capture, then customize the device and background, then download as PNG, SVG, or JPEG.</p>

<h2 id="kickstand-ui">15. <a href="https://kickstand-ui.com/">Kickstand UI</a></h2>

<p>This UI framework is another one built with accessibility as a focus and includes about dozens of components and utilities.</p>

<p><a href="https://kickstand-ui.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/15-kickstand-ui.png" loading="lazy" alt="Kickstand UI" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>This one is well worth delving into, as it has quite a nice array of components with good documentation and demos.</p>

<h2 id="nodesign.dev">14. <a href="https://nodesign.dev/">NoDesign.dev</a></h2>

<p>I’m not surprised this was as popular as it was. It’s advertised as “a collection of tools for developers who have little to no artistic talent.”</p>

<p><a href="https://nodesign.dev/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/14-nodesign.png" loading="lazy" alt="NoDesign.dev" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>To be honest, the collection of tools is pretty standard and isn’t only for the non-artistic among us.</p>

<h2 id="aeon">13. <a href="https://github.com/lamplightdev/aeon">Aeon</a></h2>

<p>I find lots of date picker components, so kudos to this one for making it near the top of the list.</p>

<p><a href="https://github.com/lamplightdev/aeon"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/13-aeon.png" loading="lazy" alt="Aeon" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>This lightweight, dependency-free date/time picker is built with web components and can be used anywhere.</p>

<h2 id="frontendor">12. <a href="https://frontendor.com/">Frontendor</a></h2>

<p>This is another type of front-end toolkit, similar in popularity to the admin dashboards: landing page UI libraries.</p>

<p><a href="https://frontendor.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/12-frontendor.png" loading="lazy" alt="Frontendor" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>This one is a library of reusable HTML blocks and templates to help you build beautiful and professional landing pages quickly and easily by simply copying and pasting. Not free, but includes 100+ blocks and 6+ templates.</p>

<h2 id="wireflow">11. <a href="https://wireflow.co/">Wireflow</a></h2>

<p>Here’s yet another unique entry in the list: A free online and open source tool for creating beautiful user flow prototypes.</p>

<p><a href="https://wireflow.co/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/11-wireflow.png" loading="lazy" alt="Wireflow" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Once you’ve dragged and dropped and customized your ‘flow’ diagram, just download the exported image. Great for presentations and you can also install the tool as a PWA.</p>

<h2 id="remake">10. <a href="https://remaketheweb.com/">Remake</a></h2>

<p>This tool offers a bold promise: To help you build apps and prototypes by going straight from HTML/CSS to dynamic web app.</p>

<p><a href="https://remaketheweb.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/10-remake.png" loading="lazy" alt="Remake" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Includes data syncing, built-in CRUD features, built-in file uploading, built-in user accounts, and more. You’ll have to really delve into their docs to see exactly what this is all about, but like I said, the promised result is pretty bold.</p>

<h2 id="css-scan-pro">9. <a href="https://cssscanpro.com/">CSS Scan Pro</a></h2>

<p>I included this one in the newsletter way back in February but it’s recently been updated to version 2.0.</p>

<p><a href="https://cssscanpro.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/09-css-scan-pro.png" loading="lazy" alt="CSS Scan Pro" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>It’s an extension to “Inspect Element” for Chrome, Firefox, and Safari that lets you instantly get styles, font info, dimensions, animations, and selector for any element on the page. Not free, but developers seem to love it so far.</p>

<h2 id="web-code-tools">8. <a href="https://webcode.tools/">Web Code Tools</a></h2>

<p>This is a large set of code generators that includes CSS effects (gradients, animation, shadows, etc.), HTML tools (audio, video, etc.), Microdata, Twitter Cards, and more.</p>

<p><a href="https://webcode.tools/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/08-web-code-tools.png" loading="lazy" alt="Web Code Tools" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>As shown by a few of the entries above, developers love online interactive generators, so there’s a lot to choose from in this collection.</p>

<h2 id="shadows">7. <a href="https://brumm.af/shadows">Shadows</a></h2>

<p>Here’s another code generator in the top ten. This online tool is based on an article (linked at the bottom of the tool’s page) that explains how using layered shadows can provide more fine-grained control on shadow smoothness.</p>

<p><a href="https://brumm.af/shadows"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/07-shadows.png" loading="lazy" alt="Shadows" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Pretty neat that someone was willing to bring a concept to life like this to make it much easier to use the technique that the original author came up with.</p>

<h2 id="fast">6. <a href="https://www.fast.design/">FAST</a></h2>

<p>This offering from Microsoft is a suite of tools to build enterprise-grade websites, applications, and more.</p>

<p><a href="https://www.fast.design/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/06-fast.png" loading="lazy" alt="FAST" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Built with standards-based web components compatible with a number of technologies, including React, Angular, <a href="http://ASP.NET">ASP.NET</a>, Aurelia, and more.</p>

<h2 id="css-scroll-shadows">5. <a href="https://css-scroll-shadows.now.sh/">CSS Scroll Shadows</a></h2>

<p>This is one of my favourite finds of the year. Scrolling areas are sometimes hard to notice at a glance. This online tool lets you create shadows to make those scrollable page areas more obvious that they’re scrollable.</p>

<p><a href="https://css-scroll-shadows.now.sh/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/05-css-scroll-shadows.png" loading="lazy" alt="CSS Scroll Shadows" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>The tool lets you interactively adjust the background color and shadow color before you grab the code.</p>

<h2 id="css-layout">4. <a href="https://csslayout.io/">CSS Layout</a></h2>

<p>This is a really great collection of popular components, layouts, and patterns made with CSS. Not exactly a framework, just individual components that don’t have any dependencies and just use pure CSS.</p>

<p><a href="https://csslayout.io/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/04-css-layout.png" loading="lazy" alt="CSS Layout" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Consists of 91 components that you can easily customize seeing as they’re just CSS.</p>

<h2 id="exoteric">3. Exoteric</h2>

<p>I’m pretty sure this one got as many clicks as it did because it was originally included under its old name: Dumbass. (Note: Link is now broken, used to be at https://github.com/c9fe/exoteric)</p>

<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/03-exoteric.png" loading="lazy" alt="Exoteric" width="770" class="wide_image wi_new wi_screen"></p>

<p>Nonetheless, it’s a decent tool that lets you build components from cross-browser web standards. No JSX, no Shadow DOM, no fancy frameworks.</p>

<h2 id="css.gg">2. <a href="https://css.gg/">css.gg</a></h2>

<p>This was the 2nd-most clicked tool of the year and was originally a CSS-only icon set that’s been expanded.</p>

<p><a href="https://css.gg/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/02-cssgg.png" loading="lazy" alt="css.gg" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Now it includes 700+ open-source CSS, SVG, and Figma UI Icons. Available in SVG sprite, styled-components, and more.</p>

<h2 id="hacker-ui">1. <a href="https://hacker-ui.com/">Hacker UI</a></h2>

<p>I’m not surprised that the #1 most-clicked tool of the year was yet another UI library. This one is React-based and was originally advertised as one that isn’t closely coupled with any kind of branding, so it’s easy to integrate it with your own project.</p>

<p><a href="https://hacker-ui.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2021-01/01-hacker-ui.png" loading="lazy" alt="Hacker UI" width="770" class="wide_image wi_new wi_screen"></a></p>

<p>Interestingly, the GitHub repo says the project’s development is currently on hiatus. I hope that’s only temporary, as the interest in this one does seem to be moderately strong, showing signs of potential for a good permanent option.</p>

<h2 id="what-was-your-favourite-tool-of-the-year">What Was Your Favourite Tool of the Year?</h2>

<p>I’m always on the lookout for new stuff so if there’s anything in particular that you’ve enjoyed discovering, using, or even something you’ve personally made, feel free to drop it in the comments or hit me up <a href="https://twitter.com/WebToolsWeekly">via DM on Twitter</a>.</p>

<p>And be sure to <a href="https://webtoolsweekly.com/">subscribe to the newsletter</a> for a weekly roundup of the latest and the greatest in front-end tools and more.</p>


<p>The post <a href="https://www.impressivewebs.com/most-interesting-front-end-developer-tools-2021/">Are These the Most Interesting Front-end Developer Tools for 2021?</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.impressivewebs.com/most-interesting-front-end-developer-tools-2021/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
		<item>
		<title>Fading in a Page on Load with CSS &#038; JavaScript</title>
		<link>https://www.impressivewebs.com/fading-in-page-on-load-with-css-javascript/</link>
					<comments>https://www.impressivewebs.com/fading-in-page-on-load-with-css-javascript/#comments</comments>
		
		<dc:creator><![CDATA[Louis Lazaris]]></dc:creator>
		<pubDate>Wed, 09 Dec 2020 10:59:58 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web Design Tutorials]]></category>
		<guid isPermaLink="false">https://www.impressivewebs.com/?p=16684</guid>

					<description><![CDATA[<p><img src="https://s3.amazonaws.com/impressivewebs/2020-12/fadein.png" loading="lazy" alt="Fading in a Page on Load with CSS &#38; JavaScript" width="184" height="184" class="article_image"> When I visit a page, I get annoyed when I try to interact with elements while the website is still loading. Often stuff is moving around, fonts aren’t quite loaded, and it feels broken.</p>
<p>I know nowadays we’re obsessed in this industry with gaining every millisecond in page performance. But in a couple of projects that I recently overhauled, I added a subtle and clean loading mechanism that I think makes the experience nicer, even if it does ultimately slightly delay the time that the user is able to start interacting with my page.</p>
<p>The post <a href="https://www.impressivewebs.com/fading-in-page-on-load-with-css-javascript/">Fading in a Page on Load with CSS &#038; JavaScript</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2020-12/fadein.png" loading="lazy" alt="Fading in a Page on Load with CSS &amp; JavaScript" width="184" height="184" class="article_image"> When I visit a page, I get annoyed when I try to interact with elements while the website is still loading. Often stuff is moving around, fonts aren’t quite loaded, and it feels broken.</p>
<p>I know nowadays we’re obsessed in this industry with gaining every millisecond in page performance. But in a couple of projects that I recently overhauled, I added a subtle and clean loading mechanism that I think makes the experience nicer, even if it does ultimately slightly delay the time that the user is able to start interacting with my page.</p>
<p>The two websites I’m talking about are <a href="https://webtoolsweekly.com/">Web Tools Weekly</a> and <a href="https://cssvalues.com/">CSS Values</a>. Visit each of those home pages and you’ll notice in each case the content fades in rather than loading up in a clunky fashion. It’s more noticeable on CSS Values because there’s a lot more content on there and some JavaScript that has to load. Also, it happens on every “page” for CSS Values, but only on the home page for Web Tools Weekly (though technically the CSS Values pages are more like &#8220;states&#8221;).</p>
<h2 id="steps-i-want-to-accomplish">Steps I Want to Accomplish</h2>
<p>I’m sure there are a few ways to accomplish this but I think my method is clean and easy to understand. I’m basically doing two things:</p>
<ol>
<li>As soon as the <code>&lt;body&gt;</code> element is ready, set it to <code>opacity: 0</code> in CSS.</li>
<li>When the DOM is ready and any scripts finish running, set the <code>&lt;body&gt;</code> element back to <code>opacity: 1</code>, animating it so it comes in gracefully.</li>
</ol>
<p>I’m also ensuring that the page is fully visible and accessible to anyone viewing with JavaScript turned off. Those users shouldn’t notice anything wrong. This means I have to set the opacity using JavaScript.</p>
<p>The concept here is basically the same as if I was adding a loading spinner to the page, but because the page shouldn’t be loading for long, I don’t care about indicating what’s happening to the user. In other cases, a loading spinner might be more appropriate, but here I’m happy with a simple fade-in.</p>
<h2 id="the-code">The Code</h2>
<p>I could have used classes in my HTML that are pulled in from my stylesheet. But the stylesheet is external and I’m not inlining it. So if I’m trying to interact with the page before the stylesheet finishes loading, this might not work as well. Because of this, I opted for adding some CSS in the <code>&lt;head&gt;</code> of the document.</p>
<p>Here’s what my HTML looks like:</p>
<pre><code>  &lt;style&gt;
    .hidden {
      opacity: 0;
    }

    .visible {
      opacity: 1;
      transition: opacity 1s ease-out;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;script&gt;
    document.body.className = 'hidden';
  &lt;/script&gt;
</code></pre>
<p>Notice what’s happening above:</p>
<ul>
<li>I’ve added two declaration blocks in a <code>&lt;style&gt;</code> element, just above the opening <code>&lt;body&gt;</code> tag</li>
<li>I’m using a CSS transition for the subtle animation that causes the fade-in effect</li>
<li>I’ve put a <code>&lt;script&gt;</code> element right after the opening <code>&lt;body&gt;</code> tag</li>
<li>The JavaScript adds the <code>hidden</code> class, which removes the body’s content</li>
</ul>
<p>I&#8217;m doing this right at the top of the body element because I want the content to disappear as soon as possible. If I wait for this to happen in my external JavaScript, then it&#8217;s not going to happen quickly enough.</p>
<p>In my external JavaScript, I have something like the following:</p>
<pre><code>function doStuff (callback) {
  // do all app scripts here...
  callback();
}

doStuff(function () {
  document.body.className = 'visible';
});
</code></pre>
<p>In this instance I’m using a simple <a href="https://www.impressivewebs.com/callback-functions-javascript/">callback structure</a>. I suppose you could also use Promises for this, but I didn’t really look into that much since I’m not yet that familiar with Promises. I believe the concept would be the same.</p>
<p>I’m basically ensuring all the app or website code that initializes any functionality is completely loaded before I set the <code>&lt;body&gt;</code> element back to <code>visible</code>.</p>
<p>To enhance it a little more, I could also wrap the whole thing in a jQuery-like <code>document.ready</code> handler:</p>
<pre><code>window.addEventListener('DOMContentLoaded', function () {
  // do everything here...
});
</code></pre>
<p>This means I’d be waiting for the DOM to be ready before running my scripts. Then the scripts run and after they finish I make the page visible. I can alternatively use the <code>load</code> event, which means I’d be waiting for the full page resources to load, rather than just the DOM to be ready.</p>
<h2 id="conclusion">Conclusion</h2>
<p>If you want a stripped down demo version of this, you can check out <a href="https://www.impressivewebs.com/demo-files/fade-in/">this page</a>. Note that it’s intentionally a very large page, so maybe avoid it on mobile. I’m also running some useless JavaScript (adding a bunch of classes to the HTML) just to pretend something’s happening to give the appearance of a pause before the fade-in happens.</p>
<p>As mentioned, you can also see how this works on <a href="https://webtoolsweekly.com/">Web Tools Weekly</a> and <a href="https://cssvalues.com/">CSS Values</a>.</p>
<p>You could easily switch this up and put a loading spinner in place instead while the page is “getting ready”. I chose to do the fade-in because I think it looks good and I’m not concerned that either website is going to take a long time to load.</p>
<p>If you know of a way to improve on this, I’m glad to hear your feedback.</p>
<div class="button_holder">
<ul class="button">
<li><a href="https://www.impressivewebs.com/demo-files/fade-in/" title="View Demo">View Demo</a></li>
</ul>
</div>
<p>The post <a href="https://www.impressivewebs.com/fading-in-page-on-load-with-css-javascript/">Fading in a Page on Load with CSS &#038; JavaScript</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.impressivewebs.com/fading-in-page-on-load-with-css-javascript/feed/</wfw:commentRss>
			<slash:comments>18</slash:comments>
		
		
			</item>
		<item>
		<title>Solutions and Tools for Dealing with Broken Links in Web Pages</title>
		<link>https://www.impressivewebs.com/solutions-tools-dealing-with-broken-links-web-pages/</link>
					<comments>https://www.impressivewebs.com/solutions-tools-dealing-with-broken-links-web-pages/#comments</comments>
		
		<dc:creator><![CDATA[Louis Lazaris]]></dc:creator>
		<pubDate>Tue, 01 Dec 2020 22:19:09 +0000</pubDate>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design Articles]]></category>
		<guid isPermaLink="false">https://www.impressivewebs.com/?p=16650</guid>

					<description><![CDATA[<p><img src="https://s3.amazonaws.com/impressivewebs/2020-12/archive-logo.png" loading="lazy" alt="Internet Archive logo" width="184" height="184" class="article_image"> A couple of months ago a post by Leo Blanchette got to the front page of Hacker News and there was an interesting discussion on dealing with broken links and external content – the main problem being links that become out of date due to paywalls, altered content, or content getting taken down.</p>
<p>I’ve been running this blog since May 2008. If you’ve run a content-driven site for even a fraction of that, you know that link rot is a problem. In this post I’ll go over some of the suggestions in that thread along with some tools to use to check for broken links.</p>
<p>The post <a href="https://www.impressivewebs.com/solutions-tools-dealing-with-broken-links-web-pages/">Solutions and Tools for Dealing with Broken Links in Web Pages</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2020-12/archive-logo.png" loading="lazy" alt="Internet Archive logo" width="184" height="184" class="article_image"> A couple of months ago a <a href="https://hawaiigentech.com/post/commentary/why-i-link-to-waybackmachine-instead/">post by Leo Blanchette</a> got to the <a href="https://news.ycombinator.com/item?id=24406193">front page of Hacker News</a> and there was an interesting discussion on dealing with broken links and external content – the main problem being links that become out of date due to paywalls, altered content, or content getting taken down.</p>
<p>I’ve been running this blog since <a href="https://www.impressivewebs.com/page/35/">May 2008</a>. If you’ve run a content-driven site for even a fraction of that, you know that <a href="https://en.wikipedia.org/wiki/Link_rot">link rot</a> is a problem. In this post I&#8217;ll go over some of the suggestions in that thread along with some tools to use to check for broken links.</p>
<h2 id="linking-to-archives-by-default">Linking to Archives by Default?</h2>
<p>The gist of Leo’s original post was that he prefers to link to <a href="https://archive.org">archive.org</a> versions of links, essentially snapshots of the intended resource. In theory this sounds like a good idea, but as some in the thread pointed out, it’s not optimal.</p>
<p>First of all, the page has to exist in an archived snapshot. Fortunately, archive.org makes this easy to do. To save any page, just visit the following URL with the link you want to archive appended to it:</p>
<pre><code class="bash">https://web.archive.org/save/
</code></pre>
<p>For example, if I want to save the home page for this blog I would visit:</p>
<pre><code class="bash">https://web.archive.org/save/https://www.impressivewebs.com
</code></pre>
<p>Or I could visit <a href="https://web.archive.org/save">web.archive.org/save</a> and enter the page manually, with the option to save error messages too.</p>
<p>This is possible from a reader/blogger perspective, but due to takedowns and preventative measures by many websites, archive.org is not completely reliable for finding older pages. There are a number of other services for archiving pages, many that have gained popularity in recent years (e.g <a href="https://archive.is/">archive.is</a>). But I’m not sure of the long-term reliability of those either and they’re not as popular as archive.org. For that reason, I tend to favour using archive.org.</p>
<p>As mentioned, many in the discussion on Hacker News disagreed with defaulting a link to the archived version. The primary reason not to do this is because it takes traffic away from the original content, which seems unethical and may even affect page rank for the resource (I can’t imagine Google is giving ranking juice to a site as a result of inbound links to archived pages).</p>
<h2 id="html-solutions-for-preventing-link-rot">HTML Solutions for Preventing Link Rot</h2>
<p>A few of the comments in the discussion that caught my eye proposed alternative solutions to this problem.</p>
<p>Mark Graham, who manages the Wayback Machine at the Internet Archive <a href="https://news.ycombinator.com/item?id=24411324">wrote the following</a>:</p>
<blockquote><p>We suggest/encourage people link to original URLs but ALSO (as opposed to instead of) provide Wayback Machine URLs so that if/when the original URLs go bad (link rot) the archive URL is available, or to give people a way to compare the content associated with a given URL over time (content drift).</p></blockquote>
<p>Interestingly, he also said:</p>
<blockquote><p>BTW, we archive all outlinks from all Wikipedia articles from all Wikipedia sites, in near-real-time… so that we are able to fix them if/when they break.</p></blockquote>
<p>Good to know!</p>
<p>Mark’s solution is mainly a content solution. For example, you might include a link then put the archived link in parentheses next to it. But that’s a messy and tedious solution. I don’t want my content littered with unnecessary links. The discussion went on to suggest HTML solutions that I think are much better.</p>
<p>A workable HTML solution similar to one that <a href="https://news.ycombinator.com/item?id=24414081">one user presents</a> looks something like this:</p>
<pre><code class="html">&lt;a href="https://www.impressivewebs.com/"
   data-archive-url="https://web.archive.org/web/20201124215517/https://www.impressivewebs.com/"
   data-archive-date="2020-12-01"
   &gt;My Blog&lt;/a&gt;
</code></pre>
<p>This uses HTML’s <code>data-*</code> attributes (which can be anything you want as long as they begin with <code>data-</code>) to store the archived URL and the date it was archived. I think this is the best and cleanest solution. Of course, this won’t ensure that the user visits the archived page in the event of link rot (or “content drift” as Mark put it).</p>
<p>Ideally, browsers would be able to recognize that the link is down and automatically direct the user to the archived URL. But this presents problems of its own. What if the page isn’t down, but only changed? How would the browser detect this? What if the page is redirected to another URL. This too wouldn’t necessarily be detected.</p>
<p>To combat this, <a href="https://news.ycombinator.com/item?id=24411970">others proposed</a> new HTML standards that would address these, which would be similar to using the <code>data-*</code> attributes:</p>
<blockquote><p>It’s interesting to think about how HTML could be modified to fix the issue. Initial thought: along with HREF, provide AREF- a list of archive links. The browser could automatically try a backup if the main one fails. The user should be able to right-click the link to select a specific backup.</p></blockquote>
<p>But again, while this seems effective in theory, it feels like you’re asking the browser to do too much, which could have performance or even security implications. I don’t know if there’s a perfect technical solution to this, but the HTML solution I presented seems simple enough for those who are concerned about link rot.</p>
<h2 id="tools-for-dealing-with-link-rot">Tools for Handling Broken Links</h2>
<p>Even with a <code>data-*</code> attribute in place, you may need a way to discover if bad links even exist. True, it will be much harder and more tedious to discover broken links that aren’t actually broken but that redirect to a new page. And it&#8217;s even more difficult to find pages that have updated content that make the link less relevant. But you can do your part by incorporating any of a number of tools.</p>
<p>First of all, as a reader, if you come across an outdated or broken link, you can check the web archive for existing snapshots. Browser extensions make this easier.</p>
<ul class="body_list">
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/wayback-machine_new/">Wayback Machine Firefox Add-on</a></li>
<li><a href="https://chrome.google.com/webstore/detail/wayback-machine/fpnmgdkabkmnadcjpehmlllkndpkmiak">Wayback Machine Chrome Extension</a></li>
</ul>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2020-12/firefox-wayback.png" loading="lazy" alt="Wayback Machine Add-on for Firefox" title="Whatever" class="wide_image wi_new"></p>
<p>If you use <a href="https://brave.com/">Brave</a> a broken page will display a bar at the top allowing you to check the Wayback Machine for an archived version.</p>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2020-12/brave-bar.png" loading="lazy" alt="Wayback Machine Feature in Brave Browser" class="wide_image wi_new"></p>
<p>This is a setting you can enable or disable:</p>
<p><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2020-12/brave-wayback-option.png" loading="lazy" alt="Enabling the Wayback Machine Feature in Brave Browser" width="706" height="123" class="wide_image wi_new"></p>
<p>I’m not sure if other browsers have this ability, but the extensions linked above will accomplish the same thing.</p>
<p>Of course, those are solutions from a reader’s perspective. From a developer perspective, in addition to some extra HTML, you’ll also want to do a check for broken links. This can be automated or handled manually every so often with any number of tools. Below are a few that I’ve come across over the years.</p>
<h2 id="sitechecker-broken-links"><a href="https://sitechecker.pro/broken-links/">Broken Link Checker</a> by Sitechecker</h2>
<p>This tool can be used in two ways: Scan an entire domain or a specific page. The tool also scans both internal and external hyperlinks.<br />
<a href="https://sitechecker.pro/broken-links/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2020-12/sitechecker-brokenlinks.png" loading="lazy" alt="Broken Link Checker by Sitechecker" class="wide_image wi_new"></a></p>
<h2 id="broken-link-checker"><a href="https://sitechecker.pro/broken-links/"></a><a href="https://sitechecker.pro/broken-links/"></a><a href="https://github.com/stevenvachon/broken-link-checker">broken-link-checker</a></h2>
<p>Can be used as a CLI tool or programmatically via JavaScript.</p>
<p><a href="https://github.com/stevenvachon/broken-link-checker"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2020-12/brokenlinkchecker.png" loading="lazy" alt="broken-link-checker" class="wide_image wi_new"></a></p>
<h2 id="linkinator"><a href="https://github.com/JustinBeckwith/linkinator">linkinator</a></h2>
<p>Similar to previous, can be used as a CLI tool or programmatically via JavaScript.</p>
<p><a href="https://github.com/JustinBeckwith/linkinator"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2020-12/linkinator.png" loading="lazy" alt="linkinator" class="wide_image wi_new"></a></p>
<h2 id="checkbot"><a href="https://www.checkbot.io/">Checkbot</a></h2>
<p>Tests for broken links in addition to a number of SEO and security checks. Free for small websites.</p>
<p><a href="https://www.checkbot.io/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2020-12/checkbot.png" loading="lazy" alt="Checkbot" class="wide_image wi_new"></a></p>
<h2 id="dead-link-checker"><a href="https://www.deadlinkchecker.com/">Dead Link Checker</a></h2>
<p>Online dead link checker that tests the first 2000 links free.</p>
<p><a href="https://www.deadlinkchecker.com/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2020-12/deadlinkchecker.png" loading="lazy" alt="Dead Link Checker" class="wide_image wi_new"></a></p>
<h2 id="wp-broken-link-checker"><a href="https://wordpress.org/plugins/broken-link-checker/">Broken Link Checker</a></h2>
<p>A popular WordPress plugin for checking dead links.</p>
<p><a href="https://wordpress.org/plugins/broken-link-checker/"><img decoding="async" src="https://s3.amazonaws.com/impressivewebs/2020-12/wpbrokenlinkchecker.png" loading="lazy" alt="Broken Link Checker for WordPress" class="wide_image wi_new"></a></p>
<p>There are also a number of website monitoring solutions, usually not free, that include broken link checks as part of their service. I won’t list any of those here, but you can try <a href="https://duckduckgo.com/?q=site%3Awebtoolsweekly.com+%22monitoring%22">this search in my newsletter’s archives</a> that should pull up lots of issues that included monitoring tools.</p>
<h2 id="other-ideas">Any Other Ideas?</h2>
<p>If you have any other suggestions or know of another tool to deal with broken links in web pages or even the potential for broken links in the future, feel free to post a comment below.</p>
<p>The post <a href="https://www.impressivewebs.com/solutions-tools-dealing-with-broken-links-web-pages/">Solutions and Tools for Dealing with Broken Links in Web Pages</a> appeared first on <a href="https://www.impressivewebs.com">Impressive Webs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.impressivewebs.com/solutions-tools-dealing-with-broken-links-web-pages/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced (SSL caching disabled) 
Minified using Disk

Served from: www.impressivewebs.com @ 2026-04-11 22:15:39 by W3 Total Cache
-->