<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marcos Rego</title>
    <description>The latest articles on DEV Community by Marcos Rego (@marcosregoweb).</description>
    <link>https://dev.to/marcosregoweb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F437127%2Fe49ceb4f-aa0a-4c59-a9e2-979680b63b98.png</url>
      <title>DEV Community: Marcos Rego</title>
      <link>https://dev.to/marcosregoweb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marcosregoweb"/>
    <language>en</language>
    <item>
      <title>Best Email practices, tips and tricks</title>
      <dc:creator>Marcos Rego</dc:creator>
      <pubDate>Mon, 10 Oct 2022 17:40:44 +0000</pubDate>
      <link>https://dev.to/marcosregoweb/best-email-practices-tips-and-tricks-3mg2</link>
      <guid>https://dev.to/marcosregoweb/best-email-practices-tips-and-tricks-3mg2</guid>
      <description>&lt;p&gt;There are a lot of best practices that can improve email reputation, unfortunately many of them are initially overlooked or only implemented when problems arise.&lt;/p&gt;

&lt;p&gt;That can bring serious problems on the long-run, &lt;strong&gt;specially when using a non business email service&lt;/strong&gt;. So I’ll let you know some important ones for you to take into consideration…&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;When should you use a business email&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If your business relies a lot on sending and receiving emails or combines regular emails with marketing services, it might be better to start using a business service immediately, such as &lt;a href="https://www.google.com/business/"&gt;Google&lt;/a&gt; or &lt;a href="https://www.zoho.com/mail/"&gt;Zoho&lt;/a&gt;. It might seem costly initially but it’s safer for your reputation and security on the long-run.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Best practices for newsletters and transactional emails&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Always use a specific service for newsletters and transactional emails, such as &lt;a href="https://mailchimp.com/"&gt;Mailchimp&lt;/a&gt; or &lt;a href="https://sendinblue.com/"&gt;Sendinblue&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;  Avoid using your main domain. Configure your services to use a subdomain and set the sender to something like &lt;strong&gt;noreply@email.&lt;/strong&gt;yourdomain.tld.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Always add links for unsubscribe or manage preferences.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NmtMxyon--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://marcosrego.com/wp-content/uploads/2021/08/my-sendinblue-config-1024x517.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NmtMxyon--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://marcosrego.com/wp-content/uploads/2021/08/my-sendinblue-config-1024x517.png" alt="My sendinblue email domain config" title="my sendinblue config - Best Email practices, tips and tricks" width="880" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example of how to avoid using the main domain and configure the sender using Sendinblue.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Best practices for sending regular emails&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Use the &lt;a href="https://www.mail-tester.com/"&gt;Mail Tester&lt;/a&gt; platform when you write new messages, it will give you tips and tricks on how to improve them and avoid from falling into spam.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://marcosrego.com/wp-content/uploads/2021/08/Mail-Tester_Marcos-Rego.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RZTAwJuL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://marcosrego.com/wp-content/uploads/2021/08/Mail-Tester_Marcos-Rego-1024x517.png" alt="Mail Tester First screen as shown to Marcos Rego" title="Mail Tester Marcos Rego - Best Email practices, tips and tricks" width="880" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To use Mail Tester, grab an email that you will send to someone and send it to the email shown to you on &lt;a href="https://www.mail-tester.com/"&gt;https://www.mail-tester.com/&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://marcosrego.com/wp-content/uploads/2021/08/Mail-Tester-Test-Result_Marcos-Rego.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yk8oaRet--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://marcosrego.com/wp-content/uploads/2021/08/Mail-Tester-Test-Result_Marcos-Rego-1024x521.png" alt="Mail Tester Results as shown to Marcos Rego" title="Mail Tester Test Result Marcos Rego - Best Email practices, tips and tricks" width="880" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After clicking to check the score, your test result will be shown. You can open each option to know more details on how to improve.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Some practices are:&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  Do not use for mass email sending.&lt;/li&gt;
&lt;li&gt;  Always include a subject.&lt;/li&gt;
&lt;li&gt;  Always add &lt;em&gt;alt text&lt;/em&gt; attributes to your images.&lt;/li&gt;
&lt;li&gt;  Regular emails should not show HTML code, iframes or other embed content. That type of content should be sent as an attachment or via &lt;a href="https://wetransfer.com/"&gt;WeTransfer&lt;/a&gt;. You can use HTML only in newsletters.&lt;/li&gt;
&lt;li&gt;  Do not send messages only with a link or attachment, it should always have some regular text.&lt;/li&gt;
&lt;li&gt;  Messages should have a proper length. Avoid sending short texts that could be sent via chat, apps or sms.&lt;/li&gt;
&lt;li&gt;  Avoid typical subjects with certain keywords that can fall into spam such as “test”, “spam” and similar. Specially when unrelated to the message.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Best practices on email clients&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Which email client should you use&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;By email clients I mean software and apps such as &lt;a href="https://www.microsoft.com/en-us/p/mail-and-calendar/9wzdncrfhvqm?activetab=pivot:overviewtab"&gt;Mail&lt;/a&gt;, &lt;a href="https://www.thunderbird.net/en-US/"&gt;Thunderbird&lt;/a&gt; or &lt;a href="https://www.microsoft.com/en-ww/microsoft-365/outlook/email-and-calendar-software-microsoft-outlook"&gt;Outlook&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fxaxm_0P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://marcosrego.com/wp-content/uploads/2021/08/email-clients.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fxaxm_0P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://marcosrego.com/wp-content/uploads/2021/08/email-clients.png" alt="Apple Mail, Google Mail, Thunderbird and Outlook" title="email clients - Best Email practices, tips and tricks" width="774" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Something to keep in mind for basic users is, the simplest the email client the less problems will occur when connecting to emails:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  If you only need the basic features, check the client that comes with your device. Usually the basic is more than enough and many clients still give you features such as signatures.&lt;/li&gt;
&lt;li&gt;  If you need a set of advanced configurations and features for free I advice you to use Thunderbird.&lt;/li&gt;
&lt;li&gt;  If you need advanced configurations, advanced features and you are on a company, you can go with Microsoft 365 Outlook. But I usually advice against it, specially if you can’t update to the latest version for some reason, It’s the first to give problems. You might need a “tech guy” to help you out from time to time.
Sometimes you might need some kind of compatibility with other software/service, that’s the only reason I understand the use of Outlook.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Incoming server: IMAP or POP?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To keep things simple, the best option usually is &lt;strong&gt;IMAP&lt;/strong&gt;. When you delete emails they will also be deleted from the server by default and the emails will only be stored on your computer temporarily as you read them.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Troubleshooting connection problems on email clients&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Not receiving emails?&lt;/strong&gt; Always check the spam folder before moving to other types of troubleshooting. Add domains you trust to your whitelist and report as not spam if your client/webmail allows it.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Connection problems?&lt;/strong&gt; First thing to always troubleshoot is to check the status of the server, some email providers have a specific place to report situations, Hostinger for example &lt;a href="https://statuspage.hostinger.com/"&gt;has this page&lt;/a&gt; for each of their services.
A second thing to troubleshoot, is to access your email via webmail. If you can’t access via webmail, you will not be able to access via clients either. If this is the case, double-check the address and password. If they are correct, contact your host manager/provider &lt;em&gt;(Is it me? Then this is the usual &lt;a href="https://mail.hostinger.com/"&gt;webmail access&lt;/a&gt; and you can &lt;a href="https://marcosrego.com/client-area/contact/"&gt;contact me here&lt;/a&gt;)&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Configuration problems?&lt;/strong&gt; If your email client doesn’t have a field for the ports, add them to the incoming and outgoing server fields. Something like this:
imap.hostinger.com*&lt;em&gt;:993&lt;/em&gt;*
smtp.hostinger.com*&lt;em&gt;:465&lt;/em&gt;*&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Unknown connection errors?&lt;/strong&gt; If you have problems connecting and the error message is not clear, the fastest way to discover the problem is to check the logs. Depending of your email client, you might need to enable them first. If you can’t read the logs you might need help from an expert. Do you have a maintenance or support service with me? You can send the logs to me and I’ll try to help you out.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://support.microsoft.com/en-us/office/what-is-the-enable-logging-troubleshooting-option-0fdc446d-d1d4-42c7-bd73-74ffd4034af5#onoff"&gt;Outlook logs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://wiki.mozilla.org/MailNews:Logging"&gt;Thunderbird logs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qPr7rp0l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://marcosrego.com/wp-content/uploads/2021/08/Hostinger-Webmail-1024x517.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qPr7rp0l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://marcosrego.com/wp-content/uploads/2021/08/Hostinger-Webmail-1024x517.png" alt="Hostinger Webmail" title="Hostinger Webmail - Best Email practices, tips and tricks" width="880" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mail.hostinger.com/"&gt;Hostinger&lt;/a&gt; is one of the many hosts providing emails. Including webmail access.&lt;/p&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Best practices for domain records&lt;/strong&gt; (advanced)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  The Mail tester platform mentioned above, also gives great tips for domain records.&lt;/li&gt;
&lt;li&gt;  Regular emails usually have MX records but should also have TXT records for DKIM and DMARC.&lt;/li&gt;
&lt;li&gt;  MX Records should not have the same priority level.&lt;/li&gt;
&lt;li&gt;  MX Records per domain/subdomain should point to one unique service. Mass email services usually have alternative DNS Records.&lt;/li&gt;
&lt;li&gt;  For mass email and newsletters services such as Sendinblue. Always configure with all the steps given by the service, with all the DNS records.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;I hope this practices, tips and tricks can help you as they helped me!&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I’m not an email expert but I’ve been learning a lot of practices while working with my clients &lt;a href="https://marcosrego.com/blog/about-me/"&gt;since 2014&lt;/a&gt; and it’s a pleasure to share them with you now.&lt;/p&gt;

