<?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: Norbert</title>
    <description>The latest articles on DEV Community by Norbert (@norbertdurcansk).</description>
    <link>https://dev.to/norbertdurcansk</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%2F367380%2Fd2238d3c-6105-415e-877b-ba6b04cefa1e.jpeg</url>
      <title>DEV Community: Norbert</title>
      <link>https://dev.to/norbertdurcansk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/norbertdurcansk"/>
    <language>en</language>
    <item>
      <title>Styled Components for Everyone - Welcome Cinnamon Wrap 1.0 🌯</title>
      <dc:creator>Norbert</dc:creator>
      <pubDate>Wed, 18 Nov 2020 16:26:38 +0000</pubDate>
      <link>https://dev.to/norbertdurcansk/styled-components-for-everyone-welcome-cinnamon-wrap-1-0-1n89</link>
      <guid>https://dev.to/norbertdurcansk/styled-components-for-everyone-welcome-cinnamon-wrap-1-0-1n89</guid>
      <description>&lt;p&gt;&lt;strong&gt;Styled-components&lt;/strong&gt; are quite common in the web development sphere, helping developers create components with dynamic styles and properties. We, as developers, always find ways to improve performance, efficiency, and readability. One library that made us think more deeply about this was &lt;a href="https://styled-system.com/"&gt;styled-system&lt;/a&gt; which created new ways for a cleaner and more mobile-friendly look.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;L&lt;/strong&gt;et's take another leap forward with &lt;strong&gt;styled-components&lt;/strong&gt;. We have been experimenting with options to create extensive UI components that will implement a design system and help developers create Websites from smaller elements. We built on Atomic design patterns and the result was astonishing. Cinnamon's styling library improved in overall performance and created amazing UIs. (&lt;a href="https://cinnamon.video/"&gt;https://cinnamon.video/&lt;/a&gt;)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Far more powerful than other libraries with incredible short render time that makes connection with styled-components advanced UI library.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Key features&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reusing components for creating extensible UIs.&lt;/li&gt;
&lt;li&gt;Styles optimisation with duplication removal (Extended component always has optimised styles without ugly overrides).&lt;/li&gt;
&lt;li&gt;Fewer classes. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Following styled-components styling pattern ensures safe implementation, which makes render time indistinguishable from Styled components implementation.&lt;/p&gt;

&lt;p&gt;We have created a base component called &lt;code&gt;StyledElement&lt;/code&gt;. It is the core block for creating extendable UIs. The syntax is remarkably similar to the styled components with additional features.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Enhanced styled components can be created with the &lt;code&gt;extend&lt;/code&gt; function when used in styled &lt;code&gt;attrs&lt;/code&gt; function.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let us say we want to create a basic Text component with two variants.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;StyledElement&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;attrs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
   &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  
   &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;inline-block&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="c1"&gt;//  ... more css properties&lt;/span&gt;
   &lt;span class="na"&gt;variants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;
      &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
     &lt;span class="p"&gt;},&lt;/span&gt;
     &lt;span class="na"&gt;white&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;
      &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
     &lt;span class="p"&gt;},&lt;/span&gt;
   &lt;span class="p"&gt;},&lt;/span&gt;
   &lt;span class="na"&gt;sizes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;
       &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="p"&gt;},&lt;/span&gt;
     &lt;span class="na"&gt;small&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;
       &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="p"&gt;},&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}))&lt;/span&gt;&lt;span class="s2"&gt;``&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Text&lt;/span&gt; &lt;span class="na"&gt;small&lt;/span&gt; &lt;span class="na"&gt;blue&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; // fontSize: 14px, color: blue, &lt;span class="nt"&gt;&amp;lt;p/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Text&lt;/span&gt; &lt;span class="na"&gt;base&lt;/span&gt; &lt;span class="na"&gt;white&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; // fontSize: 16px, color: white, &lt;span class="nt"&gt;&amp;lt;p/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;The function &lt;code&gt;extend&lt;/code&gt; plays an important part in creating the final object with defined style properties.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As we already have the &lt;code&gt;Text&lt;/code&gt; component let us say we want to extend it to create a &lt;code&gt;Heading&lt;/code&gt; component.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Heading&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;attrs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;   
   &lt;span class="na"&gt;sizes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;large&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;
       &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="p"&gt;},&lt;/span&gt;
     &lt;span class="na"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;
       &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="p"&gt;},&lt;/span&gt;
     &lt;span class="na"&gt;small&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;
       &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="p"&gt;},&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}))&lt;/span&gt;&lt;span class="s2"&gt;``&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Heading&lt;/span&gt; &lt;span class="na"&gt;large&lt;/span&gt; &lt;span class="na"&gt;blue&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; // &lt;span class="nt"&gt;&amp;lt;h1/&amp;gt;&lt;/span&gt;, color: blue, fontSize: 20
&lt;span class="nt"&gt;&amp;lt;Heading&lt;/span&gt; &lt;span class="na"&gt;base&lt;/span&gt; &lt;span class="na"&gt;white&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; // &lt;span class="nt"&gt;&amp;lt;h2/&amp;gt;&lt;/span&gt;, color: white, fontSize: 16
&lt;span class="nt"&gt;&amp;lt;Heading&lt;/span&gt; &lt;span class="na"&gt;small&lt;/span&gt; &lt;span class="na"&gt;white&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; // &lt;span class="nt"&gt;&amp;lt;h3/&amp;gt;&lt;/span&gt;, color: white, fontSize: 14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;Heading&lt;/code&gt; component reuses the &lt;code&gt;Text&lt;/code&gt; variants and properties and extends sizes.&lt;/p&gt;

&lt;p&gt;More incredible features for enhancing UI components are available &lt;a href="https://www.notion.so/Styling-bfd1b72d815e46fab45135cd12cb7420"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In early 2021 we plan to outsource the UI Cinnamon library. We cannot wait to see the amazing websites our community will create. Let us know what your thoughts are.&lt;/p&gt;

</description>
      <category>styledcomponents</category>
      <category>components</category>
      <category>styling</category>
      <category>ui</category>
    </item>
  </channel>
</rss>
