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

@hackandcraft/css-framework

v7.1.1

Published

A starting point to customise Angular Material sytles, for Hack&Craft projects

Downloads

246

Readme

CSS Framework

Hack&Craft uses Material Design as a design language on their projects, in conjunction with the Angular Material library.

Angular Material library only provides color theming (no theming for font-size, font-weight, line-height, spacing…), so Angular Material theming is not enough.

This is why we created this CSS Framework, a starting point to customise Angular Material sytles for Hack&Craft projects.

Related resources:

Requirements

  • npm
  • Angular
  • Angular Material library

Install

  1. Install CSS Framework package from your Angular project:
$ npm install @hackandcraft/css-framework
  1. And then install your theme of choice(1):
$ npm install @hackandcraft/theme-dulux

Start the Pattern Library

In order to see the components page with the current themes available ("Pattern Library" from now on)(2), just run this from the "hackandcraft-ng" repo:

$ ng serve

And then access the Pattern Library in: http://localhost:4200/css-framework

How to create new themes

By default, agnostic theme settings comes out of the box with the framework. These are just "default" styles, not used in any client project.

To create a new client theme, follow these steps:

  1. Create a new theme directory and the corresponding "_settings.scss" file –with specific Sass variables– in "hackandcraft-ng/projects", overriding default theme settings (i.e. "hackandcraft-ng/projects/theme-name/scss/_settings.scss").
  2. Edit the "_theme.scss" file in the project root, adding your new theme imports (i.e. "theme-name"):
@import "~@angular/material/prebuilt-themes/indigo-pink.css";
@import "../projects/css-framework/scss/settings";

#css-framework {
  @import "../projects/css-framework/scss/main.scss";

  &.theme-name {
    @import "../projects/theme-name/scss/settings";
    @import "../projects/css-framework/scss/main.scss";
  }

  &.another-theme-name {
    @import "../projects/another-theme-name/scss/settings";
    @import "../projects/css-framework/scss/main.scss";
  }

  // more themes...
}
  1. Add some Sass variables in your "hackandcraft-ng/projects/theme-name/scss/_settings.scss" file, to fit your client styles.
  2. Add your new theme in "test-css-framework.component.ts" file, in order to make the theme available from the Pattern Library:
themes: Theme[] = [
  { title: "Default theme", class: "theme-default" },
  { title: "Akzo Nobel", class: "theme-akzo-nobel" },
  { title: "Dulux theme", class: "theme-dulux" },
  { title: "Name theme", class: "theme-name" },
  // more themes...
];
  1. Once you're done, your "@hackandcraft/theme-name" can be published as npm package.

Publish

CSS Framework and client themes are published as npm packages.

Some examples:

Using Sass settings

  • Use of !default flag in Sass variables is only necessary for the CSS Framework default/agnostic theme settings, so there's no need to use it in your "theme-name/_settings.scss" file.
  • If a variable is declared in your theme and assigned to another variable in the same file (known as "variable mapping"), the very last variable must be defined as well in order to work. Example:

In "../projects/css-framework/scss/settings"...

$fz-small: 14px !default;
$button-fz: $fz-small !default; // 14px

In "theme-name/_settings.scss"...

This won't work as expected:

$fz-small: 12px;
// $button-fz value is 14px :(

This will work:

$fz-small: 12px;
$button-fz: $fz-small; // $button-fz value is 12px :)

Important: Keep this in mind to avoid unexpected results in your theme.

Modifier classes

Some Angular Material components has been extended with BEM(3) modifier classes (i.e. dialog sizes).

To use different dialog sizes, add a cdk-overlay-pane--small or cdk-overlay-pane--large modifier class to the cdk-overlay-pane element, with JS.

Small:

<div id="cdk-overlay-0" class="cdk-overlay-pane cdk-overlay-pane--small">
  ...
</div>

Medium (default):

<div id="cdk-overlay-0" class="cdk-overlay-pane">...</div>

Large:

<div id="cdk-overlay-0" class="cdk-overlay-pane cdk-overlay-pane--large">
  ...
</div>

Fonts and icons

Fonts used in the Pattern Library won't be propagated to themes, so you must import your fonts of choice in your project choosing one of these methods:

Setup Method 1. Using via Google Web Fonts

The easiest way to set up fonts for use in any web page is through Google Web Fonts. All you need to do is include a single line of HTML:

<link
  href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700,800&display=swap"
  rel="stylesheet"
/>

Same thing applies to Material Icons font, if you plan to use icons:

<link
  href="https://fonts.googleapis.com/icon?family=Material+Icons"
  rel="stylesheet"
/>

Setup Method 2. Self hosting

For those looking to self host the web font, some additional setup is necessary. Host the font in a location, for example "your-project/src/assets/fonts", and add the proper CSS rules(4).

The easiest way to go is to create a "fonts.scss" in your "your-project/src/" folder.

Example (in "fonts.scss"):

@font-face {
  font-family: "colour_sansregular";
  src: url($fonts-path+"colour_sans-regularWEB.eot");
  src: url($fonts-path+"colour_sans-regularWEB.eot?#iefix") format("embedded-opentype"),
    url($fonts-path+"colour_sans-regularWEB.woff") format("woff"),
    url($fonts-path+"colour_sans-regularWEB.ttf") format("truetype"), url($fonts-path+"colour_sans-regularWEB.svg#colour_sansregular")
      format("svg");
  font-weight: normal;
  font-style: normal;
}

And then use the font like this:

font-family: "colour_sansregular", Arial, sans-serif;

Don't forget to edit your "angular.json" file, referencing your "fonts.scss" file:

"styles": [
  "src/styles.scss",
  "src/fonts.scss"
],

Other resources


(1) If no theme is installed you'll get default/agnostic theme settings.

(2) In order to see the styles properly, id="css-framework" and class="theme-name" has been added to the <html> tag in the Pattern Library page.

(3) Notice how we're using BEM for CSS class names, so please refer to our Frontend Style Guide > CSS / Sass Style Guide for more details.

(4) More info in Material Icons Guide > Icon font for the web.