Skip to content

Instantly share code, notes, and snippets.

@usaphp
Created July 1, 2014 12:33
Show Gist options
  • Star 33 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save usaphp/42133e78aa5f8f760a3f to your computer and use it in GitHub Desktop.
Save usaphp/42133e78aa5f8f760a3f to your computer and use it in GitHub Desktop.
// HTML:
<div class="display-type"></div>
// CSS:
// set the content of an element depending on the media query
@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
.display-type {
content: "tablet";
}
}
@media (max-width: @screen-xs-max) {
.display-type {
content: "phone";
}
}
// JAVASCRIPT
if($('.display-type').css('content') == "tablet"){
// Actions for tablets
}
if($('.display-type').css('content') == "phone"){
// Actions for smartphones
}
@jeremenichelli
Copy link

Nice, I've used this approach. Also, the content checking should be place inside a resize listener function in case of resizing. Some tablets can have mobile layouts on portrait and tablet layouts on landscape.

@schierbeck
Copy link

This is how I work with it in Sass. I like keeping media queries inside the element instead of the other way around. It is also nice to not have to have an extra html element imho. :-)

body:after {
    opacity: 0;
    position: fixed;
    content: "xs";

    @media (min-width: $screen-sm) {
        content: "sm";
    }
    @media (min-width: $screen-md) {
        content: "md";
    }
    @media (min-width: $screen-lg) {
        content: "lg";
    }
}

@murum
Copy link

murum commented Jul 5, 2014

I saw jeremenicheills comment and why not work with the code something like this? I think it is slightly more structured, little bit more code but can be used multiple times without doing tons of DOM search for the class display-type etc.

// JAVASCRIPT
$(function() {
    var displayType = function() {
        return $('.display-type').css('content');
    }

    var display = displayType();
    $(window).on('resize', function() {
        display = displayType();
    })

    if(display == "tablet"){
      // Actions for tablets
    }

    if(display == "phone"){
      // Actions for smartphones
    }
});

@vilmosioo
Copy link

@murum I'm afraid your code does not have any DOM access improvements. You should consider saving the element in a variable. :) Also, debounce your resize handler.
My 0.02

@vilmosioo
Copy link

Awesome technique!

@breakerfall
Copy link

Jeremy Keith wrote a bit about this technique too, back in the day

http://adactio.com/journal/5429/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment