{"id":16456,"date":"2017-03-28T12:00:42","date_gmt":"2017-03-28T16:00:42","guid":{"rendered":"http:\/\/webdevstudios.com\/?p=16456"},"modified":"2024-04-15T12:01:23","modified_gmt":"2024-04-15T16:01:23","slug":"evolution-css-class-naming-methodologies","status":"publish","type":"post","link":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/","title":{"rendered":"Evolution of CSS: Class Naming Methodologies"},"content":{"rendered":"<div class=\"intro\" style=\"padding: 1.2em 1.2em 0 1.2em; font-size: 85%; border: 1px solid #dcdfe1; background-color: #f2f3f4;\">\n<p>This is Part II of a series called &#8220;Evolution of CSS&#8221;.<\/p>\n<ol style=\"list-style-type: upper-roman; font-style: normal;\">\n<li><a href=\"https:\/\/webdevstudios.com\/2017\/02\/28\/becoming-a-css-composer\/\">Evolution of CSS: Becoming a CSS Composer<\/a><\/li>\n<li><strong>Evolution of CSS: Class Naming Methodologies<\/strong><\/li>\n<li>Evolution of CSS: Overview of\u00a0Tachyons<\/li>\n<\/ol>\n<\/div>\n<p>Perhaps you&#8217;ve heard this one before?<\/p>\n<blockquote><p>There are only two hard things in Computer Science: cache invalidation and naming things.<\/p>\n<p><cite>&#8211; Phil Karlton<\/cite><\/p><\/blockquote>\n<p>Well, as any developer that writes code daily could attest those words are very true; and CSS class naming and assignment is no exception. Let&#8217;s discuss some of the reasons why and some of the solutions and theories offered to help mitigate this conundrum. But first, let&#8217;s try and clear the air around one particular subject: semantics.<br \/>\n<!--more--><\/p>\n<h2>Semantics<\/h2>\n<p>Semantics is the study of symbols, words, phrases and signs and their meaning, both philosophically and linguistically.<\/p>\n<blockquote><p>In the context of front-end web development, semantics are largely concerned with the agreed meaning of HTML elements, attributes, and attribute values (including extensions like Microdata). These agreed semantics, which are usually formalised in specifications, can be used to help programmes (and subsequently humans) better understand aspects of the information on a website. However, even after formalisation, the semantics of elements, attributes, and attribute values are subject to adaptation and co-option by developers. This can lead to subsequent modifications of the formally agreed semantics (and is an HTML design principle).<\/p>\n<p><cite>&#8220;<a href=\"http:\/\/nicolasgallagher.com\/about-html-semantics-front-end-architecture\/\">About HTML semantics and front-end architecture<\/a>&#8221; &#8211; Nicolas Gallagher<\/cite><\/p><\/blockquote>\n<p>As front-end developers, we tend to toss around the word semantics a lot. We want our code to be semantic, but what do we mean?<\/p>\n<p>There are certain fallacies in regards to CSS and HTML semantics. Yes, HTML can have semantic purpose and help browsers render proper markup to end-users. However, CSS has no semantics; and if it does, it is merely cultural, internal, agreed-upon semantics. In other words, to say certain classes or class naming conventions are \u201cunsemantic\u201d is moot. You&#8217;re merely stating that the class names don&#8217;t make sense (lack meaning) to you. For the most part, any class name has meaning and purpose to <em>somebody<\/em>.<\/p>\n<p>The main purpose of class naming should be to help developers. If your HTML is outlined properly, then the content&#8217;s meaning is already established. Assigning classes to any of those elements won&#8217;t affect that content&#8217;s meaning.<\/p>\n<p>This is where we can differentiate content-semantic (e.g. <code>.header<\/code> or <code>.submenu<\/code>) vs visually semantic (e.g. <code>.col4<\/code> or <code>.btn-success<\/code>) class naming conventions. Later we&#8217;ll also discuss the new kid on the block: functional (or composeable) class naming.<\/p>\n<h2>Analyzing Scalable and Performant Methodologies<\/h2>\n<p>Many people far smarter than me have written about their experience on scaling CSS. Similarly, many approaches have been born from these conversations. Here are a few and a brief overview of them individually. Hopefully, you&#8217;ve already heard of some, and you may be already using a preferred method.<\/p>\n<h3><a href=\"https:\/\/github.com\/stubbornella\/oocss\/wiki\">Object Oriented CSS<\/a> (OOCSS)<\/h3>\n<figure id=\"attachment_16454\" aria-describedby=\"caption-attachment-16454\" style=\"width: 200px\" class=\"wp-caption alignright\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"16454\" data-permalink=\"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/nicole_sullivan-681x1024\/\" data-orig-file=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/nicole_sullivan-681x1024.jpg\" data-orig-size=\"681,1024\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"nicole_sullivan-681&amp;#215;1024\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Nicole Sullivan&lt;\/p&gt;\n\" data-large-file=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/nicole_sullivan-681x1024.jpg\" class=\"wp-image-16454 size-medium\" src=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/nicole_sullivan-681x1024-200x300.jpg\" alt=\"\" width=\"200\" height=\"300\" srcset=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/nicole_sullivan-681x1024-200x300.jpg 200w, https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/nicole_sullivan-681x1024-40x60.jpg 40w, https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/nicole_sullivan-681x1024.jpg 681w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><figcaption id=\"caption-attachment-16454\" class=\"wp-caption-text\">Nicole Sullivan<\/figcaption><\/figure>\n<p>Nicole Sullivan <a href=\"https:\/\/www.slideshare.net\/stubbornella\/object-oriented-css\/\">first introduced the concept of Object Oriented CSS back in 2009<\/a>. Her insight and analysis of existing enterprise methods for writing CSS established a larger conversation, which many of the preceding methods stemmed from, and extended on.<\/p>\n<p>The gist of the concept for OOCSS was the idea of marrying traditional object oriented programming methods with CSS. Whereas, objects are merely referring to HTML elements.<\/p>\n<p>The two main tenets of OOCSS are:<\/p>\n<h4>Separate structure from skin<\/h4>\n<p>Essentially, this means to abstract the structure and positioning styles of an object from the presentational styles, or skin.<\/p>\n<h4>Separate container from content<\/h4>\n<p>This means to break components\u2019 dependency of their containers. Any object should be able to be placed in another container and still look and behave the same.<\/p>\n<h3><a href=\"http:\/\/getbem.com\/\">Block Element Modifier<\/a> (BEM)<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"16452\" data-permalink=\"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/cap-bem\/\" data-orig-file=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/cap-bem.png\" data-orig-size=\"945,540\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"cap-bem\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/cap-bem.png\" class=\"alignright wp-image-16452 size-medium\" src=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/cap-bem-300x171.png\" alt=\"\" width=\"300\" height=\"171\" srcset=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/cap-bem-300x171.png 300w, https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/cap-bem-768x439.png 768w, https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/cap-bem-105x60.png 105w, https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/cap-bem.png 945w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><br \/>\nThe Block Element Modifier (BEM) method was developed by Yandex. BEM offers a strict means to class naming in your CSS in order to purpose them as reusable modules.<\/p>\n<ul>\n<li><strong>Block<\/strong> &#8211; Standalone entity that is meaningful on its own. Examples: <code>header<\/code>, <code>container<\/code>, <code>menu<\/code><\/li>\n<li><strong>Element<\/strong> &#8211; A part of a block that has no standalone meaning and is semantically tied to its block. Examples: <code>menu item<\/code>, <code>list item<\/code>, <code>checkbox caption<\/code><\/li>\n<li><strong>Modifier<\/strong> &#8211; A flag on a block or element. Use them to change appearance or behavior. Examples: <code>disabled<\/code>, <code>highlighted<\/code>, <code>checked<\/code><\/li>\n<\/ul>\n<p>Using a button as an example we might use BEM to write our classes like this:<\/p>\n\n<p>BEM has a lot more documentation and I encourage you to dig in at <a href=\"http:\/\/getbem.com\/\">GetBem.com<\/a>.<\/p>\n<h3><a href=\"https:\/\/smacss.com\/\">Scalable and Modular Architecture for CSS<\/a> (SMACSS)<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"16455\" data-permalink=\"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/smacss-book-covers\/\" data-orig-file=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/SMACSS-book-covers.png\" data-orig-size=\"247,328\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"SMACSS-book-covers\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/SMACSS-book-covers.png\" class=\"alignright size-full wp-image-16455\" src=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/SMACSS-book-covers.png\" alt=\"\" width=\"247\" height=\"328\" srcset=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/SMACSS-book-covers.png 247w, https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/SMACSS-book-covers-226x300.png 226w, https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/SMACSS-book-covers-45x60.png 45w\" sizes=\"auto, (max-width: 247px) 100vw, 247px\" \/>SMACSS is a framework developed by <a href=\"http:\/\/snook.ca\/\">Jonathan Snook<\/a>. Snook <a href=\"https:\/\/smacss.com\/\">prefers to classify SMACSS<\/a> as &#8220;more style guide than rigid framework.&#8221;<\/p>\n<p>SMACSS is mostly based on five categories:<\/p>\n<ul>\n<li><strong>Base<\/strong> rules &#8211; Target basic elements only, and does not include classes or IDs. This often can include resets. Examples: <code>body<\/code>, <code>form<\/code>, <code>a<\/code>, <code>a:hover<\/code><\/li>\n<li><strong>Layout<\/strong> rules &#8211; These are further sub-classified as major and minor layout rules. Major layout styles typically target IDs and can affect things like the <code>header<\/code> or <code>footer<\/code>. Whereas, minor layout styles (aka Modules) are nested within major layout components, e.g. <code>nav<\/code>, or login <code>form<\/code><\/li>\n<li><strong>Module<\/strong> rules &#8211; A Module is a discreet component. As mentioned above an example is <code>nav<\/code> in a <code>header<\/code>. Modules can reside inside of other modules, but should be styled to stand alone. Typically avoid element and ID selectors, and make liberal use of child or descendant selectors where the use may be predictable.<\/li>\n<li><strong>State<\/strong> rules &#8211; Typically used to override or augment a Module or Layout&#8217;s rules when differentiating the different states (e.g. active, inactive, expanded, hidden).\u00a0These are prefixed with <code>is-<\/code>, e.g. <code>is-active<\/code>, <code>is-inactive<\/code>, <code>is-expanded<\/code>, <code>is-hidden<\/code><\/li>\n<li><strong>Theme<\/strong> rules &#8211; This is where you can set overrides on any of the above: Base, Layouts, Modules, States. Think of it as setting the chrome on your site, or Modules (aka skinning).<\/li>\n<\/ul>\n<p>SMACSS is not as opinionated as BEM in its class naming conventions. It has a similar approach to BEM in that it suggests you name your block&#8217;s child elements by using the parent block with a hyphen, e.g. <code>.pod<\/code>, <code>.pod-body<\/code><\/p>\n<h3>New Generation methodologies<\/h3>\n<p>Yes, I&#8217;m going to lump the following methodologies into what I&#8217;m calling: New Generation methodologies. I tried to cover most of the major milestone methodologies above, but there are many others that helped pave the way for exploration. However, in recent years there seems to have been a bit of underlying commonality between these New Generation methodologies: anti-monolithic, component-based, and single-purpose single property practices. Here are a few:<\/p>\n<h4><a href=\"https:\/\/acss.io\/\">Atomic CSS<\/a> (ACSS)<\/h4>\n<p>Atomic CSS is developed by Yahoo! Inc. Atomic CSS offers immutable, single property classes to emphasize their singular function. Whereas, monolithic styles often times rely on descendant and contextual selectors. Let&#8217;s look at an example of how we might markup Atomic CSS two column layout vs traditional methods.<\/p>\n\n<p>And here would be a comparison of the CSS used by Atomic CSS vs traditional method.<\/p>\n\n<p>The traditional example above is where we start to see how these methods can break down in large projects. Should a new requirement be introduced to the two-column component then often times there is more bloat introduced. Whereas, the complexity of rules and selectors become so coupled that it can cause confusion or anxiety on editing existing CSS, and instead, &#8220;We create new rules, rather than modify existing ones, because we are not sure the latter is 100% safe.&#8221; <sup>[<a href=\"https:\/\/www.smashingmagazine.com\/2013\/10\/challenging-css-best-practices-atomic-approach\/#the-path-to-bloat\">1<\/a>]<\/sup><\/p>\n<h4><a href=\"http:\/\/basscss.com\/\">Basscss<\/a> and <a href=\"http:\/\/tachyons.io\/\">Tachyons<\/a><\/h4>\n<p>These two libraries are so similar it is hard not to group them. They both use similar feature descriptions, like &#8220;composable&#8221;, &#8220;single purpose&#8221; classes. Both are framework agnostic, and ready to plug and play with React, Ember, Angular, Rails, Elm, static HTML, etc.<\/p>\n<p>Tachyons has seemingly become more popular. I speculate that it is because the documentation and resources are robust, and as of this writing the <a href=\"https:\/\/github.com\/tachyons-css\/tachyons\/graphs\/contributors\">number of Contributors<\/a> is double that of <a href=\"https:\/\/github.com\/basscss\/basscss\/graphs\/contributors\">Basscss on Github<\/a>. I plan on covering Tachyons in-depth in my next post.<\/p>\n<h3>Conclusion<\/h3>\n<p>I gave a terse overview of some key methodologies, but each one could easily have a post written on its own. I encourage you to dig deeper into any methods that resonate with you, and your current or next project&#8217;s needs.<\/p>\n<p>Stay tuned for the next post in this series: &#8220;Evolution of CSS: Overview of Tachyons.&#8221;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is Part II of a series called &#8220;Evolution of CSS&#8221;. Evolution of CSS: Becoming a CSS Composer Evolution of CSS: Class Naming Methodologies Evolution of CSS: Overview of\u00a0Tachyons Perhaps you&#8217;ve heard this one before? There are only two hard things in Computer Science: cache invalidation and naming things. &#8211; Phil Karlton Well, as any <a class=\"more-link\" href=\"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/\">Read More<span class=\"screen-reader-text\"> Evolution of CSS: Class Naming Methodologies<\/span><\/a><\/p>\n","protected":false},"author":36,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"jetpack_post_was_ever_published":false,"footnotes":""},"categories":[140],"tags":[167],"coauthors":[9917],"class_list":["post-16456","post","type-post","status-publish","format-standard","hentry","category-development","tag-css"],"acf":{"blog_hero_image":{"ID":15622,"id":15622,"title":"code-bg","filename":"code-bg.jpg","filesize":324677,"url":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg.jpg","link":"https:\/\/webdevstudios.com\/about\/history\/code-bg\/","alt":"","author":"13","description":"","caption":"","name":"code-bg","status":"inherit","uploaded_to":119,"date":"2017-02-14 02:45:11","modified":"2017-04-05 20:18:28","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/webdevstudios.com\/wp-includes\/images\/media\/default.png","width":1920,"height":1080,"sizes":{"thumbnail":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-150x150.jpg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-300x169.jpg","medium-width":300,"medium-height":169,"medium_large":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-768x432.jpg","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-1024x576.jpg","large-width":850,"large-height":478,"1536x1536":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-1536x864.jpg","1536x1536-width":1536,"1536x1536-height":864,"2048x2048":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg.jpg","2048x2048-width":1920,"2048x2048-height":1080,"featured-work-lg":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-436x511.jpg","featured-work-lg-width":436,"featured-work-lg-height":511,"featured-work-sm":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-436x241.jpg","featured-work-sm-width":436,"featured-work-sm-height":241,"book-cover":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-235x300.jpg","book-cover-width":235,"book-cover-height":300,"home-hero":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-1350x440.jpg","home-hero-width":1350,"home-hero-height":440,"services-screenshot":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-590x790.jpg","services-screenshot-width":590,"services-screenshot-height":790,"single-blog-featured":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-1920x625.jpg","single-blog-featured-width":1920,"single-blog-featured-height":625,"single-blog-inline":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-850x360.jpg","single-blog-inline-width":850,"single-blog-inline-height":360,"grid-image":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-420x420.jpg","grid-image-width":420,"grid-image-height":420,"logo-train":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-107x60.jpg","logo-train-width":107,"logo-train-height":60,"simple-header":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-1920x191.jpg","simple-header-width":1920,"simple-header-height":191,"full-width":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-1920x1080.jpg","full-width-width":1920,"full-width-height":1080,"fifty-fifty-media":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg-1300x731.jpg","fifty-fifty-media-width":1300,"fifty-fifty-media-height":731,"gform-image-choice-sm":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg.jpg","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":169,"gform-image-choice-md":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg.jpg","gform-image-choice-md-width":400,"gform-image-choice-md-height":225,"gform-image-choice-lg":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/01\/code-bg.jpg","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":338}},"background_choice":{"value":"null","label":"None"},"section_title_type":"h2","section_title_alignment":"left","section_title":""},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.5 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Evolution of CSS: Class Naming Methodologies - WebDevStudios<\/title>\n<meta name=\"description\" content=\"This is Part II of a series called &quot;Evolution of CSS&quot;. Evolution of CSS: Becoming a CSS Composer Evolution of CSS: Class Naming Methodologies Evolution of\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Evolution of CSS: Class Naming Methodologies\" \/>\n<meta property=\"og:description\" content=\"This is Part II of a series called &quot;Evolution of CSS&quot;. Evolution of CSS: Becoming a CSS Composer Evolution of CSS: Class Naming Methodologies Evolution of\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/\" \/>\n<meta property=\"og:site_name\" content=\"WebDevStudios\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/facebook.com\/webdevstudios\" \/>\n<meta property=\"article:published_time\" content=\"2017-03-28T16:00:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-15T16:01:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/nicole_sullivan-681x1024-200x300.jpg\" \/>\n<meta name=\"author\" content=\"Damon Cook\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webdevstudios\" \/>\n<meta name=\"twitter:site\" content=\"@webdevstudios\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Damon Cook\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2017\\\/03\\\/28\\\/evolution-css-class-naming-methodologies\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2017\\\/03\\\/28\\\/evolution-css-class-naming-methodologies\\\/\"},\"author\":{\"name\":\"Damon Cook\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#\\\/schema\\\/person\\\/8f67dd5746648916b45196038f9bc6d2\"},\"headline\":\"Evolution of CSS: Class Naming Methodologies\",\"datePublished\":\"2017-03-28T16:00:42+00:00\",\"dateModified\":\"2024-04-15T16:01:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2017\\\/03\\\/28\\\/evolution-css-class-naming-methodologies\\\/\"},\"wordCount\":1362,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2017\\\/03\\\/28\\\/evolution-css-class-naming-methodologies\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/webdevstudios.com\\\/wp-content\\\/uploads\\\/2017\\\/04\\\/nicole_sullivan-681x1024-200x300.jpg\",\"keywords\":[\"CSS\"],\"articleSection\":[\"Development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/webdevstudios.com\\\/2017\\\/03\\\/28\\\/evolution-css-class-naming-methodologies\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2017\\\/03\\\/28\\\/evolution-css-class-naming-methodologies\\\/\",\"url\":\"https:\\\/\\\/webdevstudios.com\\\/2017\\\/03\\\/28\\\/evolution-css-class-naming-methodologies\\\/\",\"name\":\"Evolution of CSS: Class Naming Methodologies - WebDevStudios\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2017\\\/03\\\/28\\\/evolution-css-class-naming-methodologies\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2017\\\/03\\\/28\\\/evolution-css-class-naming-methodologies\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/webdevstudios.com\\\/wp-content\\\/uploads\\\/2017\\\/04\\\/nicole_sullivan-681x1024-200x300.jpg\",\"datePublished\":\"2017-03-28T16:00:42+00:00\",\"dateModified\":\"2024-04-15T16:01:23+00:00\",\"description\":\"This is Part II of a series called \\\"Evolution of CSS\\\". Evolution of CSS: Becoming a CSS Composer Evolution of CSS: Class Naming Methodologies Evolution of\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2017\\\/03\\\/28\\\/evolution-css-class-naming-methodologies\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/webdevstudios.com\\\/2017\\\/03\\\/28\\\/evolution-css-class-naming-methodologies\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2017\\\/03\\\/28\\\/evolution-css-class-naming-methodologies\\\/#primaryimage\",\"url\":\"https:\\\/\\\/webdevstudios.com\\\/wp-content\\\/uploads\\\/2017\\\/04\\\/nicole_sullivan-681x1024.jpg\",\"contentUrl\":\"https:\\\/\\\/webdevstudios.com\\\/wp-content\\\/uploads\\\/2017\\\/04\\\/nicole_sullivan-681x1024.jpg\",\"width\":681,\"height\":1024,\"caption\":\"Nicole Sullivan\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2017\\\/03\\\/28\\\/evolution-css-class-naming-methodologies\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/webdevstudios.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Evolution of CSS: Class Naming Methodologies\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#website\",\"url\":\"https:\\\/\\\/webdevstudios.com\\\/\",\"name\":\"WebDevStudios\",\"description\":\"WordPress Design and Development Agency\",\"publisher\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/webdevstudios.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#organization\",\"name\":\"WebDevStudios\",\"url\":\"https:\\\/\\\/webdevstudios.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/webdevstudios.com\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/wds-amp-logo.png\",\"contentUrl\":\"https:\\\/\\\/webdevstudios.com\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/wds-amp-logo.png\",\"width\":173,\"height\":60,\"caption\":\"WebDevStudios\"},\"image\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"http:\\\/\\\/facebook.com\\\/webdevstudios\",\"https:\\\/\\\/x.com\\\/webdevstudios\",\"http:\\\/\\\/instagram.com\\\/webdevstudios\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/webdevstudios-llc-\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#\\\/schema\\\/person\\\/8f67dd5746648916b45196038f9bc6d2\",\"name\":\"Damon Cook\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e79b77f3db12185ca369cc8af09f6e8e2f8134b5cbc16e6821626b4bba21df8c?s=96&d=mm&r=g27d0eb3cd4b6a91ac1fe88734aacc228\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e79b77f3db12185ca369cc8af09f6e8e2f8134b5cbc16e6821626b4bba21df8c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e79b77f3db12185ca369cc8af09f6e8e2f8134b5cbc16e6821626b4bba21df8c?s=96&d=mm&r=g\",\"caption\":\"Damon Cook\"},\"url\":\"https:\\\/\\\/webdevstudios.com\\\/author\\\/damon\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Evolution of CSS: Class Naming Methodologies - WebDevStudios","description":"This is Part II of a series called \"Evolution of CSS\". Evolution of CSS: Becoming a CSS Composer Evolution of CSS: Class Naming Methodologies Evolution of","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/","og_locale":"en_US","og_type":"article","og_title":"Evolution of CSS: Class Naming Methodologies","og_description":"This is Part II of a series called \"Evolution of CSS\". Evolution of CSS: Becoming a CSS Composer Evolution of CSS: Class Naming Methodologies Evolution of","og_url":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/","og_site_name":"WebDevStudios","article_publisher":"http:\/\/facebook.com\/webdevstudios","article_published_time":"2017-03-28T16:00:42+00:00","article_modified_time":"2024-04-15T16:01:23+00:00","og_image":[{"url":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/nicole_sullivan-681x1024-200x300.jpg","type":"","width":"","height":""}],"author":"Damon Cook","twitter_card":"summary_large_image","twitter_creator":"@webdevstudios","twitter_site":"@webdevstudios","twitter_misc":{"Written by":"Damon Cook","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/#article","isPartOf":{"@id":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/"},"author":{"name":"Damon Cook","@id":"https:\/\/webdevstudios.com\/#\/schema\/person\/8f67dd5746648916b45196038f9bc6d2"},"headline":"Evolution of CSS: Class Naming Methodologies","datePublished":"2017-03-28T16:00:42+00:00","dateModified":"2024-04-15T16:01:23+00:00","mainEntityOfPage":{"@id":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/"},"wordCount":1362,"commentCount":0,"publisher":{"@id":"https:\/\/webdevstudios.com\/#organization"},"image":{"@id":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/#primaryimage"},"thumbnailUrl":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/nicole_sullivan-681x1024-200x300.jpg","keywords":["CSS"],"articleSection":["Development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/","url":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/","name":"Evolution of CSS: Class Naming Methodologies - WebDevStudios","isPartOf":{"@id":"https:\/\/webdevstudios.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/#primaryimage"},"image":{"@id":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/#primaryimage"},"thumbnailUrl":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/nicole_sullivan-681x1024-200x300.jpg","datePublished":"2017-03-28T16:00:42+00:00","dateModified":"2024-04-15T16:01:23+00:00","description":"This is Part II of a series called \"Evolution of CSS\". Evolution of CSS: Becoming a CSS Composer Evolution of CSS: Class Naming Methodologies Evolution of","breadcrumb":{"@id":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/#primaryimage","url":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/nicole_sullivan-681x1024.jpg","contentUrl":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2017\/04\/nicole_sullivan-681x1024.jpg","width":681,"height":1024,"caption":"Nicole Sullivan"},{"@type":"BreadcrumbList","@id":"https:\/\/webdevstudios.com\/2017\/03\/28\/evolution-css-class-naming-methodologies\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webdevstudios.com\/"},{"@type":"ListItem","position":2,"name":"Evolution of CSS: Class Naming Methodologies"}]},{"@type":"WebSite","@id":"https:\/\/webdevstudios.com\/#website","url":"https:\/\/webdevstudios.com\/","name":"WebDevStudios","description":"WordPress Design and Development Agency","publisher":{"@id":"https:\/\/webdevstudios.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webdevstudios.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webdevstudios.com\/#organization","name":"WebDevStudios","url":"https:\/\/webdevstudios.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webdevstudios.com\/#\/schema\/logo\/image\/","url":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2019\/07\/wds-amp-logo.png","contentUrl":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2019\/07\/wds-amp-logo.png","width":173,"height":60,"caption":"WebDevStudios"},"image":{"@id":"https:\/\/webdevstudios.com\/#\/schema\/logo\/image\/"},"sameAs":["http:\/\/facebook.com\/webdevstudios","https:\/\/x.com\/webdevstudios","http:\/\/instagram.com\/webdevstudios","https:\/\/www.linkedin.com\/company\/webdevstudios-llc-\/"]},{"@type":"Person","@id":"https:\/\/webdevstudios.com\/#\/schema\/person\/8f67dd5746648916b45196038f9bc6d2","name":"Damon Cook","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/e79b77f3db12185ca369cc8af09f6e8e2f8134b5cbc16e6821626b4bba21df8c?s=96&d=mm&r=g27d0eb3cd4b6a91ac1fe88734aacc228","url":"https:\/\/secure.gravatar.com\/avatar\/e79b77f3db12185ca369cc8af09f6e8e2f8134b5cbc16e6821626b4bba21df8c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e79b77f3db12185ca369cc8af09f6e8e2f8134b5cbc16e6821626b4bba21df8c?s=96&d=mm&r=g","caption":"Damon Cook"},"url":"https:\/\/webdevstudios.com\/author\/damon\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3WX6u-4hq","amp_enabled":true,"_links":{"self":[{"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/posts\/16456","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/comments?post=16456"}],"version-history":[{"count":0,"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/posts\/16456\/revisions"}],"wp:attachment":[{"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/media?parent=16456"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/categories?post=16456"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/tags?post=16456"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/coauthors?post=16456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}