crispy-grid 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.md +71 -0
- data/lib/crispy-grid.rb +3 -0
- data/stylesheets/_crispy-grid.sass +9 -0
- data/stylesheets/crispy/_grid.sass +126 -0
- data/templates/project/_crispy-grid.sass +18 -0
- data/templates/project/manifest.rb +25 -0
- metadata +81 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2011 Christian Peters
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
# Crispy Grid
|
2
|
+
|
3
|
+
## Why should I use it?
|
4
|
+
|
5
|
+
In short, Crispy Grid closes the gap between easy-to-use grids for
|
6
|
+
simple web pages and doing everything by hand due to layout complexity.
|
7
|
+
|
8
|
+
### Reason 1: No need for bending CSS layout semantics
|
9
|
+
|
10
|
+
CSS grid frameworks like Blueprint and 960.gs try to realize their
|
11
|
+
higher level concepts using only margins and relative positioning.
|
12
|
+
|
13
|
+
Often, this is in conflict with CSS box semantics.
|
14
|
+
In CSS, whitespace surrounding content should be expressed as padding of
|
15
|
+
the containing element. Margins should be used for defining whitespace
|
16
|
+
among sibling elements.
|
17
|
+
|
18
|
+
A common workaround for paddings and margins within a grid is using inner
|
19
|
+
wrapping elements which are save to style. This is unsemantic and
|
20
|
+
clutters up the template.
|
21
|
+
|
22
|
+
Crispy respects padding and border box properties.
|
23
|
+
|
24
|
+
Unlike [Lucid Grid](https://github.com/ezYZ/lucid) (which I recommend as
|
25
|
+
an alternative), padding and border width can be set along with the
|
26
|
+
column width in one statement. Crispy does the calculation for you.
|
27
|
+
|
28
|
+
### Reason 2: There is no problem about being specific
|
29
|
+
|
30
|
+
Whenever you try to realize a page that simply does not fit into the
|
31
|
+
predefined columns, you are likely to catch yourself fighting with the grid.
|
32
|
+
Likewise, most grids are not meant to be applied on more than the big
|
33
|
+
containers (navigation, sidebar, main, etc.). Yet it would be nice to
|
34
|
+
have a tool for specifying the layout of the inner elements in a smart
|
35
|
+
way.
|
36
|
+
|
37
|
+
Crispy tries to support you even if you go beyond the main grid.
|
38
|
+
|
39
|
+
## Usage
|
40
|
+
|
41
|
+
Pending. Please have a look at the source.
|
42
|
+
|
43
|
+
## Installation
|
44
|
+
|
45
|
+
1. In your Gemfile add:
|
46
|
+
|
47
|
+
gem 'crispy-grid'
|
48
|
+
|
49
|
+
2. In your project configuration file (e.g. initializers/compass.rb)
|
50
|
+
add:
|
51
|
+
|
52
|
+
require 'crispy-grid'
|
53
|
+
|
54
|
+
3. Customize and import the grid in your application stylesheet:
|
55
|
+
|
56
|
+
// Grid Configuration
|
57
|
+
$grid-column-width: 30px
|
58
|
+
$grid-gutter-width: 10px
|
59
|
+
$grid-columns: 25
|
60
|
+
|
61
|
+
@import crispy-grid
|
62
|
+
|
63
|
+
## License
|
64
|
+
|
65
|
+
See MIT-LICENSE.
|
66
|
+
|
67
|
+
## TODO
|
68
|
+
|
69
|
+
- Make use of @extend in order to reduce CSS output
|
70
|
+
- Return calculation of inner box width for further use as column width
|
71
|
+
of children
|
data/lib/crispy-grid.rb
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
// Derived Variables
|
2
|
+
//==================
|
3
|
+
// Note that the gutter is only between the columns, i.e. you have 1 gutter less than columns
|
4
|
+
$grid-gutters: $grid-columns - 1
|
5
|
+
// These default settings result in a grid-width of 990 px
|
6
|
+
$grid-width: $grid-column-width * $grid-columns + $grid-gutter-width * $grid-gutters
|
7
|
+
|
8
|
+
// Public Methods
|
9
|
+
//===============
|
10
|
+
|
11
|
+
// Main Grid Helper Methods
|
12
|
+
//-------------------------
|
13
|
+
// $colspan should be the number of grid columns. You can override it with a fixed width if you must.
|
14
|
+
// You can also give a $padding and a $border-width, which is applied to both left and right by default.
|
15
|
+
// It is ensured that you do not break the grid by setting padding and a border.
|
16
|
+
// In order to differentiate between left and right padding/border-width you can set $different-right-padding/-border-width.
|
17
|
+
// Example: +grid(4, 10px, 15px) will set padding-left: 10px, padding-right: 15px and the element will have the same overall width as +grid(4).
|
18
|
+
// By default, the gutter is represented using margin-right, which can also be overridden.
|
19
|
+
=column($colspan, $padding: 0, $differing-right-padding: false, $border-width: 0, $differing-right-border-width: false, $gutter: $grid-gutter-width, $left-gutter: false, $subtract-border-from: false)
|
20
|
+
+column-behavior
|
21
|
+
+column-metrics($colspan, $padding, $differing-right-padding, $border-width, $differing-right-border-width, $gutter, $left-gutter, $subtract-border-from: $subtract-border-from)
|
22
|
+
|
23
|
+
// The last column should not have a gutter.
|
24
|
+
// Respectively, $gutter defaults to 0 in this mixin.
|
25
|
+
=last-column($colspan, $padding: 0, $differing-right-padding: false, $border-width: 0, $differing-right-border-width: false, $gutter: 0, $left-gutter: false, $subtract-border-from: false)
|
26
|
+
+column($colspan, $padding, $differing-right-padding, $border-width, $differing-right-border-width, $gutter, $left-gutter, $subtract-border-from)
|
27
|
+
|
28
|
+
// The only difference between the last and other columns is that the last column has margin-right set to 0.
|
29
|
+
=last
|
30
|
+
margin-right: 0
|
31
|
+
|
32
|
+
// A row spans the whole grid width, i.e. it is the only column in a row. This is just a more elegant way for writing +last-column($grid-columns).
|
33
|
+
=row($colspan: $grid-columns, $padding: 0, $differing-right-padding: false, $border-width: 0, $differing-right-border-width: false, $gutter: 0, $left-gutter: false, $subtract-border-from: false)
|
34
|
+
+last-column($colspan, $padding, $differing-right-padding, $border-width, $differing-right-border-width, $gutter, $left-gutter, $subtract-border-from)
|
35
|
+
|
36
|
+
// Use this mixin for your (none-floating) grid container.
|
37
|
+
// By default, it spans the whole grid-width and is centered.
|
38
|
+
// Unlike with columns, paddings and borders of a container do not affect its inner width
|
39
|
+
=grid-container($colspan: $grid-columns, $padding: 0, $differing-right-padding: false, $border-width: 0, $differing-right-border-width: false, $left-margin: auto, $right-margin: auto)
|
40
|
+
+column-metrics($colspan, $padding, $differing-right-padding, $border-width, $differing-right-border-width, $right-margin, $left-margin, true)
|
41
|
+
// As this grid system bases on the Float (Nearly) Everything method, this is necessary to enforce the container to enclose its content.
|
42
|
+
overflow: hidden
|
43
|
+
|
44
|
+
// Internal Methods
|
45
|
+
//=================
|
46
|
+
=column-behavior
|
47
|
+
float: left
|
48
|
+
|
49
|
+
=column-metrics($column-width, $padding: 0, $differing-right-padding: false, $border-width: 0, $differing-right-border-width: false, $gutter: $grid-gutter-width, $left-gutter: false, $container: false, $subtract-border-from: false)
|
50
|
+
// Convert column counts to widths with unit
|
51
|
+
$column-width: colspan-to-width($column-width)
|
52
|
+
$padding: colspan-to-width($padding, $include-last-gutter: true)
|
53
|
+
$differing-right-padding: colspan-to-width($differing-right-padding, $include-last-gutter: true)
|
54
|
+
$border-width: colspan-to-width($border-width, $include-last-gutter: true)
|
55
|
+
$differing-right-border-width: colspan-to-width($differing-right-border-width, $include-last-gutter: true)
|
56
|
+
@if is_column_count($gutter)
|
57
|
+
// It is assumed that the original gutter should also be preserved in addition to the one of the last column
|
58
|
+
$gutter: $grid-gutter-width + colspan-to-width($gutter, $include-last-gutter: true)
|
59
|
+
@if is_column_count($left-gutter)
|
60
|
+
$left-gutter: colspan-to-width($left-gutter, $include-last-gutter: true)
|
61
|
+
|
62
|
+
// Calculate derived metrics
|
63
|
+
$right-border-width: right-value($border-width, $differing-right-border-width)
|
64
|
+
$border-width-sum: left-and-right-sum($border-width, $differing-right-border-width)
|
65
|
+
$left-padding: if(($subtract-border-from == 'padding' or $subtract-border-from == 'left-padding') and $padding > 0, $padding - $border-width, $padding)
|
66
|
+
$right-padding: right-value($padding, $differing-right-padding)
|
67
|
+
$right-padding: if(($subtract-border-from == 'padding' or $subtract-border-from == 'right-padding') and $padding > 0, $right-padding - $right-border-width, $right-padding)
|
68
|
+
$padding-sum: left-and-right-sum($left-padding, $right-padding)
|
69
|
+
|
70
|
+
// Setting width
|
71
|
+
@if $container
|
72
|
+
// Paddings and borders do not affect the inner width of a container.
|
73
|
+
width: $column-width
|
74
|
+
@else
|
75
|
+
// Paddings and borders do not affect the outer width of a column.
|
76
|
+
width: $column-width - $padding-sum - $border-width-sum
|
77
|
+
|
78
|
+
// Setting other box attributes
|
79
|
+
padding:
|
80
|
+
left: $left-padding
|
81
|
+
right: $right-padding
|
82
|
+
border:
|
83
|
+
left-width: $border-width
|
84
|
+
right-width: $right-border-width
|
85
|
+
@if type_of($left-gutter) == number
|
86
|
+
margin-left: if(($subtract-border-from == 'gutter' or $subtract-border-from == 'left-gutter') and $left-gutter > 0, $gutter - $border-width, $left-gutter)
|
87
|
+
@else if $left-gutter
|
88
|
+
margin-left: $left-gutter
|
89
|
+
@if type_of($gutter) == number
|
90
|
+
margin-right: if(($subtract-border-from == 'gutter' or $subtract-border-from == 'right-gutter') and $gutter > 0, $gutter - $right-border-width, $gutter)
|
91
|
+
@else if $gutter
|
92
|
+
margin-right: $gutter
|
93
|
+
|
94
|
+
@function colspan-to-width($colspan, $include-last-gutter: false)
|
95
|
+
@if is_column_count($colspan)
|
96
|
+
@return column-count-to-width($colspan, $include-last-gutter)
|
97
|
+
@else
|
98
|
+
@return $colspan
|
99
|
+
|
100
|
+
@function is_column_count($colspan)
|
101
|
+
@if type_of($colspan) == 'number'
|
102
|
+
@if unitless($colspan) and $colspan > 0
|
103
|
+
@return true
|
104
|
+
@return false
|
105
|
+
|
106
|
+
@function column-count-to-width($column-count, $include-last-gutter: false)
|
107
|
+
@if $include-last-gutter
|
108
|
+
@return ($grid-column-width + $grid-gutter-width) * $column-count
|
109
|
+
@else
|
110
|
+
@return $grid-column-width * $column-count + $grid-gutter-width * ($column-count - 1)
|
111
|
+
|
112
|
+
// adds to comparable values or doubles the first one
|
113
|
+
@function left-and-right-sum($value, $differing-right-value)
|
114
|
+
@if type-of($differing-right-value) == number
|
115
|
+
@if comparable($value, $differing-right-value)
|
116
|
+
@return $value + $differing-right-value
|
117
|
+
@else
|
118
|
+
@warn "It is not possible to compute the sum of #{$value} and #{$differing-right-value}. Please make them comparable. Meanwhile, the result is set to #{$value * 2}."
|
119
|
+
@return $value * 2
|
120
|
+
|
121
|
+
// returns value unless numeric differing-right-value is given
|
122
|
+
@function right-value($value, $differing-right-value: false)
|
123
|
+
@if type-of($differing-right-value) == number
|
124
|
+
@return $differing-right-value
|
125
|
+
@else
|
126
|
+
@return $value
|
@@ -0,0 +1,18 @@
|
|
1
|
+
// Crispy Grid Configuration
|
2
|
+
//==========================
|
3
|
+
// Copy this into your app in order to customize the grid
|
4
|
+
|
5
|
+
// Grid Configuration
|
6
|
+
$grid-column-width: 30px
|
7
|
+
$grid-gutter-width: 10px
|
8
|
+
$grid-columns: 25
|
9
|
+
|
10
|
+
// Note that that there is always one gutter between two columns
|
11
|
+
// $grid-gutters: $grid-columns - 1
|
12
|
+
|
13
|
+
// The grid width is calculated from the values above
|
14
|
+
// $grid-width: $grid-column-width * $grid-columns + $grid-gutter-width * $grid-gutters
|
15
|
+
// For the default values, that is 30px * 25 + 10px * 24 = 990px
|
16
|
+
|
17
|
+
// This import statement has to be included in your application stylesheet
|
18
|
+
@import crispy-grid
|
@@ -0,0 +1,25 @@
|
|
1
|
+
stylesheet '_crispy-grid.sass', :media => 'screen, projection'
|
2
|
+
|
3
|
+
description "A Compass-based Grid that strives for lean & sane CSS and supports complex layouts"
|
4
|
+
|
5
|
+
help %Q{
|
6
|
+
|
7
|
+
--- Crispy Grid ---
|
8
|
+
|
9
|
+
A Compass-based Grid that strives for lean & sane CSS and supports complex layouts
|
10
|
+
|
11
|
+
For documentation, see crispy/_grid.sass
|
12
|
+
|
13
|
+
}
|
14
|
+
|
15
|
+
welcome_message %Q{
|
16
|
+
|
17
|
+
|
18
|
+
--- Crispy Grid ---
|
19
|
+
|
20
|
+
A Compass-based Grid that strives for lean & sane CSS and supports complex layouts
|
21
|
+
|
22
|
+
For documentation, see crispy/_grid.sass
|
23
|
+
|
24
|
+
}
|
25
|
+
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: crispy-grid
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.3
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Christian Peters
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-11-16 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: compass
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0.11"
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: sass
|
28
|
+
prerelease: false
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 3.1.0
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id002
|
37
|
+
description: In short, Crispy Grid closes the gap between easy-to-use grids for simple web pages and doing everything by hand due to layout complexity.
|
38
|
+
email: info@c-peters.net
|
39
|
+
executables: []
|
40
|
+
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files: []
|
44
|
+
|
45
|
+
files:
|
46
|
+
- README.md
|
47
|
+
- MIT-LICENSE
|
48
|
+
- lib/crispy-grid.rb
|
49
|
+
- stylesheets/_crispy-grid.sass
|
50
|
+
- stylesheets/crispy/_grid.sass
|
51
|
+
- templates/project/_crispy-grid.sass
|
52
|
+
- templates/project/manifest.rb
|
53
|
+
homepage: https://github.com/ChristianPeters/crispy-grid
|
54
|
+
licenses: []
|
55
|
+
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: "0"
|
73
|
+
requirements: []
|
74
|
+
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 1.8.7
|
77
|
+
signing_key:
|
78
|
+
specification_version: 3
|
79
|
+
summary: A Compass-based Grid that strives for lean & sane CSS and supports complex layouts
|
80
|
+
test_files: []
|
81
|
+
|