Skip to content

Auto CSS, Cssist is a JavaScript library that automatically generates classes so that you can develop the web without css

Notifications You must be signed in to change notification settings

sun-runners/cssist

Repository files navigation

CSSIST

CSS is a language that determines how documents written in markup languages ​​such as HTML actually appear on your website. CSSIST automatically generates and manages CSS based on the class name of CSSIST in HTML. So you can develop by writing only the CSSIST class in markup such as HTML without writing CSS. As a CSS framework that doesn't write CSS for the first time, many advantages arise from not developing CSS.

CSS는 HTML 등의 마크업 언어로 작성된 문서가 실제로 웹사이트에 표현되는 방법을 정해주는 언어입니다. CSSIST는 HTML의 CSSIST의 클래스명을 기반으로 자동으로 CSS를 생성 및 관리합니다. 즉, CSS 를 작성하지 않고 HTML와 같은 마크업에 CSSIST 클래스만 작성하여 개발할 수 있습니다. 최초로 CSS를 작성하지 않는 CSS 프레임워크로써, CSS를 개발하지 않기 떄문에, 많은 장점이 발생합니다.

장점

  • 높은 자유도

CSSIST는 percentage(%), px, em, vw, vh, HEX, RGB, RGBA, 계산식(calc) 등 다양한 단위의 값을 지원합니다. 이 중 계산식은 CSSIST의 가장 큰 장점으로, 다양한 값뿐만 아니라 수식으로 값을 표현할 수 있습니다.

  • 반응형

CSSIST는 MAX, MIN 값을 클래스명과 함께 지정할 수 있기 때문에, 한번에 모든 반응형을 개발할 수 있습니다. 따라서 기존에 미디어쿼리로 기기 사이즈마다 따로 개발할 필요가 없어, 코드가 훨씬 많이 줄어듭니다.

  • 크로스 브라우징

크롬, 파이어폭스, 오페라, 익스플로어 등 현재 여러 브라우저가 널리 사용되고 있습니다. 크로스 브라우징은 모든 브라우저가 동일한 정보를 보여주는 통일성입니다. CSSIST는 한 개의 클래스를 생성할 때 크로스 브라우징 처리를 전부 처리합니다. 따라서 기존에 CSS에서처럼 모든 클래스의 속성들의 크로스 브라우징 처리를 할 필요가 전혀 없으며, 중복된 코드가 없어 코드가 훨씬 짧습니다.

  • 이벤트

CSS엔 Hover, Mouseenter, Mouseleave, Focus, Blur 등 수 많은 이벤트가 존재합니다. 사용자의 다양한 이벤트에 반응하는 CSS에 지원하는 모든 이벤트를 CSSIST에서도 사용할 수 있습니다. 따라서 기존에 CSS에서처럼 따로 따로 이벤트 클래스를 지정할 필요가 없습니다.

  • 유지보수

클래스명에 대한 고민없이 마크업의 CSSIST 클래스들만 변경하여 쉽고 빠르게 유지보수할 수 있습니다. 따라서 기존에 CSS처럼 불필요한 수 천개의 클래스명을 정할 필요가 없습니다.

추가 에정

  • 도큐먼트 사이트

  • 각 테스트 시스템

DEMO

Link: https://kimsunwook.github.io/cssist

INSTALL

  • bower

    bower install cssist --save
    
  • npm

    npm install cssist --save
    

Quick start

  1. Copy-paste the <script> into your <body>.
- cssist.js
  ```
  <script src=".bower_components/cssist/cssist.js"></script>
  ```
  1. Set root element
- Default : It calculates the class of every element in body by default.
  ```
  <body></body>
  ```

- Optional : Set cssist attribute to specific element. It optionally computes the class of all elements within a particular element.
  ```
  <div cssist></div>
  ```

