CSS gone wild - how to stop a style from going too far


Tags: css

Problem :

Is there any way in CSS to put a limit on how far something will cascade?

I'm running into a situation where my CSS is just going out of control because of how many classes I have to make, because of inheritence. For instance..

.menu a:hover {
   background : #XXXXXX;
}

<div class="menu">
   <a href="#">Hyperlink</a>
   <ul>
      <li><a href="#">Another Hyperlink</a></li>
   </ul>
</div>

Now, Another Hyperlink inherits the same style. Now I have two options... I can change my .menu implementation to this..

.menu > a:hover {
   // ...
}

Which makes only the top-level anchor elements effected. But this isn't always what I want. Usually, In a lot of cases, I end up having to write more specialized styles for deeper down in various hierarchies.

In this one instance, I know the solution, but what about more complicated scenarios? I've got a really bad case of "CSS Gone Wild". I have over 20 .css files now, and while they are well organized and planned out, it's just so much to handle. Is that normal? Do most huge websites have that many css styles to deal with?



Solution :

Have you looked into Sass or Less? These are basically supersets of CSS syntax (so your existing css still works) that allow you to better organize your css code through mixins, variables, nesting, etc. They output plain css, but can often do a better job than you might by hand of having minimal amounts of duplication etc. It also results in much smaller source files.

As other have said, for highest efficiency, there are more factors than just amount of css. Number of http requests is one - there should be as few files as possible actually getting fetched, even if you just concat them as part of the build process. Also remember that not all CSS rules are created equal. Different selectors have different costs, and the more selectors you combine the less efficient it is. Efficiency-wise its better to have more rules that have more efficient selectors. Here are some good tips explaining efficiency of css selectors.


    CSS Howto..

    How do I do image color blend in css?

    How to uncover an image with css and jQuery

    How do i put text under an img icon in a menu?

    Chrome showing target link after event has been prevented

    How to center absolutely positioned elements in css for a pdf

    How to put a background image on a site

    On textbox focus, how can you change the background color of the element prior to it with only CSS?

    How to display a div forcefully

    How to change the included CSS files on button click?

    How to add and remove a current state to a link when another is clicked using jQuery

    How to make a double color single border using css?

    How to position heading (h1) placed on a background image and centered according to it outside of its container

    How to make a html div vertically scrollable after it's height reaches 100% height of the page?

    How to center images vertically these divs?

    How to create text block over the images with css and make it responsive

    How to hide div on swipe in Angular

    How does tablesort.js create the sort indicator arrows

    nth-of-type css, how to setup it properly

    How to customized select element through css?

    How to make all Contact 7 Fields the same size?

    How to get rid of space between buttons and content/paragraph? (CSS)

    how to center text vertically in html using css only

    Show button after login

    How does one load a CSS framework in Rails 3.1?

    how to get double border in using CSS?

    JavaFX: How not to fill background outside the rounded borders of a Label within a ScrollingPane

    Only Lower Half Of The Border Is Shown

    How to Make a materialize CSS button's width same as col s12?

    How can I use d3.js filter to assign different css classes to elements?

    How to use #resource in CSS?