Gridstack.js: ๊ฐœ์„  ์ œ์•ˆ

์— ๋งŒ๋“  2015๋…„ 03์›” 02์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: gridstack/gridstack.js

์ด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด ๋งŒ๋“  ์•ฝ๊ฐ„์˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•จ๊ป˜ SASS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ด ์ž‘์€ ์กฐ๊ฐ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ๋ฆฌ๋“œ๋ฅผ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

.grid-stack-item {

    $gridstack-columns: 12;

    <strong i="7">@for</strong> $i from 1 through $gridstack-columns {
        &[data-gs-width='#{$i}'] { width: (100% / $gridstack-columns) * $i; }
        &[data-gs-x='#{$i}'] { left: (100% / $gridstack-columns) * $i; }
        &.grid-stack-item[data-gs-min-width='#{$i}'] { min-width: (100% / $gridstack-columns) * $i; }
        &.grid-stack-item[data-gs-max-width='#{$i}'] { max-width: (100% / $gridstack-columns) * $i; }
    }
}

๋ชจ๋“  6 ๋Œ“๊ธ€

๊ท€ํ•˜์˜ ์Šค๋‹ˆํŽซ์œผ๋กœ README๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ™”์— ๋Šฆ์—ˆ์ง€๋งŒ ๋ฐ˜์‘ํ˜• ๋ฐ ์œ ๋™์ ์ด๋ผ๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์†์„ ๋งž๋Œ€๊ณ  ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฑ๋ถ„์œจ ๋˜๋Š” ํ”ฝ์…€ ๋‹จ์œ„์˜ ๋„ˆ๋น„ ๋ณ€์ˆ˜๋ฅผ ์›ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€๋Š” ๋ฐ˜์‘ํ˜• ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ฐ˜์‘ํ˜• ์œ„์ ฏ์ด๋ฏ€๋กœ ๋•Œ๋•Œ๋กœ ํ”ฝ์…€ ์น˜์ˆ˜๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ๋‚˜์œ ์ƒ๊ฐ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ•ด๋‹น ๋…ผ๋ฆฌ๋ฅผ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์— ๋„ฃ์œผ๋ฉด ๋‹ค๋ฅธ ํ”ฝ์…€/๋ฐฑ๋ถ„์œจ ๊ธฐ๋ฐ˜ ์œ„์ ฏ ํฌ๊ธฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$gridstack-columns: 12;
$resolution: 1440px;

<strong i="7">@media</strong> (min-width: 1440px) {
   .container {
      .grid-stack {
         .grid-stack-item {
            position: absolute !important;

            <strong i="8">@for</strong> $i from 1 through $gridstack-columns {
               &[data-gs-width='#{$i}'] { width: ($resolution / $gridstack-columns) * $i; }
               &[data-gs-x='#{$i}'] { left: ($resolution / $gridstack-columns) * $i; }
               &.grid-stack-item[data-gs-min-width='#{$i}'] { min-width: ($resolution / $gridstack-columns) * $i; }
               &.grid-stack-item[data-gs-max-width='#{$i}'] { max-width: ($resolution / $gridstack-columns) * $i; }
            }
         }
      }
   }
}

๋‹ค์Œ์€ ๋œ CSS ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

<strong i="6">@columns</strong>: 6;
.gs-item(@n) when (<strong i="7">@n</strong> > 0) {
  .gs-item(<strong i="8">@n</strong> - 1);

  &[data-gs-width="@{n}"] { width: (100% / @columns) * @n; }
  &[data-gs-x="@{n}"] { left: (100% / @columns) * @n; }
  &[data-gs-min-width="@{n}"] { min-width: (100% / @columns) * @n; }
  &[data-gs-max-width="@{n}"] { max-width: (100% / @columns) * @n; }
}

.grid-stack-item {
  .gs-item(@columns);
}

@ascendantofrain @cspeer @troolee @radiolips ์ด๊ฒŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?
๋‚˜๋Š” ์—ด์„ 36์œผ๋กœ ๋งŒ๋“ค๊ณ , sass๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ, ๋„ˆ๋น„๋Š” ์ด์ œ 36 ์—ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ %s๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋Œ์–ด์„œ ๋†“๊ธฐ์— ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. 36์—ด ๊ทธ๋ฆฌ๋“œ์—์„œ ๋Œ์–ด๋‹ค ๋†“์„ ์ˆ˜ ์—†์œผ๋ฉฐ ์—ฌ๊ธฐ ์ €๊ธฐ๋กœ ๊ณ„์† ์›€์ง์ž…๋‹ˆ๋‹ค. js ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋„ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๊นŒ? ์•ˆ๋‹ฎ์Œ...

@mandys @ascendantofrain ํ•ต์‹ฌ gridstack.css ์Šคํƒ€์ผ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์žฌ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

.grid-stack > .grid-stack-item {

    $gridstack-columns: 200;

    <strong i="8">@for</strong> $i from 1 through $gridstack-columns {
        &[data-gs-width='#{$i}'] { width: (100% / $gridstack-columns) * $i; }
        &[data-gs-x='#{$i}'] { left: (100% / $gridstack-columns) * $i; }
        &.grid-stack-item[data-gs-min-width='#{$i}'] { min-width: (100% / $gridstack-columns) * $i; }
        &.grid-stack-item[data-gs-max-width='#{$i}'] { max-width: (100% / $gridstack-columns) * $i; }
    }
}

ํ•˜์ง€๋งŒ ์•„์ดํ…œ์ด ๊ฒน์น˜๋Š” ๋ฌธ์ œ๋Š” ์•„์ง ํ’€์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„์ „ 0.3์—์„œ ์ž‘๋™ํ•˜๋ ค๋ฉด min-width ๋„ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค(์ค‘๋ณต ๋ฌธ์ œ btw๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ).

.grid-stack > .grid-stack-item {

    $gridstack-columns: 36;

    <strong i="7">@for</strong> $i from 1 through $gridstack-columns {
        &[data-gs-width='#{$i}'] { 
          width: (100% / $gridstack-columns) * $i;
          min-width: (100% / $gridstack-columns) * $i; 
        }
        &[data-gs-x='#{$i}'] { left: (100% / $gridstack-columns) * $i; }
        &.grid-stack-item[data-gs-min-width='#{$i}'] { min-width: (100% / $gridstack-columns) * $i; }
        &.grid-stack-item[data-gs-max-width='#{$i}'] { max-width: (100% / $gridstack-columns) * $i; }
    }
}
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