Skip to content

Structured CSS via @import and pre-processor #36

@gasolin

Description

@gasolin

for case like https://github.com/mozilla-b2g/Gaia-UI-Building-Blocks/blob/v2/style/headers.css

ex:

headers.css

/* headers.css */
@import url("headers/layout.css");
@import url("headers/layout_mobile.css");
@import url("headers/layout_tablet.css");

The PROS:

  • clean structured
  • follow CSS standard
  • developer does not have to include extra styles if we support more form factors

The CONS:

  • will introduce performance issue in production

Fortunately we can fix it by use pre-processor to detect @import statement and inline the css files in production.

There are some script like https://github.com/simme/rework-importer can interpret and inline all @import css into single file.

With pre-processor, the basic css file will be inlined to single header.css file

/* headers.css */
headers {
}
/* mobile style */
headers .mobile {
}
/* tablet style */
@media (min-width: 768px) and (orientation: portrait) {
  headers {
  }
}

And we can pass some conditions for production mode, for example: pass mobile type to the build system, pre-processor could pick layout.css and layout_mobile.css but ignore layout_tablet.css, generate an inline header.css.

The PROS:

  • previous PROS
  • reduce size
  • better performance by move out unnecessary styles

The CONS:

  • need enhance the pre-processor to make it possible

@rnowm does this proposal reasonable or useful for Building-Blocks?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions