@mixin spacing($collection: ('', -top, -right, -bottom, -left), $directions: (-sides, -verticals)) {
    @each $side in $collection {

        %margin#{$side}-half,
        .margin#{$side}-half {margin#{$side}:$space/2;}
        %margin#{$side},
        .margin#{$side} {margin#{$side}:$space;}

        @for $i from 2 through 5 {
            %margin#{$side}-#{$i}x,
            .margin#{$side}-#{$i}x {
                margin#{$side}:$space*($i);
            }
        }

        %margin#{$side}-2halfx,
        .margin#{$side}-2halfx {margin#{$side}:$space*2.5;}

        %padding#{$side}-half,
        .padding#{$side}-half {padding#{$side}:$space/2;}
        %padding#{$side},
        .padding#{$side} {padding#{$side}:$space;}

        @for $i from 2 through 5 {
            %padding#{$side}-#{$i}x,
            .padding#{$side}-#{$i}x {
                padding#{$side}:$space*($i);
            }
        }

        %padding#{$side}-2halfx,
        .padding#{$side}-2halfx {padding#{$side}:$space*2.5;}
    }

    @each $dir in $directions {
        %margin#{$dir}-half,
        .margin#{$dir}-half {
            @if ($dir == '-sides') {
                margin-left:$space/2;
                margin-right:$space/2;
            } @else {
                margin-top:$space/2;
                margin-bottom:$space/2;
            }
        }
        %margin#{$dir},
        .margin#{$dir} {
            @if ($dir == '-sides') {
                margin-left:$space;
                margin-right:$space;
            } @else {
                margin-top:$space;
                margin-bottom:$space;
            }
        }
        %padding#{$dir}-half,
        .padding#{$dir}-half {
            @if ($dir == '-sides') {
                padding-left:$space/2;
                padding-right:$space/2;
            } @else {
                padding-top:$space/2;
                padding-bottom:$space/2;
            }
        }
        %padding#{$dir},
        .padding#{$dir} {
            @if ($dir == '-sides') {
                padding-left:$space;
                padding-right:$space;
            } @else {
                padding-top:$space;
                padding-bottom:$space;
            }
        }
        @for $i from 2 through 5 {
            %margin#{$dir}-#{$i}x,
            .margin#{$dir}-#{$i}x {
                @if ($dir == '-sides') {
                    margin-left:$space*($i);
                    margin-right:$space*($i);
                } @else {
                    margin-top:$space*($i);
                    margin-bottom:$space*($i);
                }
            }
            %padding#{$dir}-#{$i}x,
            .padding#{$dir}-#{$i}x {
                @if ($dir == '-sides') {
                    padding-left:$space*($i);
                    padding-right:$space*($i);
                } @else {
                    padding-top:$space*($i);
                    padding-bottom:$space*($i);
                }
            }
        }

        %margin#{$dir}-2halfx,
        .margin#{$dir}-2halfx {
            @if ($dir == '-sides') {
                margin-left:$space*2.5;
                margin-right:$space*2.5;
            } @else {
                margin-top:$space*2.5;
                margin-bottom:$space*2.5;
            }
        }

        %padding#{$dir}-2halfx,
        .padding#{$dir}-2halfx {
            @if ($dir == '-sides') {
                padding-left:$space*2.5;
                padding-right:$space*2.5;
            } @else {
                padding-top:$space*2.5;
                padding-bottom:$space*2.5;
            }
        }
    }
}

@include spacing();