</description>
      <category>email</category>
      <category>bestpractices</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to avoid (CLS) Layout Shift when using JS Components</title>
      <dc:creator>Marcos Rego</dc:creator>
      <pubDate>Mon, 10 Oct 2022 17:31:58 +0000</pubDate>
      <link>https://dev.to/marcosregoweb/how-to-avoid-cls-layout-shift-when-using-js-components-1aka</link>
      <guid>https://dev.to/marcosregoweb/how-to-avoid-cls-layout-shift-when-using-js-components-1aka</guid>
      <description>&lt;p&gt;When using components that are based on Javascript, you might notice a layout shift on your content (CLS), specially if you delay the start of Javascript in some way. On that situation, you’ll see the initial look of the elements until Javascript kicks in.&lt;/p&gt;

&lt;p&gt;But of course, delaying javascript until user interaction or after some seconds it’s a good practice and a good trick to increase the score of a website on &lt;a href="https://pagespeed.web.dev/"&gt;pagespeed insights&lt;/a&gt;. So the better option is to find ways to avoid layout shift, fortunately is not that complicated.&lt;/p&gt;

&lt;p&gt;For this tutorial I’ll be focusing on &lt;a href="https://marcosrego.com/development/mr-utils/"&gt;Mr.Utils&lt;/a&gt; JS components, but the same logic applies to other tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Understand how general JS Components work&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The way Mr.Utils javascript components work is by adding the necessary CSS inline properties to the element after page load, but only if the element doesn’t have a utility class that already uses some of those properties.&lt;/p&gt;

