Андрей Ситник, Злые марсиане
format_links(announce);format_links(text);
count.should.eql(1);
User = modelByTable('users');User.findByLogin('ai');
.logo {-webkit-transition: border 200ms;transition: border 200ms;border: 2px solid #ffe644}.image {border: 2px solid #ffe644;background: data(data:…);width: 200px;height: 180px}.body::after {content: " ";visibility: hidden;display: block;height: 0;clear: both}
Быстро разрабатывать
Быстро рендерить
:root {--main: #c00}a {color: var(--main)}
a {color: #c00}
Нестандартный <blink> поддерживали 19 лет
a {<%= include clickable %>color: <%= $link-color %>;}
a {width: 20rem}
@import "compass/support";// The the user threshold for transition support. Defaults to `$graceful-usage-threshold`$transition-support-threshold: $graceful-usage-threshold !default;// CSS Transitions// Currently only works in Webkit.//// * expected in CSS3, FireFox 3.6/7 and Opera Presto 2.3// * We'll be prepared.//// Including this submodule sets following defaults for the mixins://// $default-transition-property : all// $default-transition-duration : 1s// $default-transition-function : false// $default-transition-delay : false//// Override them if you like. Timing-function and delay are set to false for browser defaults (ease, 0s).$default-transition-property: all !default;$default-transition-duration: 1s !default;$default-transition-function: null !default;$default-transition-delay: null !default;$transitionable-prefixed-values: transform, transform-origin !default;// Checks if the value given is a unit of time.@function is-time($value) {@return if(type-of($value) == number, not not index(s ms, unit($value)), false);}// Returns `$property` with the given prefix if it is found in `$transitionable-prefixed-values`.@function prefixed-for-transition($prefix, $property) {@if not $prefix {@return $property;}@if type-of($property) == list or type-of($property) == arglist {$new-list: comma-list();@each $v in $property {$new-list: append($new-list, prefixed-for-transition($prefix, $v));}@return $new-list;} @else {@if index($transitionable-prefixed-values, $property) {@return #{$prefix}-#{$property};} @else {@return $property;}}}// Returns $transition-map which includes key and values that map to a transition declaration@function transition-map($transition) {$transition-map: ();@each $item in $transition {@if is-time($item) {@if map-has-key($transition-map, duration) {$transition-map: map-merge($transition-map, (delay: $item));} @else {$transition-map: map-merge($transition-map, (duration: $item));}} @else if map-has-key($transition-map, property) {$transition-map: map-merge($transition-map, (timing-function: $item));} @else {$transition-map: map-merge($transition-map, (property: $item));}}@return $transition-map;}// One or more properties to transition//// * for multiple, use a comma-delimited list// * also accepts "all" or "none"@mixin transition-property($properties...) {$properties: set-arglist-default($properties, $default-transition-property);@include with-each-prefix(css-transitions, $transition-support-threshold) {$props: if($current-prefix, prefixed-for-transition($current-prefix, $properties), $properties);@include prefix-prop(transition-property, $props);}}// One or more durations in seconds//// * for multiple, use a comma-delimited list// * these durations will affect the properties in the same list position@mixin transition-duration($durations...) {$durations: set-arglist-default($durations, $default-transition-duration);@include prefixed-properties(css-transitions, $transition-support-threshold, (transition-duration: $durations));}// One or more timing functions//// * [ ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(x1, y1, x2, y2)]// * For multiple, use a comma-delimited list// * These functions will effect the properties in the same list position@mixin transition-timing-function($functions...) {$functions: set-arglist-default($functions, $default-transition-function);@include prefixed-properties(css-transitions, $transition-support-threshold, (transition-timing-function: $functions));}// One or more transition-delays in seconds//// * for multiple, use a comma-delimited list// * these delays will effect the properties in the same list position@mixin transition-delay($delays...) {$delays: set-arglist-default($delays, $default-transition-delay);@include prefixed-properties(css-transitions, $transition-support-threshold, (transition-delay: $delays));}// Transition all-in-one shorthand@mixin single-transition($property: $default-transition-property,$duration: $default-transition-duration,$function: $default-transition-function,$delay: $default-transition-delay) {@include transition(compact($property $duration $function $delay));}@mixin transition($transitions...) {$default: (compact($default-transition-property $default-transition-duration $default-transition-function $default-transition-delay),);$transitions: if(length($transitions) == 1 and type-of(nth($transitions, 1)) == list and list-separator(nth($transitions, 1)) == comma, nth($transitions, 1), $transitions);$transitions: set-arglist-default($transitions, $default);@include with-each-prefix(css-transitions, $transition-support-threshold) {$delays: comma-list();$transitions-without-delays: comma-list();$transitions-with-delays: comma-list();$has-delays: false;// This block can be made considerably simpler at the point in time that// we no longer need to deal with the differences in how delays are treated.@each $transition in $transitions {// Declare initial values for transition$transition: transition-map($transition);$property: map-get($transition, property);$duration: map-get($transition, duration);$timing-function: map-get($transition, timing-function);$delay: map-get($transition, delay);// Parse transition string to assign values into correct variables$has-delays: $has-delays or $delay;@if $current-prefix == -webkit {// Keep a list of delays in case one is specified$delays: append($delays, if($delay, $delay, 0s));$transitions-without-delays: append($transitions-without-delays,prefixed-for-transition($current-prefix, $property) $duration $timing-function);} @else {$transitions-with-delays: append($transitions-with-delays,prefixed-for-transition($current-prefix, $property) $duration $timing-function $delay);}}@if $current-prefix == -webkit {@include prefix-prop(transition, $transitions-without-delays);@if $has-delays {@include prefix-prop(transition-delay, $delays);}} @else if $current-prefix {@include prefix-prop(transition, $transitions-with-delays);} @else {transition: $transitions-with-delays;}}}
var postcss = require('postcss');css = postcss().use(plugin1).use(plugin2).process(css).css;
var pixrem = function (css) {css.eachDecl(function (decl) {decl.value = decl.value.replace(/\d+rem/, function (rem) {return 16 * parseFloat(rem);});})}
Препроцессор
Постпроцессор
:fullscreen a {transition: transform 1s}
:-webkit-full-screen a {-webkit-transition: -webkit-transform 1s;transition: transform 1s}:-moz-full-screen a {transition: transform 1s}:-ms-fullscreen a {transition: transform 1s}:fullscreen a {-webkit-transition: -webkit-transform 1s;transition: transform 1s}
.blur {filter: blur(4px)}
.blur {filter: url(data:image/svg+xml;…);filter: blur(4px)}
.icon {background: url(a.png)}
.icon {background: url(a.png)}.webp .icon {background: url(a.webp)}
/* style.css */.icon {width: 100px;background: url(data:…)}
/* style.css */.icon {width: 100px}/* style.icons.css */.icon {background: url(data:…)}
Минифицирует CSS и обновит предыдущие карты кода (например, после склеивания)
Проверка БЭМ‑стиля для Твиттера (методология SUIT CSS)
Проверяет поддержку свойств в нужных браузерах по Can I Use
main.css: line 15, col 3 -CSS user-select: none not supported by: IE (8,9)main.css: line 32, col 3 -CSS3 Transforms not supported by: IE (8)
Набор полифилов для спецификаций CSS 4:
font-feature-settings
Изменяет дизайн для арабского и иврита
a {left: 10px;text-align: left}
a {right: 10px;text-align: right}
gulp.task('css', function () {var processors = [/* плагины */];return gulp.src('./src/style.css').pipe( postcss(processors) ).pipe( gulp.dest('./dest') );});
var processors = [require('postcss-custom-properties'),require('pleeease-filters'),require('postcss-import'),require('autoprefixer'),require('postcss-calc'),require('postcss-url')require('csswring')];
Какой символ нужно использовать для иконки из своего иконочного шрифта
.icon::before {content: "?"}
gulp.task('iconfont', function() {gulp.src(['icons/*.svg']).pipe(iconfont({ fontName: 'Icons' }).on('codepoints', function(data) {icons = data;}).pipe(gulp.dest('fonts/'));});
var iconer = function (css) {css.eachDecl(function (decl) {decl.value = decl.value.replace(/icon-\w/, function (str) {var name = str.replace(/^icon-/, '');return '"' + icons[name].codepoint + '"';});});};
.icon::before {content: icon-up}
.icon::before {content: "A"}