Document

  • Properties

    [
      {
        properties: { ac: 'align-content', align_content: 'align-content' },
        value_sets: [value_sets.align_content_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: { ai: 'align-items', align_items: 'align-items' },
        value_sets: [value_sets.align_items_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: { as: 'align-self', align_self: 'align-self' },
        value_sets: [value_sets.align_items_kind, value_sets.auto, value_sets.initial, value_sets.inherit]
      }, {
        properties: { an: 'animation-iteration-count', animation_iteration_count: 'animation-iteration-count' },
        value_sets: [value_sets.integer_0, value_sets.infinite, value_sets.initial, value_sets.inherit]
      }, {
        properties: { b: 'background', background: 'background' },
        value_sets: [value_sets.rgba_color, value_sets.gradient, value_sets.none, value_sets.initial, value_sets.inherit]
      }, {
        properties: { bi: 'background-image', background_image: 'background-image' },
        value_sets: [value_sets.image_url, value_sets.none, value_sets.initial, value_sets.inherit]
      }, {
        properties: { bs: 'background-size', background_size: 'background-size' },
        value_sets: [value_sets.auto, value_sets.length_calc_2D, value_sets.background_size_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: { bs: 'box-shadow', ts: 'text-shadow', box_shadow: 'box-shadow', text_shadow: 'text-shadow' },
        value_sets: [value_sets.shadow]
      }, {
        properties: { bs: 'box-sizing', box_sizing: 'box-sizing' },
        value_sets: [value_sets.box_sizing_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: {
          bo: 'border-width', bo_t: 'border-top-width', bo_b: 'border-bottom-width', bo_l: 'border-left-width', bo_r: 'border-right-width',
          border_width: 'border-width', border_top_width: 'border-top-width', border_bottom_width: 'border-bottom-width', border_left_width: 'border-left-width', border_right_width: 'border-right-width'
        },
        value_sets: [value_sets.length, value_sets.auto, value_sets.initial, value_sets.inherit, value_sets.thick_kind]
      }, {
        properties: { bp: 'background-position', background_position: 'background-position' },
        value_sets: [value_sets.direction_2D_kind, value_sets.length_calc_2D, value_sets.initial, value_sets.inherit]
      }, {
        properties: {
          c: 'color', pc: { name: 'color', afters: ['::placeholder'] },
          color: 'color', placeholder: { name: 'color', afters: ['::placeholder'] },
          bc: 'background-color', background_color: 'background-color',
          bo: 'border-color', bo_t: 'border-top-color', bo_b: 'border-bottom-color', bo_l: 'border-left-color', bo_r: 'border-right-color',
          border_color: 'border-color', border_top_color: 'border-top-color', border_bottom_color: 'border-bottom-color', border_left_color: 'border-left-color', border_right_color: 'border-right-color'
        },
        value_sets: [value_sets.rgba_color]
      }, {
        properties: { c: 'clear', clear: 'clear' },
        value_sets: [value_sets.clear_kind, value_sets.none, value_sets.initial, value_sets.inherit]
      }, {
        properties: { d: 'display', display: 'display' },
        value_sets: [value_sets.display_kind, value_sets.none, value_sets.initial, value_sets.inherit]
      }, {
        properties: { fx: 'flex', flex: 'flex' },
        // CONTINUE HERE...
        value_sets: [value_sets.flexbox_flex, value_sets.initial, value_sets.inherit]
      }, {
        properties: { fxf: 'flex-flow', flex_flow: 'flex-flow' },
        value_sets: [value_sets.flex_flow_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: { fxg: 'flex-grow', flex_grow: 'flex-grow' },
        value_sets: [value_sets.integer_0, value_sets.initial, value_sets.inherit]
      }, {
        properties: { fxs: 'flex-shrink', flex_shrink: 'flex-shrink' },
        value_sets: [value_sets.integer_0, value_sets.initial, value_sets.inherit]
      }, {
        properties: { f: 'float', float: 'float' },
        value_sets: [value_sets.none, value_sets.float_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: { f: 'font-size', font_size: 'font-size' },
        value_sets: [value_sets.font_size_kind, value_sets.length_calc, value_sets.initial, value_sets.inherit]
      }, {
        properties: { fxb: 'flex-basis', flex_basis: 'flex-basis' },
        value_sets: [value_sets.length_calc, value_sets.auto, value_sets.initial, value_sets.inherit]
      }, {
        properties: { fxd: 'flex-direction', flex_direction: 'flex-direction' },
        value_sets: [value_sets.flex_direction_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: { fxw: 'flex-wrap', flex_direction: 'flex-wrap' },
        value_sets: [value_sets.flex_wrap_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: { fw: 'font-weight', font_weight: 'font-weight' },
        value_sets: [value_sets.font_weight_kind, value_sets.integer_hundred, value_sets.initial, value_sets.inherit]
      }, {
        properties: { jc: 'justify-content', justify_content: 'justify-content' },
        value_sets: [value_sets.justify_content_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: { t: 'text-align', text_align: 'text-align' },
        value_sets: [value_sets.align_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: { tt: 'text-transform', text_transform: 'text-transform' },
        value_sets: [value_sets.text_trasform_kind, value_sets.none, value_sets.initial, value_sets.inherit]
      }, {
        properties: { lh: 'line-height', line_height: 'line-height' },
        value_sets: [value_sets.normal, value_sets.length_calc, value_sets.initial, value_sets.inherit]
      }, {
        properties: { ls: 'letter-spacing', letter_spacing: 'letter-spacing' },
        value_sets: [value_sets.normal, value_sets.length_calc, value_sets.initial, value_sets.inherit]
      }, {
        properties: { o: 'opacity', opacity: 'opacity' },
        value_sets: [value_sets.opacity]
      }, {
        properties: { or: 'order', order: 'order' },
        value_sets: [value_sets.integer_0]
      }, {
        properties: { o: 'overflow', ox: 'overflow-x', oy: 'overflow-y', overflow: 'overflow', overflow_x: 'overflow-x', overflow_y: 'overflow-y' },
        value_sets: [value_sets.overflow_kind, value_sets.auto, value_sets.initial, value_sets.inherit]
      }, {
        properties: { p: 'position', position: 'position' },
        value_sets: [value_sets.position_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: {
          p: 'padding', pb: 'padding-bottom', pl: 'padding-left', pr: 'padding-right', pt: 'padding-top',
          padding: 'padding', padding_bottom: 'padding-bottom', padding_left: 'padding-left', padding_right: 'padding-right', padding_top: 'padding-top',
          bor: 'border-radius', bor_tl: 'border-top-left-radius', bor_tr: 'border-top-right-radius', bor_bl: 'border-bottom-left-radius', bor_br: 'border-bottom-right-radius',
          border_radius: 'border-radius', border_top_left_radius: 'border-top-left-radius', border_top_right_radius: 'border-top-right-radius', border_bottom_left_radius: 'border-bottom-left-radius', border_bottom_right_radius: 'border-bottom-right-radius',
        },
        value_sets: [value_sets.length_calc, value_sets.initial, value_sets.inherit]
      }, {
        properties: { to: 'text-overflow', text_overflow: 'text-overflow' },
        value_sets: [value_sets.text_overflow_kind]
      }, {
        properties: { tn: 'transform', transform: 'transform' },
        value_sets: [value_sets.translate_length_calc_2D]
      }, {
        properties: { tn: 'transition-property', transition_property: 'transition-property' },
        value_sets: [value_sets.none, value_sets.all, value_sets.variables, value_sets.initial, value_sets.inherit]
      }, {
        properties: { tn: 'transition-duration', tnd: 'transition-delay', an: 'animation-duration', and: 'animation-delay', transition_duration: 'transition-duration', transition_delay: 'transition-delay', animation_duration: 'animation-duration', animation_delay: 'animation-delay' },
        value_sets: [value_sets.second, value_sets.millisecond, value_sets.initial, value_sets.inherit]
      }, {
        properties: { tn: 'transition-timing-function', an: 'animation-timing-function', transition_timing_function: 'transition-timing-function', animation_timing_function: 'animation-timing-function' },
        value_sets: [value_sets.transition_timing_function_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: { v: 'visibility', visibility: 'visibility' },
        value_sets: [value_sets.visibility_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: { v: 'vertical-align', vertical_align: 'vertical-align' },
        value_sets: [value_sets.vertical_align_kind, value_sets.length_calc, value_sets.initial, value_sets.inherit]
      }, {
        properties: { ws: 'white-space', white_space: 'white-space' },
        value_sets: [value_sets.white_space_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: { wb: 'word-break', word_break: 'word-break' },
        value_sets: [value_sets.white_break_kind, value_sets.initial, value_sets.inherit]
      }, {
        properties: { ww: 'word-wrap', word_wrap: 'word-wrap' },
        value_sets: [value_sets.word_wrap_kind, value_sets.initial, value_sets.inherit]
      }, {
        test: true,
        properties: {
          w: 'width', xw: 'max-width', nw: 'min-width', h: 'height', xh: 'max-height', nh: 'min-height',
          width: 'width', max_width: 'max-width', min_width: 'min-width', height: 'height', max_height: 'max-height', min_height: 'min-height',
          b: 'bottom', r: 'right', t: 'top', l: 'left',
          bottom: 'bottom', right: 'right', top: 'top', left: 'left',
          m: 'margin', mb: 'margin-bottom', ml: 'margin-left', mr: 'margin-right', mt: 'margin-top',
          margin: 'margin', margin_bottom: 'margin-bottom', margin_left: 'margin-left', margin_right: 'margin-right', margin_top: 'margin-top',
          ws: 'word-spacing', word_spacing: 'word-spacing'
        },
        value_sets: [value_sets.length_calc, value_sets.auto, value_sets.initial, value_sets.inherit]
      }, {
        properties: { z: 'z-index', z_index: 'z-index' },
        value_sets: [value_sets.auto, value_sets.integer, value_sets.initial, value_sets.inherit]
      }
    ]
    
  • value_set

    value_sets.auto = {
      regex: '(?:a|auto)',
      values: { a: 'auto', auto: 'auto' },
      examples: ['a', 'auto'],
      getValue: getValueFromValues
    };
    
    value_sets.all = {
      regex: '(?:a|all)',
      values: { a: 'all', all: 'all' },
      examples: ['a', 'all'],
      getValue: getValueFromValues
    };
    
    value_sets.initial = {
      regex: '(?:il|initial)',
      values: { il: 'initial', initial: 'initial' },
      examples: ['il', 'initial'],
      getValue: getValueFromValues
    };
    
    value_sets.inherit = {
      regex: '(?:it|inherit)',
      values: { it: 'inherit', inherit: 'inherit' },
      examples: ['it', 'inherit'],
      getValue: getValueFromValues
    };
    
    value_sets.infinite = {
      regex: '(?:i|infinite)',
      values: { i: 'infinite', infinite: 'infinite' },
      examples: ['i', 'infinite'],
      getValue: getValueFromValues
    };
    
    value_sets.none = {
      regex: '(?:n|none)',
      values: { n: 'none', none: 'none' },
      examples: ['n', 'none'],
      getValue: getValueFromValues
    };
    
    value_sets.normal = {
      regex: '(?:n|normal)',
      values: { n: 'normal', normal: 'normal' },
      examples: ['n', 'normal'],
      getValue: getValueFromValues
    };
    
    
    
    // KIND
    value_sets.align_content_kind = {
      regex: '(?:fxs|fxe|c|sb|sa|s|flex_start|flex_end|center|space_between|space_around|stretch)',
      values: {
        fxs: 'flex-start', fxe: 'flex-end', c: 'center', sb: 'space-between', sa: 'space-around', s: 'stretch',
        flex_start: 'flex-start', flex_end: 'flex-end', center: 'center', space_between: 'space-between', space_around: 'space-around', strech: 'stretch'
      },
      examples: ['fxs', 'flex_start'],
      getValue: getValueFromValues
    };
    
    value_sets.align_items_kind = {
      regex: '(?:fxs|fxe|c|bl|s|flex_start|flex_end|center|baseline|stretch)',
      values: {
        fxs: 'flex-strech', fxe: 'flex-end', c: 'center', bl: 'baseline', s: 'stretch',
        flex_start: 'flex-start', flex_end: 'flex-end', center: 'center', baseline: 'baseline', strech: 'stretch'
      },
      examples: ['fxs', 'flex_start'],
      getValue: getValueFromValues
    };
    
    value_sets.animation_direction = {
      regex: '(?:n|r|a|ar|normal|reverse|alternate|alternate_reverse)',
      values: { n: 'normal', r: 'reverse', a: 'alternate', ar: 'alternate-reverse', normal: 'normal', reverse: 'reverse', alternate: 'alternate', alternate_reverse: 'alternate-reverse' },
      examples: ['n', 'alternate_reverse'],
      getValue: getValueFromValues
    };
    
    value_sets.box_sizing_kind = {
      regex: '(?:c|b|content_box|border_box)',
      values: { c: 'content-box', b: 'border-box', content_box: 'content-box', border_box: 'border-box' },
      examples: ['c', 'b'],
      getValue: getValueFromValues
    };
    
    value_sets.background_size_kind = {
      regex: '(?:l|r|b|left|right|both)',
      values: { l: 'left', r: 'right', b: 'both', left: 'left', right: 'right', both: 'both' },
      examples: ['l', 'both'],
      getValue: getValueFromValues
    };
    
    value_sets.clear_kind = {
      regex: '(?:cr|cn|cover|contain)',
      values: { cr: 'cover', cn: 'contain', cover: 'cover', contain: 'contain' },
      examples: ['cr', 'contain'],
      getValue: getValueFromValues
    };
    
    value_sets.display_kind = {
      regex: '(?:i|b|fx|ib|inline|block|flex|inline_block|inline_flex|inline_table|list_item|run_in|table|table_caption|table_column_group|table_header_group|table_footer_group|table_row_group|table_cell|table_column|table_row)',
      values: {
        i: 'inline', b: 'block', fx: 'flex', ib: 'inline-block',
        inline: 'inline', block: 'block', flex: 'flex', inline_block: 'inline-block', inline_flex: 'inline-flex',
        inline_table: 'inline-table', list_item: 'list-item', run_in: 'run-in',
        table: 'table', table_caption: 'table-caption', table_column_group: 'table-column-group', table_header_group: 'table-header-group',
        table_footer_group: 'table-footer-group', table_row_group: 'table-row-group', table_cell: 'table-cell', table_column: 'table-column', table_row: 'table-row'
      },
      examples: ['i', 'table_row'],
      getValue: getValueFromValues
    };
    
    value_sets.direction_kind = {
      regex: '(?:l|r|t|b|c|left|right|top|bottom|center)',
      values: { l: 'left', r: 'right', t: 'top', b: 'bottom', c: 'center', left: 'left', right: 'right', top: 'top', bottom: 'bottom', center: 'center' },
      examples: ['l', 'center'],
      getValue: getValueFromValues
    };
    
    value_sets.direction_2D_kind = {
      regex: '(?:lt|lc|lb|rt|rc|rb|ct|cc|cb|left_top|left_center|left_bottom|right_top|right_center|right_bottom|center_top|center_center|center_bottom)',
      values: {
        lt: 'left top', lc: 'left center', lb: 'left bottom', rt: 'right top', rc: 'right center', rb: 'right bottom', ct: 'center top', cc: 'center center', cb: 'center bottom',
        left_top: 'left top', left_center: 'left center', left_bottom: 'left bottom', right_top: 'right top', right_center: 'right center', right_bottom: 'right bottom', center_top: 'center top', center_center: 'center center', center_bottom: 'center bottom'
      },
      examples: ['lt', 'cc'],
      getValue: getValueFromValues
    };
    
    value_sets.flex_flow_kind = {
      regex: '(?:fxd|fxw|flex_direction|flex_wrap)',
      values: {
        fxd: 'flex-direction', fxw: 'flex-wrap',
        flex_direction: 'flex-direction', flex_wrap: 'flex-wrap'
      },
      examples: ['fxd', 'flex_direction'],
      getValue: getValueFromValues
    };
    
    value_sets.float_kind = {
      regex: '(?:l|r|left|right)',
      values: { l: 'left', r: 'right', left: 'left', right: 'right' },
      examples: ['l', 'right'],
      getValue: getValueFromValues
    };
    
    value_sets.flex_direction_kind = {
      regex: '(?:r|rr|c|cr|row|row_reverse|column|column_reverse)',
      values: {
        r: 'row', rr: 'row-reverse', c: 'column', cr: 'column-reverse',
        row: 'row', row_reverse: 'row-reverse', column: 'column', column_reverse: 'column-reverse'
      },
      examples: ['r', 'row'],
      getValue: getValueFromValues
    };
    
    value_sets.flex_wrap_kind = {
      regex: '(?:nw|w|wr|nowrap|wrap|wrap_reverse)',
      values: {
        nw: 'nowrap', w: 'wrap', wr: 'wrap-reverse',
        nowrap: 'nowrap', wrap: 'wrap', wrap_reverse: 'wrap-reverse'
      },
      examples: ['nw', 'nowrap'],
      getValue: getValueFromValues
    };
    
    value_sets.font_size_kind = {
      regex: '(?:m|xxs|xs|s|l|xl|xxl|sr|lr|medium|xx_small|x_small|small|large|x_large|xx_large|smaller|larger)',
      values: {
        m: 'medium', xxs: 'xx-small', xs: 'x-small', s: 'small', l: 'large', xl: 'x-large', xxl: 'xx-large', sr: 'smaller', lr: 'larger',
        medium: 'medium', xx_small: 'xx-small', x_small: 'x-small', s: 'small', l: 'large', x_large: 'x-large', xx_large: 'xx-large', smaller: 'smaller', larger: 'larger'
      },
      examples: ['m', 'larger'],
      getValue: getValueFromValues
    };
    
    value_sets.font_weight_kind = {
      regex: '(?:n|m|b|br|lr|normal|medium|bold|bolder|lighter)',
      values: {
        n: 'normal', m: 'medium', b: 'bold', br: 'bolder', lr: 'lighter',
        normal: 'normal', medium: 'medium', bold: 'bold', bolder: 'bolder', lighter: 'lighter',
      },
      examples: ['n', 'lighter'],
      getValue: getValueFromValues
    };
    
    value_sets.justify_content_kind = {
      regex: '(?:fxs|fxe|c|sb|sa|se|flex_start|flex_end|center|space_between|space_around|space_evenly)',
      values: {
        fxs: 'flex-start', fxe: 'flex-end', c: 'center', sb: 'space-between', sa: 'space-around', se: 'space-evenly',
        flex_start: 'flex-start', flex_end: 'flex-end', center: 'center', space_between: 'space-between', space_around: 'space-around', space_evenly: 'space-evenly'
      },
      examples: ['fxs', 'flex_start'],
      getValue: getValueFromValues
    };
    
    value_sets.gradient_kind = {
      regex: '(?:rl|rr|l|r)',
      values: { l: 'linear-gradient', r: 'radial-gradient', rl: 'repeating-linear-gradient', rr: 'repeating-radial-gradient' },
      examples: ['l', 'rr'],
      getValue: getValueFromValues
    };
    
    value_sets.length_unit_kind = {
      regex: '(?:em|ex|ch|rem|vw|vh|vmax|vmin|cm|mm|in|px|pt|pc|p|n)',
      values: { em: 'em', ex: 'ex', ch: 'ch', rem: 'rem', vw: 'vw', vh: 'vh', vmax: 'vmax', vmin: 'vmin', cm: 'cm', mm: 'mm', in: 'in', px: 'px', pt: 'pt', pc: 'pc', p: '%', n: '' },
      examples: ['em', 'n'],
      getValue: getValueFromValues
    };
    
    value_sets.overflow_kind = {
      regex: '(?:h|o|s|v|hidden|overlay|scroll|visible)',
      values: {
        h: 'hidden', o: 'overlay', s: 'scroll', v: 'visible',
        hidden: 'hidden', overlay: 'overlay', scroll: 'scroll', visible: 'visible'
      },
      examples: ['h', 'visible'],
      getValue: getValueFromValues
    };
    
    value_sets.position_kind = {
      regex: '(?:s|a|f|r|static|absolute|fixed|relative)',
      values: {
        s: 'static', a: 'absolute', f: 'fixed', r: 'relative',
        static: 'static', absolute: 'absolute', fixed: 'fixed', relative: 'relative'
      },
      examples: ['s', 'relative'],
      getValue: getValueFromValues
    };
    
    value_sets.text_overflow_kind = {
      regex: '(?:c|e|s|clip|ellipsis|string)',
      values: {
        c: 'clip', e: 'ellipsis', s: 'string',
        clip: 'clip', ellipsis: 'ellipsis', string: 'string'
      },
      examples: ['c', 's'],
      getValue: getValueFromValues
    };
    
    value_sets.align_kind = {
      regex: '(?:l|r|c|j|s|left|right|center|justify|stretch)',
      values: {
        l: 'left', r: 'right', c: 'center', j: 'justify', s: 'stretch',
        left: 'left', right: 'right', center: 'center', justify: 'justify', strech: 'strech'
      },
      examples: ['l', 'j'],
      getValue: getValueFromValues
    };
    
    value_sets.thick_kind = {
      regex: '(?:m|tn|tk|medium|thin|thick)',
      values: { m: 'medium', tn: 'thin', tk: 'thick' },
      examples: ['m', 'tk'],
      getValue: getValueFromValues
    };
    
    value_sets.transition_timing_function_kind = {
      regex: '(?:l|e|ei|eo|eio|ss|se|linear|ease|ease_in|ease_out|ease_in_out|step_start|step_end)',
      values: { l: 'linear', e: 'ease', ei: 'ease-in', eo: 'ease-out', eio: 'ease-in-out', ss: 'step-start', se: 'step-end' },
      examples: ['l', 'se'],
      getValue: getValueFromValues
    };
    
    value_sets.text_trasform_kind = {
      regex: '(?:c|u|l|capitalize|uppercase|lowercase)',
      values: { c: 'capitalize', u: 'uppercase', l: 'lowercase', capitalize: 'capitalize', uppercase: 'uppercase', lowercase: 'lowercase' },
      examples: ['c', 'lowercase'],
      getValue: getValueFromValues
    };
    
    value_sets.vertical_align_kind = {
      regex: '(?:be|sb|sr|t|tt|m|b|tb|baseline|sub|super|top|text_top|middle|bottom|text_bottom)',
      values: {
        be: 'baseline', sb: 'sub', sr: 'super', t: 'top', tt: 'text-top	', m: 'middle', b: 'bottom', tb: 'text-bottom',
        baseline: 'baseline', sub: 'sub', super: 'super', top: 'top', text_top: 'text-top	', middle: 'middle', bottom: 'bottom', text_bottom: 'text-bottom'
      },
      examples: ['be', 'text_bottom'],
      getValue: getValueFromValues
    };
    
    value_sets.visibility_kind = {
      regex: '(?:v|h|c|visible|hidden|collapse)',
      values: {
        v: 'visible', h: 'hidden', c: 'collapse',
        visible: 'visible', hidden: 'hidden', collapse: 'collapse'
      },
      examples: ['v', 'c'],
      getValue: getValueFromValues
    };
    
    value_sets.white_space_kind = {
      regex: '(?:n|nw|p|pl|pw|normal|nowrap|pre|pre_line|pre_wrap)',
      values: {
        n: 'normal', nw: 'nowrap', p: 'pre', pl: 'pre-line', pw: 'pre-wrap',
        normal: 'normal', nowrap: 'nowrap', pre: 'pre', pre_line: 'pre-line', pre_wrap: 'pre-wrap'
      },
      examples: ['n', 'normal'],
      getValue: getValueFromValues
    };
    
    value_sets.word_wrap_kind = {
      regex: '(?:b|break_word)',
      values: {
        b: 'break-word',
        break_word: 'break-word'
      },
      examples: ['b', 'break_word'],
      getValue: getValueFromValues
    };
    
    
    
    // NUMBER
    
    value_sets.integer = {
      regex: '(?:_?[0-9]+)',
      examples: ['_100', '100'],
      getValue: function (value) { return value.replace(/_/g, '-'); }
    };
    
    value_sets.integer_0 = {
      regex: '(?:[0-9]+)',
      examples: ['100'],
      getValue: function (value) {
        var result = Math.abs(value);
        if (isNaN(result)) return null;
        else return result;
      }
    };
    
    value_sets.integer_0_12 = {
      regex: '(?:10|11|12|[0-9])',
      examples: ['0', '12'],
      getValue: function (value) { return Math.floor(value) % 13; }
    };
    
    value_sets.integer_0_255 = {
      regex: '(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:[01]?[0-9]?[0-9]))',
      examples: ['0', '255'],
      getValue: function (value) { return Math.floor(value) % 256; }
    };
    
    value_sets.integer_hundred = {
      regex: '(?:[1-9]00)',
      examples: ['100', '900'],
      getValue: getValueFromOriginalValue
    };
    
    value_sets.integer_3digits = {
      regex: '(?:_?[0-9]{1,3})',
      examples: ['_999', '999'],
      getValue: function (value) { return Math.floor(value_sets.integer.getValue(value)) % 1000; }
    };
    
    value_sets.float = {
      regex: value_sets.integer.regex + '(?:o' + value_sets.integer_0.regex + ')?',
      examples: ['0', '7o777', '_7o777'],
      getValue: function (value) { return value.replace(/o/g, '.'); }
    };
    
    value_sets.float_0_100 = {
      regex: '(?:100|[0-9]?[0-9])(?:o[0-9]+)?',
      examples: ['0', '10', '100', '7o777'],
      getValue: function (value) { return value_sets.float.getValue(value.replace(/_/g, '-')) % 101; }
    };
    
    value_sets.float_0 = {
      regex: value_sets.integer.regex + '(?:o' + value_sets.integer_0.regex + ')?',
      examples: ['0', '7o777'],
      getValue: function (value) { return value_sets.float.getValue(value.replace(/_/g, '-')); }
    };
    
    
    
    // OPACITY
    
    value_sets.opacity = {
      regex: value_sets.float_0_100.regex,
      examples: ['0', '50o50', '100'],
      getValue: function (value) { return value_sets.float_0_100.getValue(value) * 0.01; }
    };
    
    
    
    // LENGTH
    
    value_sets.length = {
      regex: value_sets.float_0.regex + '(?:' + value_sets.length_unit_kind.regex + ')?',
      examples: ['0px', '50p', '50', '100vw', '3n'],
      getValue: function (value) {
        var regex = new RegExp('(' + value_sets.float_0.regex + ')(' + value_sets.length_unit_kind.regex + ')?');
        var matches = value.match(regex);
        var result = '';
        if (value_sets.float_0.getValue(matches[1])) { // 길이 값
          result = value_sets.float_0.getValue(matches[1]);
        }
        if (matches[2]) { // 길이 단위
          result += value_sets.length_unit_kind.getValue(matches[2]);
        } else {
          result += '%';
        }
        return result;
      }
    };
    
    value_sets.symbol = {
      regex: '(?:__|_|M|D)',
      examples: ['__', '_', 'D', 'M'],
      getValue: function (value) {
        var result = null;
        if (value == '__') { result = '+'; }
        else if (value == '_') { result = '-'; }
        else if (value == 'M') { result = '*'; }
        else if (value == 'D') { result = '/'; }
        return result;
      }
    };
    
    value_sets.length_calc = {
      regex: '(?:' + value_sets.symbol.regex + '?' + value_sets.length.regex + ')+',
      examples: ['0', '50', '50px', '100_100px', '100M2_100vwD3__100cmD4_100pxD5_100M6_100vwD7__100cmD8_100pxD9'],
      getValue: function (value) {
        var terms = value.match(new RegExp('(' + value_sets.symbol.regex + '?' + value_sets.length.regex + ')', 'g'));
        var result = '';
    
        // Loop terms
        for (var i = 0; i < terms.length; i++) {
          var term = terms[i];
    
          // Set symbol and number
          var matches_each = term.match(new RegExp('(' + value_sets.symbol.regex + ')?(' + value_sets.length.regex + ')'));
          var symbol = matches_each[1];
          var value = matches_each[2];
    
          // Get symbols
          if (symbol) result += (i==0?'':' ')+value_sets.symbol.getValue(symbol)+(i==0?'':' ');
          if (symbol=='D' || symbol=='M') { // Divide or Multiply (Don't need unit) ex 10 -> 10
            result += value;
          } else { // + or - (Need unit) ex 10->10%
            result += value_sets.length.getValue(value);
          }
        }
    
        if(terms.length>1) return 'calc( ' + result + ' )';
        return result;
      }
    };
    
    value_sets.length_calc_2D = {
      regex: '(?:[X|Y]' + value_sets.length_calc.regex + ')+',
      examples: ['X100pxY50px', 'X100_10pxY50pxM10', 'X100M2_100vwD3__100cmD4_100pxD5_100M6_100vwD7__100cmD8_100pxD9'],
      getValue: function (value) {
        var result = '';
        var regex_X = new RegExp('X(' + value_sets.length_calc.regex + ')');
        var matches_X = value.match(regex_X);
        if (matches_X) {
          result += value_sets.length_calc.getValue(matches_X[0]);
        } else {
          result += 0;
        }
        result += ' ';
        var regex_Y = new RegExp('Y(' + value_sets.length_calc.regex + ')');
        var matches_Y = value.match(regex_Y);
        if (matches_Y) {
          result += value_sets.length_calc.getValue(matches_Y[0]);
        } else {
          result += 0;
        }
        return result;
      }
    };
    
    
    
    // FLEX
    
    value_sets.flexbox_flex = {
      regex: '(?:(?:' + value_sets.integer.regex + ')' + '(?:' + value_sets.integer.regex + ')?' + '(?:' + value_sets.length.regex + ')?)',
      examples: ['1', '1_1_100px', '1_1_100'],
      getValue: function (value) {
        var result = '';
        var regex = new RegExp('^(' + value_sets.integer.regex + ')' + '(?:_(' + value_sets.integer.regex + '))?' + '(?:_(' + value_sets.length.regex + '))?$');
        var matches = value.match(regex);
        if (!(matches)) return null;
        var flexes = [];
        for (var i = 1; i <= 3; i++) {
          // console.log(i);
          // console.log(matches[i]);
          if (!matches[i]) continue;
          if (i == 3){
            flexes.push(value_sets.length.getValue(matches[i]));
          }
          else{
            flexes.push(value_sets.integer.getValue(matches[i]));
          }
        }
        // console.log(flexes);
        result = flexes.join(' ');
        return result;
      }
    };
    
    
    
    // DEGREE
    
    value_sets.degree = {
      regex: '(?:_?[0-9]+)(?:d)',
      examples: ['180d', '_90d'],
      getValue: function (value) { return value.replace(/d/g, 'deg'); }
    };
    
    
    
    // TIME
    
    value_sets.hour = {
      regex: value_sets.integer_0.regex + 'h',
      examples: ['0h', '100h'],
      getValue: getValueFromOriginalValue
    };
    
    value_sets.hour_0_12 = {
      regex: value_sets.integer_0_12.regex + 'h',
      examples: ['0h', '12h'],
      getValue: getValueFromOriginalValue
    };
    
    value_sets.second = {
      regex: value_sets.float_0.regex + 's',
      examples: ['0s', '100s'],
      getValue: getValueFromOriginalValue
    };
    
    value_sets.millisecond = {
      regex: value_sets.float_0.regex + 'ms',
      examples: ['0ms', '100ms'],
      getValue: getValueFromOriginalValue
    };
    
    
    
    // TRANSFORM
    
    value_sets.translate_length_calc_2D = {
      regex: '(?:[X|Y]' + value_sets.length_calc.regex + ')+',
      examples: ['X100pxY50px', 'X100_10pxY50pxM10', 'X100M2_100vwD3__100cmD4_100pxD5_100M6_100vwD7__100cmD8_100pxD9'],
      getValue: function (value) {
        var result = 'translate( ';
        var regex_X = new RegExp('X(' + value_sets.length_calc.regex + ')');
        var matches_X = value.match(regex_X);
        if (matches_X) {
          result += value_sets.length_calc.getValue(matches_X[0]);
          // console.log(result)
        } else {
          result += 0;
        }
        result += ', ';
        var regex_Y = new RegExp('Y(' + value_sets.length_calc.regex + ')');
        var matches_Y = value.match(regex_Y);
        if (matches_Y) {
          result += value_sets.length_calc.getValue(matches_Y[0]);
        } else {
          result += 0;
        }
        result += ' )';
        // console.log(result)
        return result;
      }
    };
    
    
    
    // COLOR
    
    value_sets.hex_color = {
      regex: '(?:[0-9A-F]{6})',
      examples: ['000000', 'FFFFFF'],
      getValue: function (value) {
        var result = 'rgba(';
        result += parseInt(value.substring(0, 2), 16) + ', ';
        result += parseInt(value.substring(2, 4), 16) + ', ';
        result += parseInt(value.substring(4, 6), 16);
        result += ', 100)';
        return result;
      },
      getObject: function (value) {
        var result = {
          red: parseInt(value.substring(0, 2), 16),
          green: parseInt(value.substring(2, 4), 16),
          blue: parseInt(value.substring(4, 6), 16)
        };
        return result;
      }
    };
    
    value_sets.google_color = {
      regex: '(?:red|pink|purple|deeppurple|indigo|blue|lightblue|cyan|teal|green|lightgreen|lime|yellow|amber|orange|deeporange|brown|grey|bluegrey|black|white|rd|pk|pe|dp|io|be|lb|cn|tl|gn|lg|le|yw|ar|oe|de|bn|gy|by|bk|we)(?:[1-9]00|50)?',
      values: {
        rd: 'F44336', rd50: 'FFEBEE', rd100: 'FFCDD2', rd200: 'EF9A9A', rd300: 'E57373', rd400: 'EF5350', rd500: 'F44336', rd600: 'E53935', rd700: 'D32F2F', rd800: 'C62828', rd900: 'B71C1C', //Red
        red: 'F44336', red50: 'FFEBEE', red100: 'FFCDD2', red200: 'EF9A9A', red300: 'E57373', red400: 'EF5350', red500: 'F44336', red600: 'E53935', red700: 'D32F2F', red800: 'C62828', red900: 'B71C1C', //Red
    
        pk: 'E91E63', pk50: 'FCE4EC', pk100: 'F8BBD0', pk200: 'F48FB1', pk300: 'F06292', pk400: 'EC407A', pk500: 'E91E63', pk600: 'D81B60', pk700: 'C2185B', pk800: 'AD1457', pk900: '880E4F', //Pink
        pink: 'E91E63', pink50: 'FCE4EC', pink100: 'F8BBD0', pink200: 'F48FB1', pink300: 'F06292', pink400: 'EC407A', pink500: 'E91E63', pink600: 'D81B60', pink700: 'C2185B', pink800: 'AD1457', pink900: '880E4F', //Pink
    
        pe: '9C27B0', pe50: 'F3E5F5', pe100: 'E1BEE7', pe200: 'CE93D8', pe300: 'BA68C8', pe400: 'AB47BC', pe500: '9C27B0', pe600: '8E24AA', pe700: '7B1FA2', pe800: '6A1B9A', pe900: '4A148C', //Purple
        purple: '9C27B0', purple50: 'F3E5F5', purple100: 'E1BEE7', purple200: 'CE93D8', purple300: 'BA68C8', purple400: 'AB47BC', purple500: '9C27B0', purple600: '8E24AA', purple700: '7B1FA2', purple800: '6A1B9A', purple900: '4A148C', //Purple
    
        dp: '673AB7', dp50: 'EDE7F6', dp100: 'D1C4E9', dp200: 'B39DDB', dp300: '9575CD', dp400: '7E57C2', dp500: '673AB7', dp600: '5E35B1', dp700: '512DA8', dp800: '4527A0', dp900: '311B92', //Deep Purple
        deeppurple: '673AB7', deeppurple50: 'EDE7F6', deeppurple100: 'D1C4E9', deeppurple200: 'B39DDB', deeppurple300: '9575CD', deeppurple400: '7E57C2', deeppurple500: '673AB7', deeppurple600: '5E35B1', deeppurple700: '512DA8', deeppurple800: '4527A0', deeppurple900: '311B92', //Deep Purple
    
        io: '3F51B5', io50: 'E8EAF6', io100: 'C5CAE9', io200: '9FA8DA', io300: '7986CB', io400: '5C6BC0', io500: '3F51B5', io600: '3949AB', io700: '303F9F', io800: '283593', io900: '1A237E', //Indigo
        indigo: '3F51B5', indigo50: 'E8EAF6', indigo100: 'C5CAE9', indigo200: '9FA8DA', indigo300: '7986CB', indigo400: '5C6BC0', indigo500: '3F51B5', indigo600: '3949AB', indigo700: '303F9F', indigo800: '283593', indigo900: '1A237E', //Indigo
    
        be: '2196F3', be50: 'E3F2FD', be100: 'BBDEFB', be200: '90CAF9', be300: '64B5F6', be400: '42A5F5', be500: '2196F3', be600: '1E88E5', be700: '1976D2', be800: '1565C0', be900: '0D47A1', //Blue
        blue: '2196F3', blue50: 'E3F2FD', blue100: 'BBDEFB', blue200: '90CAF9', blue300: '64B5F6', blue400: '42A5F5', blue500: '2196F3', blue600: '1E88E5', blue700: '1976D2', blue800: '1565C0', blue900: '0D47A1', //Blue
    
        lb: '03A9F4', lb50: 'E1F5FE', lb100: 'B3E5FC', lb200: '81D4FA', lb300: '4FC3F7', lb400: '29B6F6', lb500: '03A9F4', lb600: '039BE5', lb700: '0288D1', lb800: '0277BD', lb900: '01579B', //Light Blue
        lightblue: '03A9F4', lightblue50: 'E1F5FE', lightblue100: 'B3E5FC', lightblue200: '81D4FA', lightblue300: '4FC3F7', lightblue400: '29B6F6', lightblue500: '03A9F4', lightblue600: '039BE5', lightblue700: '0288D1', lightblue800: '0277BD', lightblue900: '01579B', //Light Blue
    
        cn: '00BCD4', cn50: 'E0F7FA', cn100: 'B2EBF2', cn200: '80DEEA', cn300: '4DD0E1', cn400: '26C6DA', cn500: '00BCD4', cn600: '00ACC1', cn700: '0097A7', cn800: '00838F', cn900: '006064', //Cyan
        cyan: '00BCD4', cyan50: 'E0F7FA', cyan100: 'B2EBF2', cyan200: '80DEEA', cyan300: '4DD0E1', cyan400: '26C6DA', cyan500: '00BCD4', cyan600: '00ACC1', cyan700: '0097A7', cyan800: '00838F', cyan900: '006064', //Cyan
    
        tl: '009688', tl50: 'E0F2F1', tl100: 'B2DFDB', tl200: '80CBC4', tl300: '4DB6AC', tl400: '26A69A', tl500: '009688', tl600: '00897B', tl700: '00796B', tl800: '00695C', tl900: '004D40', //Teal
        teal: '009688', teal50: 'E0F2F1', teal100: 'B2DFDB', teal200: '80CBC4', teal300: '4DB6AC', teal400: '26A69A', teal500: '009688', teal600: '00897B', teal700: '00796B', teal800: '00695C', teal900: '004D40', //Teal
    
        gn: '4CAF50', gn50: 'E8F5E9', gn100: 'C8E6C9', gn200: 'A5D6A7', gn300: '81C784', gn400: '66BB6A', gn500: '4CAF50', gn600: '43A047', gn700: '388E3C', gn800: '2E7D32', gn900: '1B5E20', //Green
        green: '4CAF50', green50: 'E8F5E9', green100: 'C8E6C9', green200: 'A5D6A7', green300: '81C784', green400: '66BB6A', green500: '4CAF50', green600: '43A047', green700: '388E3C', green800: '2E7D32', green900: '1B5E20', //Green
    
        lg: '8BC34A', lg50: 'F1F8E9', lg100: 'DCEDC8', lg200: 'C5E1A5', lg300: 'AED581', lg400: '9CCC65', lg500: '8BC34A', lg600: '7CB342', lg700: '689F38', lg800: '558B2F', lg900: '33691E', //Light Green
        lightgreen: '8BC34A', lightgreen50: 'F1F8E9', lightgreen100: 'DCEDC8', lightgreen200: 'C5E1A5', lightgreen300: 'AED581', lightgreen400: '9CCC65', lightgreen500: '8BC34A', lightgreen600: '7CB342', lightgreen700: '689F38', lightgreen800: '558B2F', lightgreen900: '33691E', //Light Green
    
        le: 'CDDC39', le50: 'F9FBE7', le100: 'F0F4C3', le200: 'E6EE9C', le300: 'DCE775', le400: 'D4E157', le500: 'CDDC39', le600: 'C0CA33', le700: 'AFB42B', le800: '9E9D24', le900: '827717', //Lime
        lime: 'CDDC39', lime50: 'F9FBE7', lime100: 'F0F4C3', lime200: 'E6EE9C', lime300: 'DCE775', lime400: 'D4E157', lime500: 'CDDC39', lime600: 'C0CA33', lime700: 'AFB42B', lime800: '9E9D24', lime900: '827717', //Lime
    
        yw: 'FFEB3B', yw50: 'FFFDE7', yw100: 'FFF9C4', yw200: 'FFF59D', yw300: 'FFF176', yw400: 'FFEE58', yw500: 'FFEB3B', yw600: 'FDD835', yw700: 'FBC02D', yw800: 'F9A825', yw900: 'F57F17', //Yellow
        yellow: 'FFEB3B', yellow50: 'FFFDE7', yellow100: 'FFF9C4', yellow200: 'FFF59D', yellow300: 'FFF176', yellow400: 'FFEE58', yellow500: 'FFEB3B', yellow600: 'FDD835', yellow700: 'FBC02D', yellow800: 'F9A825', yellow900: 'F57F17', //Yellow
    
        ar: 'FFC107', ar50: 'FFF8E1', ar100: 'FFECB3', ar200: 'FFE082', ar300: 'FFD54F', ar400: 'FFCA28', ar500: 'FFC107', ar600: 'FFB300', ar700: 'FFA000', ar800: 'FF8F00', ar900: 'FF6F00', //Amber
        amber: 'FFC107', amber50: 'FFF8E1', amber100: 'FFECB3', amber200: 'FFE082', amber300: 'FFD54F', amber400: 'FFCA28', amber500: 'FFC107', amber600: 'FFB300', amber700: 'FFA000', amber800: 'FF8F00', amber900: 'FF6F00', //Amber
    
        oe: 'FF9800', oe50: 'FFF3E0', oe100: 'FFE0B2', oe200: 'FFCC80', oe300: 'FFB74D', oe400: 'FFA726', oe500: 'FF9800', oe600: 'FB8C00', oe700: 'F57C00', oe800: 'EF6C00', oe900: 'E65100', //Orange
        orange: 'FF9800', orange50: 'FFF3E0', orange100: 'FFE0B2', orange200: 'FFCC80', orange300: 'FFB74D', orange400: 'FFA726', orange500: 'FF9800', orange600: 'FB8C00', orange700: 'F57C00', orange800: 'EF6C00', orange900: 'E65100', //Orange
    
        de: 'FF5722', de50: 'FBE9E7', de100: 'FFCCBC', de200: 'FFAB91', de300: 'FF8A65', de400: 'FF7043', de500: 'FF5722', de600: 'F4511E', de700: 'E64A19', de800: 'D84315', de900: 'BF360C', //Deep Orange
        deeporange: 'FF5722', deeporange50: 'FBE9E7', deeporange100: 'FFCCBC', deeporange200: 'FFAB91', deeporange300: 'FF8A65', deeporange400: 'FF7043', deeporange500: 'FF5722', deeporange600: 'F4511E', deeporange700: 'E64A19', deeporange800: 'D84315', deeporange900: 'BF360C', //Deep Orange
    
        bn: '795548', bn50: 'EFEBE9', bn100: 'D7CCC8', bn200: 'BCAAA4', bn300: 'A1887F', bn400: '8D6E63', bn500: '795548', bn600: '6D4C41', bn700: '5D4037', bn800: '4E342E', bn900: '3E2723', //Brown
        brown: '795548', brown50: 'EFEBE9', brown100: 'D7CCC8', brown200: 'BCAAA4', brown300: 'A1887F', brown400: '8D6E63', brown500: '795548', brown600: '6D4C41', brown700: '5D4037', brown800: '4E342E', brown900: '3E2723', //Brown
    
        gy: '9E9E9E', gy50: 'FAFAFA', gy100: 'F5F5F5', gy200: 'EEEEEE', gy300: 'E0E0E0', gy400: 'BDBDBD', gy500: '9E9E9E', gy600: '757575', gy700: '616161', gy800: '424242', gy900: '212121', //Grey
        grey: '9E9E9E', grey50: 'FAFAFA', grey100: 'F5F5F5', grey200: 'EEEEEE', grey300: 'E0E0E0', grey400: 'BDBDBD', grey500: '9E9E9E', grey600: '757575', grey700: '616161', grey800: '424242', grey900: '212121', //Grey
    
        by: '607D8B', by50: 'ECEFF1', by100: 'CFD8DC', by200: 'B0BEC5', by300: '90A4AE', by400: '78909C', by500: '607D8B', by600: '546E7A', by700: '455A64', by800: '37474F', by900: '263238', //Blue Grey
        bluegrey: '607D8B', bluegrey50: 'ECEFF1', bluegrey100: 'CFD8DC', bluegrey200: 'B0BEC5', bluegrey300: '90A4AE', bluegrey400: '78909C', bluegrey500: '607D8B', bluegrey600: '546E7A', bluegrey700: '455A64', bluegrey800: '37474F', bluegrey900: '263238', //Blue Grey
    
        bk: '000000', //Black
        black: '000000', //Black
    
        we: 'FFFFFF', //White
        white: 'FFFFFF' //White
      },
      examples: ['yw', 'rd500'],
      getValue: function (value) {
        return value_sets.hex_color.getValue(this.values[value]);
      },
      getObject: function (value) {
        return value_sets.hex_color.getObject(this.values[value]);
      }
    };
    
    value_sets.rgb_color = {
      regex: value_sets.integer_0_255.regex + '(?:_' + value_sets.integer_0_255.regex + '){2}',
      examples: ['0_0_0', '10_10_10', '100_100_100', '255_255_255'],
      getValue: function (value) {
        var splits = value.split('_');
        if (!(splits && splits.length == 3)) return null;
        var result = 'rgba(';
        result += splits[0] + ', ';
        result += splits[1] + ', ';
        result += splits[2];
        result += ', 100)';
        return result;
      },
      getObject: function (value) {
        var splits = value.split('_');
        if (!(splits && splits.length == 3)) return null;
        var result = {
          red: splits[0],
          green: splits[1],
          blue: splits[2]
        };
        return result;
      }
    };
    
    value_sets.rgba_color = {
      regex: '(?:' + value_sets.google_color.regex + '|' + value_sets.hex_color.regex + '|' + value_sets.rgb_color.regex + ')' + '(?:_' + value_sets.opacity.regex + ')?',
      examples: ['rd_0', 'yw500_25', '123456_50', '255_255_255_100', '255_255_255'],
      getValue: function (value) {
        var regex = new RegExp('(?:(' + value_sets.google_color.regex + ')|(' + value_sets.hex_color.regex + ')|(' + value_sets.rgb_color.regex + '))' + '(?:_(' + value_sets.opacity.regex + '))?');
        var matches = value.match(regex);
        var object_rgb, opacity, matches_each;
        if (matches[1]) {
          var regex_each = new RegExp('(' + value_sets.google_color.regex + ')(?:_(' + value_sets.opacity.regex + '))?');
          matches_each = value.match(regex_each);
          object_rgb = value_sets.google_color.getObject(matches_each[1]);
          if (matches_each[2]) opacity = value_sets.opacity.getValue(matches_each[2]);
        }
        else if (matches[2]) {
          var regex_each = new RegExp('(' + value_sets.hex_color.regex + ')(?:_(' + value_sets.opacity.regex + '))?');
          matches_each = value.match(regex_each);
          object_rgb = value_sets.hex_color.getObject(matches_each[1]);
          if (matches_each[2]) opacity = value_sets.opacity.getValue(matches_each[2]);
        }
        else if (matches[3]) {
          var regex_each = new RegExp('(' + value_sets.rgb_color.regex + ')(?:_(' + value_sets.opacity.regex + '))?');
          matches_each = value.match(regex_each);
          object_rgb = value_sets.rgb_color.getObject(matches_each[1]);
          if (matches_each[2]) opacity = value_sets.opacity.getValue(matches_each[2]);
        }
        if (!object_rgb) return null;
        if (matches_each[2]) {
          return 'rgba(' + object_rgb.red + ',' + object_rgb.green + ',' + object_rgb.blue + ',' + opacity + ')';
        } else {
          return 'rgb(' + object_rgb.red + ',' + object_rgb.green + ',' + object_rgb.blue + ')';
        }
      }
    };
    
    
    
    // GRADIENT
    
    value_sets.gradient = {
      regex: '(?:' + value_sets.gradient_kind.regex + '_)?' + '(?:' + value_sets.degree.regex + ')((?:_' + value_sets.rgba_color.regex + '){2,})',
      examples: ['l_30d_rd_oe_yw_gn_be_io_pe'],
      getValue: function (value) {
        var result = '';
        var regex = new RegExp('(?:(' + value_sets.gradient_kind.regex + ')_)?(' + value_sets.degree.regex + ')((?:_' + value_sets.rgba_color.regex + '){2,})');
        var matches = value.match(regex);
        var gradient_kind = null, degree = null, hour = null, rgba_colors = [];
        if (matches[1]) gradient_kind = value_sets.gradient_kind.getValue(matches[1]);
        if (matches[2]) degree = value_sets.degree.getValue(matches[2]);
        if (matches[3]) {
          var regex_rgba_color = new RegExp('(?:_(' + value_sets.rgba_color.regex + '))(?:_(' + value_sets.rgba_color.regex + '))');
          var matches_rgba_color = matches[3].match(regex_rgba_color);
          for (var i = 1; i < matches_rgba_color.length; i++) {
            var rgba_color = value_sets.rgba_color.getValue(matches_rgba_color[i]);
            if (rgba_color) rgba_colors.push(rgba_color);
          }
        }
        if (gradient_kind && degree && rgba_colors.length >= 1) {
          return gradient_kind + '(' + degree + ',' + rgba_colors.join(', ') + ')';
        }
      }
    };
    
    
    
    // SHADOW
    
    value_sets.shadow = {
      regex: value_sets.integer_3digits.regex + '(?:_' + value_sets.integer_3digits.regex + '){0,3}(?:_' + value_sets.rgba_color.regex + ')',
      examples: ['2_2_bk_30', '2_2_2_000000_50'],
      getValue: function (value) {
        var result = '';
        var regex = new RegExp('(' + value_sets.integer_3digits.regex + ')(?:_(' + value_sets.integer_3digits.regex + '))?(?:_(' + value_sets.integer_3digits.regex + '))?(?:_(' + value_sets.integer_3digits.regex + '))?(?:_(' + value_sets.rgba_color.regex + '))');
        var matches = value.match(regex);
        if (!(matches)) return null;
        var shadows = [];
        for (var i = 1; i <= 4; i++) { shadows.push(matches[i]); }
        result = shadows.join('px ') + value_sets.rgba_color.getValue(matches[5]);
        return result;
      }
    };
    
    
    
    // URL
    
    value_sets.file_name = {
      regex: '[a-zA-Z0-9_-]+',
      examples: ['aA0_zZ9'],
      getValue: function (value) { return value; }
    };
    
    value_sets.image_extension = {
      regex: '(?:png|jpg|gif|PNG|JPG|GIF)',
      examples: ['png', 'GIF'],
      getValue: function (value) { return value; }
    };
    
    value_sets.image_url = {
      regex: value_sets.file_name.regex + '([__]' + value_sets.file_name.regex + ')*' + '_' + value_sets.image_extension.regex,
      examples: ['images__image_png'],
      getValue: function (value) { return value; }
    };
    
    
    
    // VARIABLE
    
    value_sets.variable = {
      regex: '(?:[a-z]+)(?:[A-Z][a-z]+)*',
      examples: ['linear', 'ease', 'easeIn', 'easeOut', 'easeInOut'],
      getValue: function (value) {
        var result = value.replace(/[A-Z]/g, function (letter, index) {
          return index == 0 ? letter.toLowerCase() : '-' + letter.toLowerCase();
        }).replace(/\s+/g, '');
        return result;
      }
    };
    
    value_sets.variables = {
      regex: value_sets.variable.regex + '(?:_' + value_sets.variable.regex + ')*',
      examples: ['width_backgroundColor'],
      getValue: function (value) {
        var splits = value.split('_');
        var result = '';
        for (var i = 0; i < splits.length; i++) {
          if (result.length >= 1) { result += ' ' }
          result += value_sets.variable.getValue(splits[i]);
        }
        return result;
      }
    };
    

Q & A

  • I don't have cssist in window object.

: You can get cssist object from localStorage at DevTools' console window. window.cssist = JSON.parse(localStorage['cssist']); window.cssist Now, you can use cssist.

  • How to download css file?

: You can download css file at DevTools' console window. window.cssist.download();

  • How to test class(selector) or element?

You can test selectors, element, root-element.

- `startSelector` : Calculate the classes of element.
  ```
  cssist.testSelector('w-100');
  ```

  > Result
    ```
    {
        selector: "w-100",
        property: "width",
        value: "100%",
        event: undefined,
        media_query: null,
        rules: "width : 100%;	-webkit-width : 100%;	-moz-width : 100%; -o-width : 100%; -ms-width : 100%;"
        code: ".w-100 { width : 100%; -webkit-width : 100%; -moz-width : 100%; -o-width : 100%; -ms-width : 100%; }",
        valid: true
    }
    ```

- `startElement` : Calculate the classes of element.
  ```
  // Get element
  var element = document.createElement('div');
  element.setAttribute('class', 'w-100 h-100');

  cssist.testElement(element);
  ```

  > Result
    ```
    {
      selector: "w-100",
      property: "width",
      value: "100%",
      event: undefined,
      media_query: null,
      rules: "width : 100%;	-webkit-width : 100%;	-moz-width : 100%; -o-width : 100%; -ms-width : 100%;"
      code: ".w-100 { width : 100%; -webkit-width : 100%; -moz-width : 100%; -o-width : 100%; -ms-width : 100%; }",
      valid: true
    },
    {
      selector: "h-100",
      property: "height",
      value: "100%",
      event: undefined,
      media_query: null,
      rules: "height : 100%; -webkit-height : 100%; -moz-height : 100%; -o-height : 100%; -ms-height : 100%;",
      code: ".h-100 { height : 100%; -webkit-height : 100%; -moz-height : 100%; -o-height : 100%; -ms-height : 100%;}",
      valid: true
    }
    ```

* You can also use `startRootElement` for calculating all elements of given element including it.

About

Auto CSS, Cssist is a JavaScript library that automatically generates classes so that you can develop the web without css

Resources

Stars

Watchers

Forks

Packages

No packages published