&lt;p&gt;And as you might know, HTML classes don’t rely on Javascript to apply the style of CSS properties. We’ll use that fact to our benefit, to avoid the layout shift when delaying Javascript on this situation.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Fixing the Content Layout Shift&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fix CLS for components that add properties&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Components such as &lt;strong&gt;Mr.Utils Swipe component&lt;/strong&gt; add the following inline properties to the element:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;display: -webkit-inline-box;
flex-wrap: unset !important;
overflow-x: scroll !important;
-webkit-overflow-scrolling: touch !important;
overflow-y: hidden;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;But there’s one utility class that does the exact same thing, so all you need to do is to add the following utility class after adding the swipe class:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mr-horizontalscroll
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you are using Mr.Utils as a plugin: Instead of adding the class you can select the option at Misc &amp;gt; Scroll &amp;gt; Horizontal Scroll.&lt;/p&gt;

&lt;p&gt;In the end, you’ll have the following classes on your element:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mr-swipe mr-horizontalscroll
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;By doing this, the properties will be added before javascript runs and you’ll be avoiding the layout shift, without losing the benefits of the swipe component (such as the ability to drag with a mouse).&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fix CLS for components that create new elements&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Components such as &lt;strong&gt;Tabs&lt;/strong&gt; and navigation options on &lt;strong&gt;Pagination (Radio, Arrows, Dropdown)&lt;/strong&gt; add new elements to the page if those elements do not exist yet. So, the way to avoid layout shifting when Javascript starts on this situation, is to create the elements manually, let’s take a look at that:&lt;/p&gt;

