46

CSS newby here...

I'm looking at a responsive framework and imagining how I would accomplish different tasks.

Based on the size of the screen, they have classes added to the body tag such as:

.PhoneVisible, .DesktopVisible, etc...

They also have classes to make links into buttons :

.btn, small-button, med-button, large-button

I'm puzzled on how you would go about changing your CSS. I.E. something like:

    <a href="#" class="MyButtonOptions">XXXX</>

    .PhoneVisible .MyButtonOptions { btn small-button }
    .TabletVisible  .MyButtonOptions { btn  med-button }
    .DesktopVisible .MyButtonOptions { btn large-button }

Do you have to set the varying options individually?

i.e. .PhoneVisible .MyButtonOptions { height:30px; } ?

All advice appreciated!

4
  • there are css frameworks for that, that's mix of CSS and javascript to acomplish it, I use Twitter Bootstrap but there are many more. Just google it. Commented Aug 27, 2013 at 23:23
  • why not just use media queries? Commented Aug 27, 2013 at 23:36
  • Take a look at this question: stackoverflow.com/questions/13015719/… Commented Aug 27, 2013 at 23:39
  • 5
    Upvote for admitting you are a nob Commented Sep 19, 2016 at 9:58

3 Answers 3

70

CSS Media Queries are definetly the way to go.

You can easily separate your CSS based upon the browser size, pixel density, etc.

Here's a list of examples from CSS-Tricks.

/* Smartphones (portrait and landscape) ----------- */
@media only screen 
and (min-device-width : 320px) 
and (max-device-width : 480px) {
    /* Styles */
}

/* Smartphones (landscape) ----------- */
@media only screen 
and (min-width : 321px) {
    /* Styles */
}

/* Smartphones (portrait) ----------- */
@media only screen 
and (max-width : 320px) {
    /* Styles */
}

/* iPads (portrait and landscape) ----------- */
@media only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) {
    /* Styles */
}

/* iPads (landscape) ----------- */
@media only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) 
and (orientation : landscape) {
    /* Styles */
}

/* iPads (portrait) ----------- */
@media only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) 
and (orientation : portrait) {
    /* Styles */
}

/* Desktops and laptops ----------- */
@media only screen 
and (min-width : 1224px) {
    /* Styles */
}

/* Large screens ----------- */
@media only screen 
and (min-width : 1824px) {
    /* Styles */
}

/* iPhone 4 ----------- */
@media
only screen and (-webkit-min-device-pixel-ratio : 1.5),
only screen and (min-device-pixel-ratio : 1.5) {
    /* Styles */
}
Sign up to request clarification or add additional context in comments.

1 Comment

This is great advice for switching styles, but not classes
24

Take a look at this https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Media_queries.

Another way is to attach the resize event some piece of "switch code".

Something like this: http://jsfiddle.net/s5dvb/

HTML

<div id="body" class="limit400">
    <h1>Hey :D</h1>
</div>

CSS

.limit400 h1 { font-size:10px; }
.limit1200 h1 { font-size:50px; }

JS

$(window).on('resize', function() {
    if($(window).height() > 400) {
        $('#body').addClass('limit1200');
        $('#body').removeClass('limit400');
    }else{
        $('#body').addClass('limit400');
        $('#body').removeClass('limit1200');
    }
})

About the frameworks, try http://purecss.io/ or http://getbootstrap.com/

Hope it helps.

2 Comments

Thanks for the code snippets! Just scratching my head trying to figure out how most people do this sort of thing. I'm looking at bootstrap, and they already have a boatload of media queries to manage the layout. Seems like I either have to make multiple controls and hide/show based on size, or do some javascript. As I don't deal much in css, guess I was hoping there was another way ;)
not sure how media queries can help.
1

Like Nej Kutcharian posted, you can use the above approach and just to relate it back to the class scenario. Rather than switching class you use the same class and change the styling it applies depending on the size of the screen.

As shown below, any element with the class "adjust-me-based-on-size" will have a margin-left and margin-right with differing values depending on the media size, so default is 15% but if the screen is between 800 and 1200 (px) it will have 10% instead and less 800px will have no right margin and a left margin of 5%.

.adjust-me-based-on-size{
  margin-left: 15%;
  margin-right: 15%;
}
@media only screen and (min-width: 800) and (max-width: 1200) {
  .adjust-me-based-on-size {

    margin-left: 10%;
    margin-right: 10%;
  }
}
@media only screen and (max-width: 800px) {
  .adjust-me-based-on-size {
    margin-left: 5%;
    margin-right: 0%;
  }
}

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.