diff --git a/README.md b/README.md
index 52411ab..ab816e3 100644
--- a/README.md
+++ b/README.md
@@ -846,7 +846,7 @@ Appends an icon after the element it's called on.
* `@height`: Height of the image
* `@nudge-right`: The value of the `right` property for the icon. Defaults to `0`.
* `@nudge-top`: The value of the `top` property for the icon. Defaults to `0`.
-* `@pad`: Left-padding (in addition to the width of the icon) to apply to the element. Defaults to `10px`
+* `@pad`: Right-padding (in addition to the width of the icon) to apply to the element. Defaults to `10px`
```css
/* Usage: */
@@ -926,7 +926,7 @@ Appends an icon taken from the sprite after the element it's called on.
* `@height`: Height of the image
* `@nudge-right`: The value of the `right` property for the icon. Defaults to `0`.
* `@nudge-top`: The value of the `top` property for the icon. Defaults to `0`.
-* `@pad`: Left-padding (in addition to the width of the icon) to apply to the element. Defaults to `10px`
+* `@pad`: Right-padding (in addition to the width of the icon) to apply to the element. Defaults to `10px`
* `@sprite-image`: The sprite image to use. Defaults to the globally defined `@sprite-image` value.
* `@sprite-grid`: The grid size used in the sprite. Defaults to the globally defined `@sprite-grid` value.
@@ -989,7 +989,7 @@ Adjusts the positioning of a appended sprite icon.
* `@x`: The x coordinate of the desired image on the grid.
* `@y`: The y coordinate of the desired image on the grid.
-* `@nudge-right`: The value of the `left` property for the icon. Defaults to `0`.
+* `@nudge-right`: The value of the `right` property for the icon. Defaults to `0`.
* `@nudge-top`: The value of the `top` property for the icon. Defaults to `0`.
* `@sprite-grid`: The grid size used in the sprite. Defaults to the globally defined `@sprite-grid` value.
@@ -1004,8 +1004,135 @@ Adjusts the positioning of a appended sprite icon.
}
```
+### .prepend-icon-setup()
+A [partial mixin](#optimising-output-using-partial-mixins) to generate common properties for prepended icon mixins.
+```css
+.prepend-icon-setup( [<@width>[, <@height>[, <@nudge-left>[, <@nudge-top>[, <@pad>]]]]] );
+```
+
+* `@width`: Width of the image. Defaults to not being set.
+* `@height`: Height of the image. Defaults to not being set.
+* `@nudge-left`: The value of the `left` property for the icon. Defaults to not being set.
+* `@nudge-top`: The value of the `top` property for the icon. Defaults to not being set.
+* `@pad`: Left-padding (in addition to the width of the icon) to apply to the element. Defaults to `10px`
+
+```css
+/* Usage: */
+.example {
+ .prepend-icon-setup( 32px, 15px );
+}
+/* Example output: */
+.example {
+ position: relative;
+}
+.example:before {
+ position: absolute;
+ display: block;
+ content: ' ';
+ top: 0;
+ left: 0;
+ width: 32px;
+ height: 15px;
+}
+```
+
+### .append-icon-setup()
+
+A [partial mixin](#optimising-output-using-partial-mixins) to generate common properties for appended icon mixins.
+
+```css
+.append-icon-setup( [<@width>[, <@height>[, <@nudge-right>[, <@nudge-top>[, <@pad>]]]]] );
+```
+
+* `@width`: Width of the image. Defaults to not being set.
+* `@height`: Height of the image. Defaults to not being set.
+* `@nudge-right`: The value of the `right` property for the icon. Defaults to not being set.
+* `@nudge-top`: The value of the `top` property for the icon. Defaults to not being set.
+* `@pad`: Right-padding (in addition to the width of the icon) to apply to the element. Defaults to `10px`
+
+```css
+/* Usage: */
+.example {
+ .append-icon-setup( 32px, 15px );
+}
+/* Example output: */
+.example {
+ position: relative;
+}
+.example:after {
+ position: absolute;
+ display: block;
+ content: ' ';
+ top: 0;
+ right: 0;
+ width: 32px;
+ height: 15px;
+}
+```
+
+### .prepend-icon-image()
+
+A [partial mixin](#optimising-output-using-partial-mixins) to generate image-specific properties for prepended icon mixins. Likely to be used in combination with the `.prepend-icon-setup()` mixin above.
+
+```css
+.prepend-icon-image( <@icon-image>[, <@width>[, <@height>[, <@nudge-left>[, <@nudge-top>[, <@pad>]]]]] );
+```
+
+* `@icon-image`: URL or data URI of an image to use for the prepended icon
+* `@width`: Width of the image. Defaults to not being set.
+* `@height`: Height of the image. Defaults to not being set.
+* `@nudge-left`: The value of the `left` property for the icon. Defaults to not being set.
+* `@nudge-top`: The value of the `top` property for the icon. Defaults to not being set.
+* `@pad`: Left-padding (in addition to the width of the icon) to apply to the element. Defaults to `10px`
+
+```css
+/* Usage: */
+.example {
+ .prepend-icon-image( 'img/icon.png', 12px, 12px );
+}
+/* Example output: */
+.example {
+ padding-left: 22px;
+}
+.example:before {
+ background: url('img/icon.png') no-repeat 0 0;
+ width: 12px;
+ height: 12px;
+}
+```
+
+### .append-icon-image()
+
+A [partial mixin](#optimising-output-using-partial-mixins) to generate image-specific properties for appended icon mixins. Likely to be used in combination with the `.append-icon-setup()` mixin above.
+
+```css
+.append-icon-image( <@icon-image>[, <@width>[, <@height>[, <@nudge-right>[, <@nudge-top>[, <@pad>]]]]] );
+```
+
+* `@icon-image`: URL or data URI of an image to use for the prepended icon
+* `@width`: Width of the image. Defaults to not being set.
+* `@height`: Height of the image. Defaults to not being set.
+* `@nudge-right`: The value of the `right` property for the icon. Defaults to not being set.
+* `@nudge-top`: The value of the `top` property for the icon. Defaults to not being set.
+* `@pad`: Right-padding (in addition to the width of the icon) to apply to the element. Defaults to `10px`
+
+```css
+/* Usage: */
+.example {
+ .append-icon-image( 'img/icon.png', 12px, 12px );
+}
+/* Example output: */
+.example {
+ padding-right: 22px;
+}
+.example:after {
+ background: url('img/icon.png') no-repeat 0 0;
+ width: 12px;
+ height: 12px;
+}
+```
Grids
-------
diff --git a/examples/css/example.css b/examples/css/example.css
index b0261f3..899ea5e 100644
--- a/examples/css/example.css
+++ b/examples/css/example.css
@@ -513,18 +513,39 @@ h2 {
.icon-nav .ghosts a:hover:before {
background-position: -50px -150px;
}
-.icon.twitter {
+.social {
+ display: inline-block;
position: relative;
padding-left: 42px;
+ padding-top: 7px;
+ padding-bottom: 7px;
+ margin-bottom: 10px;
}
-.icon.twitter:before {
+.ie7 .social {
+ display: inline;
+ zoom: 1;
+}
+.social:before {
position: absolute;
display: block;
content: ' ';
- background: url('../img/twitter-32x32.png') no-repeat 0 0;
+ top: 0;
+ left: 0;
width: 32px;
height: 32px;
- top: -8px;
- left: 0;
+}
+.social--twitter {
+ padding-left: 22px;
+}
+.social--twitter:before {
+ background: url('../img/twitter-32x32.png') no-repeat 0 0;
+ width: 12px;
+ height: 12px;
+}
+.social--feed:before {
+ background: url('../img/feed-32x32.png') no-repeat 0 0;
+}
+.social--huffduffer:before {
+ background: url('../img/huffduffer-32x32.png') no-repeat 0 0;
}
/* Other Helpers */
diff --git a/examples/img/feed-32x32.png b/examples/img/feed-32x32.png
new file mode 100644
index 0000000..04a1f09
Binary files /dev/null and b/examples/img/feed-32x32.png differ
diff --git a/examples/img/huffduffer-32x32.png b/examples/img/huffduffer-32x32.png
new file mode 100644
index 0000000..3b15ada
Binary files /dev/null and b/examples/img/huffduffer-32x32.png differ
diff --git a/examples/less/example.less b/examples/less/example.less
index d12044f..92024f3 100644
--- a/examples/less/example.less
+++ b/examples/less/example.less
@@ -276,10 +276,26 @@ h2 {
}
}
-.icon.twitter {
- .prepend-icon('../img/twitter-32x32.png', 32px, 32px, 0, -8px);
+
+.social {
+ .inline-block();
+ .prepend-icon-setup(32px, 32px, 10px);
+ padding-top: 7px;
+ padding-bottom: 7px;
+ margin-bottom: 10px;
}
+.social--twitter {
+ .prepend-icon-image('../img/twitter-32x32.png', 12px, 12px);
+}
+.social--feed {
+ .prepend-icon-image('../img/feed-32x32.png');
+}
+.social--huffduffer {
+ .prepend-icon-image('../img/huffduffer-32x32.png');
+}
+
+
/* Other Helpers */
diff --git a/examples/sprites.html b/examples/sprites.html
index 4d200ce..07da1cc 100644
--- a/examples/sprites.html
+++ b/examples/sprites.html
@@ -36,8 +36,12 @@
diff --git a/mixins/helpers.less b/mixins/helpers.less
index b5ee30e..a79fafc 100644
--- a/mixins/helpers.less
+++ b/mixins/helpers.less
@@ -202,10 +202,10 @@
// System --------------------------------
.nudge-l( @pos ) when ( @pos = 0 ) {}
-.nudge-l( @pos ) when ( @pos > 0 ) { left: @pos; }
+.nudge-l( @pos ) when not ( @pos = 0 ) { left: @pos; }
.nudge-r( @pos ) when ( @pos = 0 ) {}
-.nudge-r( @pos ) when ( @pos > 0 ) { right: @pos; }
+.nudge-r( @pos ) when not ( @pos = 0 ) { right: @pos; }
.nudge-t( @pos ) when ( @pos = 0 ) {}
-.nudge-t( @pos ) when ( @pos > 0 ) { top: @pos; }
+.nudge-t( @pos ) when not ( @pos = 0 ) { top: @pos; }
.nudge-b( @pos ) when ( @pos = 0 ) {}
-.nudge-b( @pos ) when ( @pos > 0 ) { top: @pos; }
+.nudge-b( @pos ) when not ( @pos = 0 ) { bottom: @pos; }
diff --git a/mixins/icons.less b/mixins/icons.less
index 91615c4..a6bc33d 100644
--- a/mixins/icons.less
+++ b/mixins/icons.less
@@ -6,10 +6,10 @@
// Non-sprited icons --------------------------------
-.prepend-icon( @icon-image, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10 ) when (@using-modernizr) {
+.prepend-icon( @icon-image, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10px ) when (@using-modernizr) {
.generatedcontent & {
position: relative;
- padding-left: (@width + @pad) * 1px;
+ padding-left: @width + @pad;
}
.generatedcontent &:before {
._generated-icon( @width, @height, @icon-image );
@@ -18,9 +18,9 @@
}
}
-.prepend-icon( @icon-image, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10 ) when not (@using-modernizr) {
+.prepend-icon( @icon-image, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10px ) when not (@using-modernizr) {
position: relative;
- padding-left: (@width + @pad) * 1px;
+ padding-left: @width + @pad;
&:before {
._generated-icon( @width, @height, @icon-image );
top: @nudge-top;
@@ -28,10 +28,10 @@
}
}
-.append-icon( @icon-image, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10 ) when (@using-modernizr) {
+.append-icon( @icon-image, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10px ) when (@using-modernizr) {
.generatedcontent & {
position: relative;
- padding-right: (@width + @pad) * 1px;
+ padding-right: @width + @pad;
}
.generatedcontent &:after {
._generated-icon( @width, @height, @icon-image );
@@ -40,9 +40,9 @@
}
}
-.append-icon( @icon-image, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10 ) when not (@using-modernizr) {
+.append-icon( @icon-image, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10px ) when not (@using-modernizr) {
position: relative;
- padding-right: (@width + @pad) * 1px;
+ padding-right: @width + @pad;
.generatedcontent &:after {
._generated-icon( @width, @height, @icon-image );
top: @nudge-top;
@@ -52,10 +52,10 @@
// Sprited icons --------------------------------
-.prepend-sprite-icon(@x, @y, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when (@using-modernizr) {
+.prepend-sprite-icon(@x, @y, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10px, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when (@using-modernizr) {
.generatedcontent & {
position: relative;
- padding-left: (@width + @pad) * 1px;
+ padding-left: @width + @pad;
}
.generatedcontent &:before {
._generated-sprite-icon( @x, @y, @width, @height, @sprite-image, @sprite-grid );
@@ -64,9 +64,9 @@
}
}
-.prepend-sprite-icon(@x, @y, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when not (@using-modernizr) {
+.prepend-sprite-icon(@x, @y, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10px, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when not (@using-modernizr) {
position: relative;
- padding-left: (@width + @pad) * 1px;
+ padding-left: @width + @pad;
&:before {
._generated-sprite-icon( @x, @y, @width, @height, @sprite-image, @sprite-grid );
top: @nudge-top;
@@ -74,9 +74,9 @@
}
}
-.append-sprite-icon(@x, @y, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when (@using-modernizr) {
+.append-sprite-icon(@x, @y, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10px, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when (@using-modernizr) {
.generatedcontent & {
- padding-right: (@width + @pad) * 1px;
+ padding-right: @width + @pad;
position: relative;
}
.generatedcontent &:after {
@@ -86,9 +86,9 @@
}
}
-.append-sprite-icon(@x, @y, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when not (@using-modernizr) {
+.append-sprite-icon(@x, @y, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10px, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when not (@using-modernizr) {
position: relative;
- padding-right: (@width + @pad) * 1px;
+ padding-right: @width + @pad;
&:after {
._generated-sprite-icon( @x, @y, @width, @height, @sprite-image, @sprite-grid );
top: @nudge-top;
@@ -128,6 +128,105 @@
}
}
+// ---- Partials -----------------------
+
+.prepend-icon-setup(@width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when (@using-modernizr) {
+ .generatedcontent & {
+ position: relative;
+ ._pad-left(@width, @pad);
+ }
+ .generatedcontent &:before {
+ position: absolute;
+ display: block;
+ content: ' ';
+ top: 0;
+ left: 0;
+ ._size(@width, @height);
+ }
+}
+
+.prepend-icon-setup(@width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when not (@using-modernizr) {
+ position: relative;
+ ._pad-left(@width, @pad);
+ &:before {
+ position: absolute;
+ display: block;
+ content: ' ';
+ top: 0;
+ left: 0;
+ ._size(@width, @height);
+ }
+}
+
+.append-icon-setup(@width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when (@using-modernizr) {
+ .generatedcontent & {
+ position: relative;
+ ._pad-right(@width, @pad);
+ }
+ .generatedcontent &:after {
+ position: absolute;
+ display: block;
+ content: ' ';
+ top: 0;
+ right: 0;
+ ._size(@width, @height);
+ }
+}
+
+.append-icon-setup(@width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when not (@using-modernizr) {
+ position: relative;
+ ._pad-right(@width, @pad);
+ &:after {
+ position: absolute;
+ display: block;
+ content: ' ';
+ top: 0;
+ right: 0;
+ ._size(@width, @height);
+ }
+}
+
+.prepend-icon-image(@icon-image, @width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when (@using-modernizr) {
+ ._gc-pad-left(@width, @pad);
+ .generatedcontent &:before {
+ background: url(@icon-image) no-repeat 0 0;
+ ._size(@width, @height);
+ .nudge-l(@nudge-left);
+ .nudge-t(@nudge-top);
+ }
+}
+
+.prepend-icon-image(@icon-image, @width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when not (@using-modernizr) {
+ ._pad-left(@width, @pad);
+ &:before {
+ background: url(@icon-image) no-repeat 0 0;
+ ._size(@width, @height);
+ .nudge-l(@nudge-left);
+ .nudge-t(@nudge-top);
+ }
+}
+
+.append-icon-image(@icon-image, @width:0, @height:0, @nudge-right:0, @nudge-top:0, @pad:10px) when (@using-modernizr) {
+ ._gc-pad-right(@width, @pad);
+ .generatedcontent &:after {
+ background: url(@icon-image) no-repeat 0 0;
+ ._size(@width, @height);
+ .nudge-r(@nudge-right);
+ .nudge-t(@nudge-top);
+ }
+}
+
+.append-icon-image(@icon-image, @width:0, @height:0, @nudge-right:0, @nudge-top:0, @pad:10px) when not (@using-modernizr) {
+ ._pad-right(@width, @pad);
+ &:after {
+ background: url(@icon-image) no-repeat 0 0;
+ ._size(@width, @height);
+ .nudge-r(@nudge-right);
+ .nudge-t(@nudge-top);
+ }
+}
+
+
// ---- internal use mixins -----------------------
._generated-icon(@width, @height, @icon-image) {
@@ -144,3 +243,43 @@
content: ' ';
.sprite-sized(@x, @y, @width, @height, @sprite-image, @sprite-grid);
}
+
+._pad-left(@width, @pad) when (@width = 0) {}
+._pad-left(@width, @pad) when not (@width = 0) { padding-left: @width + @pad; }
+._pad-right(@width, @pad) when (@width = 0) {}
+._pad-right(@width, @pad) when not (@width = 0) { padding-right: @width + @pad; }
+
+._gc-pad-left(@width, @pad) when (@width = 0) {}
+._gc-pad-right(@width, @pad) when (@width = 0) {}
+
+._gc-pad-left(@width, @pad) when not (@width = 0) and (@using-modernizr) {
+ .generatedcontent & {
+ ._pad-left(@width, @pad);
+ }
+}
+._gc-pad-left(@width, @pad) when not (@width = 0) and not (@using-modernizr) {
+ ._pad-left(@width, @pad);
+}
+._gc-pad-right(@width, @pad) when not (@width = 0) {
+ .generatedcontent & {
+ ._pad-right(@width, @pad);
+ }
+}
+._gc-pad-right(@width, @pad) when not (@width = 0) and not (@using-modernizr) {
+ ._pad-right(@width, @pad);
+}
+
+._size(@width, @height) when (@width = 0) and (@height = 0) {}
+._size(@width, @height) when (@width = 0) and not (@height = 0) {
+ height: @height;
+}
+._size(@width, @height) when not (@width = 0) and (@height = 0) {
+ width: @width;
+}
+._size(@width, @height) when not (@width = 0) and not (@height = 0) {
+ width: @width;
+ height: @height;
+}
+
+
+