&lt;p&gt;If you want to use the exact same elements that Mr.Utils’ Javascript would create, you can use the below HTML Codes after the element &lt;em&gt;(or before when using &lt;a href="https://github.com/marcosrego-web/mr-utils/wiki/Utility-Classes#components"&gt;the proper class&lt;/a&gt;)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pagination Arrows&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div class="mr-pagination"&amp;gt;
&amp;lt;button class="mr-arrows mr-prev"&amp;gt;⇦&amp;lt;/button&amp;gt;
&amp;lt;button class="mr-arrows mr-next"&amp;gt;⇨&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Pagination Radio Buttons&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Duplicate the last “mr-radio” to match the number of pages&lt;/em&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div class="mr-pagination"&amp;gt;
&amp;lt;span class="mr-radios"&amp;gt;
&amp;lt;input name="mr-radio" title="1/2" class="mr-radio" type="radio" value="1" checked="checked"&amp;gt;
&amp;lt;input name="mr-radio" title="2/2" class="mr-radio" type="radio" value="2"&amp;gt;
&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Pagination Dropdown&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Duplicate the last “option” to match the number of pages&lt;/em&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div class="mr-pagination"&amp;gt;
&amp;lt;select class="mr-pageselect" title="/2"&amp;gt;
&amp;lt;option value="1"&amp;gt;1&amp;lt;/option&amp;gt;
&amp;lt;option value="2"&amp;gt;2&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Tabs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Duplicate the last “mr-tab” to match the number of pages&lt;/em&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div class="mr-tabsnav mr-horizontalscroll"&amp;gt;
&amp;lt;button class="mr-tab mr-active"&amp;gt;Tab 01&amp;lt;/button&amp;gt;
&amp;lt;button class="mr-tab"&amp;gt;Tab 02&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you want a bit more control or if you use site-builders, you can also create those new elements in a different way, as long as the main/parent element uses the class &lt;em&gt;mr-pagination&lt;/em&gt; or &lt;em&gt;mr-tabsnav&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If you are using Mr.Utils as a plugin on WordPress, you can use the block editor to create buttons for the Tabs component. Then, by selecting the buttons container, on Utilities choose Components &amp;gt; Tabs Navigation.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Live example of fixing Tabs CLS&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A good example of this live is on &lt;a href="https://shop.itemzero.com/"&gt;Itemzero’s Shop&lt;/a&gt;, the tabs were created using the block editor and Mr.Utils.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WGj8o10y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://marcosrego.com/wp-content/uploads/2021/04/itemzero-mrdev_widget-tabs-1024x572.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WGj8o10y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://marcosrego.com/wp-content/uploads/2021/04/itemzero-mrdev_widget-tabs-1024x572.jpg" alt="Itemzero's shop uses tabs" title="itemzero mrdev widget tabs - How to avoid (CLS) Layout Shift when using JS Components" width="880" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Itemzero’s shop uses tabs from Mr.Utils components.&lt;/p&gt;

&lt;p&gt;And that’s it! Those are some ways to avoid layout shift when using JS Components.&lt;/p&gt;

</description>
      <category>cls</category>
      <category>javascript</category>
      <category>pagespeed</category>
      <category>cumulativelayoutsift</category>
    </item>
  </channel>
</rss>
