npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

layoutmode

v0.0.5

Published

Library that allows organizing CSS rules for different loayout modes

Downloads

13

Readme

LayoutMode

LayoutMode helpes to organize CSS rules for resposive website.

NPM version Downloads

Introduction

LayoutMode allows CSS rules to be organized into modes which are in turned controlled by media query. In the nute shell, LM decouple media query and the CSS rules. With LM, media queries can be created to select named modes. The modes are, then, translated to classes of body element. The actualy style CSS rules can then be tided to the modes of the body.

Before

{MediaQuery} ==> {CSS rules}

With LM

{MediaQuery} ==> {modes (body.mode-XXX)} ==> {CSS rules}

As the mode appears the class on the body element, you can use that as a qualifier to style anything under body ... and that is everything.

You can also have multiple mode at the same time as they are independent. For example, you may have 'compact' and 'spacious' for different resoluation and also have 'normal-contrast' and 'high-contrast' for font size and color scheme. Then at one time, the mode might be ['spacious', 'high-contrast'].

DEMO

Try the above out here Live demo on jsFiddle

How to use

First you need to include the library to your page. See below for CDN or NPM options.

Initiate the modes using the name you think reperesenting the look you want and it can be use in both conversation and code.

<script src='layout-mode.min.js'>
...
var layoutMode = LayoutMode.init(['mobile', 'desktop', 'ie'])

You can specify the default mode (the mode that is not subject to any media query) using ...

body > .css-layout-mode-selector > div.mode-mobile {
    display: block;
}

The following code will cause the mode to change to desktop mode when the width is 800px or wider

@media(min-width: 800px) {
    body > .css-layout-mode-selector > div.mode-mobile { display: none; }
    body > .css-layout-mode-selector > div.mode-desktop { display: block; }
}

That is when the page is 800px or narrower the body element will have 'mode-mobile' class and it will have 'mode-desktop' class when the page is wider than 800px.

Why use LayoutMode

Mode names represent intentions

Each mode has a name associated with it. This is far different from having to interpret the media queries and the CSS rules. The team members can use the name to communication. The names such as 'mobile', 'desktop', 'reader' modes directly communicate what sort of look you are trying to achieve.

Jack: Jill, I think the header text has too much padding on my phone, can you fix that.

Jill: One second.

bode.mode-mobile h1 {
    padding: 0px;
}

Jill: Done!

Current mode

You can check exactly what the current mode is.

Adam: Why?! Why the menu bar still appear, the screen is very narrow already. It should change to hidden by now with this width.

Ben: Why don't you check what is the current mode is.

Adam: Right, let me open the developer tool

console.log(layoutMode.currentModes())

Adam: Umm. It is the right mode. Why the menu is not ... Oh wait .. I spell 'position' wrong on this rule.

With one more line of code, you can also tell LayoutMode to display the current mode.

<link rel="stylesheet" type="text/css" href="layout-mode.min.css">

By default, with the above mode, the current mode name is shown on the left-buttom corner of the screen.

Notify when mode change

You can ask LayoutMode to notify when the mode has changed. This is useful if you need to programmatically do something when mode change from one to another.

layoutMode.watch(function(modes) {
    console.log(modes)
})

Decouple MediaQuery and CSS Rules

Putting the mode in between, the media queries decoupled from the rules. That means you do not need to make the media to fit the query to see the effect of the rules. You can ask LayoutMode to change the mode programmatically.

layoutMode.changeModes(['compact'])

with above mode, media queries are detached from the modes and only response to programatically change of modes. To re-attach the media query to the mode, use clearModes.

layoutMode.clearModes()

Separation of works

A team member can be given responsibility to ensure the proper media queries for selecting modes. Other team members can also work independently on different modes. With the names clearly spell out on the rules, it is harder to step on each other's toes. You can even go further and separate css files for each modes.

NPM

npm install layoutmode

CDN

Non-Minified

  • https://cdn.rawgit.com/NawaMan/LayoutMode/master/layout-mode.js
  • https://cdn.rawgit.com/NawaMan/LayoutMode/master/layout-mode.css

Minifie

  • https://cdn.rawgit.com/NawaMan/LayoutMode/master/layout-mode.min.js
  • https://cdn.rawgit.com/NawaMan/LayoutMode/master/layout-mode.min.css

Links

GitHub

https://github.com/NawaMan/LayoutMode

GitHub Page

https://nawaman.github.io/LayoutMode/

NPM page

https://www.npmjs.com/package/layoutmode

DEMO

https://jsfiddle.net/wnf9e968/14/