{"id":42909156,"url":"https://github.com/niant/once","last_synced_at":"2026-01-30T16:54:54.859Z","repository":{"id":14946556,"uuid":"17671177","full_name":"niant/once","owner":"niant","description":"Once CSS library","archived":false,"fork":false,"pushed_at":"2022-12-07T07:04:44.000Z","size":682,"stargazers_count":9,"open_issues_count":16,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-08-16T18:02:09.733Z","etag":null,"topics":["css","css-library","scss"],"latest_commit_sha":null,"homepage":"","language":"SCSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"delta98/ionic-material-design-lite","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/niant.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-03-12T15:09:11.000Z","updated_at":"2022-10-14T14:22:14.000Z","dependencies_parsed_at":"2023-01-11T20:19:14.758Z","dependency_job_id":null,"html_url":"https://github.com/niant/once","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/niant/once","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niant%2Fonce","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niant%2Fonce/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niant%2Fonce/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niant%2Fonce/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/niant","download_url":"https://codeload.github.com/niant/once/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niant%2Fonce/sbom","scorecard":{"id":684233,"data":{"date":"2025-08-11","repo":{"name":"github.com/niant/once","commit":"a5960507d1b64c7f2a6d91317c2e6a141189cc49"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.3,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/25 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 7 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"19 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-897m-rjf5-jp39","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-4gmj-3p3h-gm8h","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-566m-qj78-rww5","Warn: Project is vulnerable to: GHSA-hwj9-h5mp-3pm3","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T00:13:07.676Z","repository_id":14946556,"created_at":"2025-08-22T00:13:07.676Z","updated_at":"2025-08-22T00:13:07.676Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28915941,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T16:37:38.804Z","status":"ssl_error","status_checked_at":"2026-01-30T16:37:37.878Z","response_time":66,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["css","css-library","scss"],"created_at":"2026-01-30T16:54:54.003Z","updated_at":"2026-01-30T16:54:54.846Z","avatar_url":"https://github.com/niant.png","language":"SCSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Once CSS library\n\n__Future development of this library has been ended. See if [Tailwind CSS](https://tailwindcss.com/) library answers your needs__\n\n[![Build Status](https://travis-ci.org/niant/once.png?branch=master)](https://travis-ci.org/niant/once) [![devDependency Status](https://david-dm.org/niant/once/dev-status.svg?theme=shields.io)](https://david-dm.org/niant/once#info=devDependencies)\n\nOnce CSS/SASS library solves the headache of repetitive CSS. We have adopted best practices from OOCSS and atomic/functional CSS. The goal is to write the basic widely used classes once for everyone to use and not repeat yourself. Basically one class does one specific job but can do multiple CSS properties.\n\n## Documentation\n\n### Install\n\n```npm install once-css```\n\nOr just download a release [(https://github.com/niant/once/releases)](https://github.com/niant/once/releases)\n\n**CSS usage**\n\nImport either css/main.css or css/main.min.css to your project\n\n**SASS usage**\n\nImport .scss files you need from sass/ directory in your projects SCSS. If you like to use all the features - you can import sass/main.scss or copy content from sass/main.scss into your project.\n\n### Naming policies \n\n#### Class prefixes\n\n* P = Padding\n* M = Margin\n* B = Border\n* f = Font/typography\n* o = Overflow\n* a = Animation\n* c = Color (e.g. c-white)\n* bg = Background (e.g. bg-c-white)\n* r = Reactive classes (e.g. r-sm-left)\n\n#### Size pre/postfixes\n\n* ```xs, sm, md, lg, xl``` = Responsive classes ```xs-12 md-10 lg-6```\n\n#### Direction abbreviation\n\n* t: (top)\n* r: (right)\n* e: (end - right)\n* b: (bottom)\n* l: (left)\n* s: (start - left)\n* x: (left, right)\n* y: (top, bottom)\n* (empty): (top, right, bottom, left)\n\n#### Other naming policies\n\n``` [property][direction]-[feature]-[value]_[attribute] ```\n\n* Uppercase prefix characters if it has direction\n* 0 = Make element property size of zero ```.Mt-0 { margin-top:0; }```\n* Reactive/responsive classes have a prefix of reactive breakpoint ```r-xs-, r-sm-, r-md-, r-lg, r-xl- ```\n\n#### Examples of elements\n\n```sass\n.Pt-xs {\n  padding-top: 0.5em;\n}\n\n.B-sm {\n  border-top: 1em;\n  border-right: 1em;\n  border-bottom: 1em;\n  border-left: 1em;\n}\n\n@media (min-width: 480px) {\n  .r-sm-left {\n    float: left;\n  }\n}\n```\n\n#### Examples of HTML with multiple classes\n\n```html\n\u003c!-- Option 1: sizes with xs, sm, md, lg, xl --\u003e\n\u003cdiv class=\"left P-md B-xs r-md-right\"\u003e\n    \u003ch4 class=\"f-gamma My-md\"\u003eExample\u003c/h4\u003e\n    \u003cdiv class=\"Px-sm Pt-sm f-zeta r-md-Px-md r-md-Pt-md\"\u003eContent\u003c/div\u003e\n\u003c/div\u003e\n\n```\n\n### Functions \u0026 Mixins\n\n#### ```@function multipleDefinitions($selectorScheme, $selectorNamesAndPropertyValues, $properties)```\n\nCreate multiple class definitions in a map. For example:\n\n\n```sass\nmultipleDefinitions('f-{key}', (sm: 0.7em, md: 1.2em, lg: 2.5em), ('font-size'));\n\n/*\n(\n  f-sm: (font-size: 0.7em),\n  f-md: (font-size: 1.2em),\n  f-lg: (font-size: 2.5em)\n)\n */\n```\n\n#### ```@function directionalDefinitions($selectorScheme, $selectorKeysAndPropertyValues, $cssProperties, $_dirs: $dirs)```\n\nCreate multiple class definitions in a map (multiplied by directions and key/value map). For example:\n\n\n```sass\n$dirs: (t: (top), b: (bottom)); \n$sizes: (sm: 0.5em, md: 1em);\n\ndirectionalDefinitions(\n  'P{dirKey}-{key}', $sizes, ('padding-{dir}'), $dirs\n);\n\n/*\n(\n  Pt-sm: (padding-top: 0.5em),\n  Pb-sm: (padding-bottom: 0.5em),\n  Pt-md: (padding-top: 1em),\n  Pb-md: (padding-bottom: 1em)\n)\n */\n```\n\n\n## Changelog\n\n### v1.0.0\n\n* Changes from v0.4.0\n  * Replace str_replace function to support strings better (new node-sass and Dart Sass)\n  * Change compiler from node-sass into Dart Sass\n  * Update development dependencies\n  * Drop support for older Node.js versions (14.0.0 is minimum version supported)\n\n### v0.4.0\n\n* New features\n  * _theme-base.scss includes c-{key}_active and bg-c-{key}_active colors\n  * _theme-base.scss include B{dirKey}-c-{key} colors\n  * _borders.scss include B{dirKey}-double styling for borders\n  * New function for generating directional definitions ```@function directionalDefinitions```\n\n* Changes from v0.3.0\n  *  _theme-base.scss: c-{key}_hover and bg-c-{key}_hover classes are wrapped in ```@media (pointer: fine)``` to not include hover states on touch devices and such.\n\n* Deprecated\n  * @mixin createMultipleSizeClasses - See @function multipleDefinitions\n  * @mixin createMultipleSizeBoxClasses - See @function directionalDefinitions\n  * @mixin createMultipleBoxClasses - See @function directionalDefinitions\n\n### v0.3.0\n\n* New features\n  * Responsive classes are created with createResponsiveClasses mixin.\n  * Responsive _layout.scss classes\n  * Responsive _typography.scss classes\n  * Added a function for generating multiple definitions ```@function multipleDefinitions```\n  * Flexbox classes added _flex.scss\n  * Added _deprecated.scss for deprecated features\n  * $responsiveClassScheme added to _variables.scss for freedom to specify the syntax of responsive classes. The default syntax is ```r-{breakpoint}-{selector}```.\n\n* Changes from v0.2.0\n  * $baseColors variable in _variables.scss is renamed to $colors\n  * reactiveClasses mixin is renamed to createResponsiveClasses and its parameters are now ```$definitions, $_responsiveClassScheme: $responsiveClassScheme, $_breakpoints: $breakpoints``\n\n* Deprecated features\n  * .flex-column\n  * .flex-lock\n  * .flex-flex\n  * .clearfix\n  * _breakpoints.scss has been deleted and relevant functions moved into _functions.scss\n  * _typography_responsive.scss deleted: responsive typography is now generated the same as all the other styles. See typography.scss\n\n### v0.2.0\n\n* box direction is changed to empty string, so Pbox, Mbox etc. becomes just P and M\n* Add support for node-sass versions (3.3.3) \n\n### v0.1.0\n\n* Basic theme support (c-color, bg-c-color, B-c-color)\n    - New atom and configuration: atoms/_theme-base.scss \u0026 $baseColors in _variables.scss\n    - f-blank is now deprecated\n    - Add support by adding blank into $baseColors and adding ```@include createMultipleSelectors('f-{key}', $baseColors, 'color');``` to your project\n\n\n## Development environment setup (for Once development)\n\n1. Clone Once to your desired location:\n    git clone https://github.com/niant/once.git destination/\n2. Download \u0026 install Node.js\n3. Run: npm install\n4. Start coding: npm start\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniant%2Fonce","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fniant%2Fonce","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniant%2Fonce/lists"}