JSPM

postcss-text-remove-gap

1.1.1
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 39
  • Score
    100M100P100Q64521F
  • License MIT

Remove space before and after text strings, added by line-height and extra space in glyph itself.

Package Exports

  • postcss-text-remove-gap

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (postcss-text-remove-gap) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

postcss-text-remove-gap

PostCSS plugin to remove space before and after text strings, added by line-height and extra space in glyph itself.

New CSS property:

text-remove-gap: outside? <type> <line-height>? <font-family>?;
  • outside – if specified, remove gaps outside the block (using margins on block itself instead of margins of internal pseudo-elements).
  • type – is only required value, can be:
    • before – remove gap before (above) block,
    • after – remove gap after (below) block,
    • both – remove gaps before and after block.
  • line-height – overwrite line-height value.
  • font-family – overwrite font-family value.

Example

Illustration:

Before:
Block with red border and two paragraphs inside. There is some space before 
and after paragraph of text.

After:
Block with red border and two paragraphs inside. There is no space before 
and after paragraph of text.

Input:

p
{
    font: 16px/1.5 "Arial", sans-serif;
    text-remove-gap: both;
}

Output:

p
{
    font: 16px/1.5 "Arial", sans-serif;
}
p::before
{
    display: block;
    content: "";
    margin-bottom: -0.63em;
}
p::after
{
    display: block;
    content: "";
    margin-top: -0.67em;
}

Input:

p
{
    font-family: "Arial", sans-serif;
    line-height: 1.5;
    text-remove-gap: outside both;
}

Output:

p
{
    font-family: "Arial", sans-serif;
    line-height: 1.5;
    margin-top: -0.63em;
    margin-bottom: -0.67em;
}

You can find more examples in test.js.

Install

npm install --save-dev postcss-text-remove-gap

Usage

With Gulp:

var gulp = require( 'gulp' );
var postcss = require( 'gulp-postcss' );
var textRemoveGap = require( 'postcss-text-remove-gap' );

gulp.task(
    'styles',
    function ()
    {
        var textRemoveGapOptions = {
            prefix: 'm18',
            fonts: {
                'My Font': [0.1, 0.2],
                'My Other Font': [0.12, 0.14]
            },
            defaultFontFamily: 'My Font'
        };
        
        gulp.src( './styles/src/**/*.css' )
            .pipe( postcss( [textRemoveGap( textRemoveGapOptions )] ) )
            .pipe( gulp.dest( './styles/' ) );
    }
);

Input (file styles/src/test.css):

p
{
    font: 16px/1.5 "Arial", sans-serif;
    -m18-text-remove-gap: both;
}

div.other p
{
    font-family: "Arial", sans-serif;
    line-height: 1.5;
    -m18-text-remove-gap: outside both;
}

li
{
    line-height: 2;
    -m18-text-remove-gap: both;
}

blockquote
{
    font-family: "My Other Font", sans-serif;
    line-height: 2;
    -m18-text-remove-gap: both;
}

Output (file styles/test.css):

p
{
    font: 16px/1.5 "Arial", sans-serif;
}

p::before
{
    display: block;
    content: "";
    margin-bottom: -0.38em;
}

p::after
{
    display: block;
    content: "";
    margin-top: -0.42em;
}

div.other p
{
    font-family: "Arial", sans-serif;
    line-height: 1.5;
    margin-top: -0.38em;
    margin-bottom: -0.42em;
}

li
{
    line-height: 2;
}

li::before
{
    display: block;
    content: "";
    margin-bottom: -0.6em;
}

li::after
{
    display: block;
    content: "";
    margin-top: -0.7em;
}

blockquote
{
    font-family: "My Other Font", sans-serif;
    line-height: 2;
}

blockquote::before
{
    display: block;
    content: "";
    margin-bottom: -0.62em;
}

blockquote::after
{
    display: block;
    content: "";
    margin-top: -0.64em;
}

Options

prefix

Type: string
Default: '' (empty, no prefix)

Adds the prefix surrounded by dashes before the property name.

fonts

Type: object
Default: {}

Object with spaces for custom fonts.

{
    "Font Name": [spaceBefore, spaceAfter]
}

Values spaceBefore and spaceAfter are numbers 0..1 representing the ratio of the space before and after text to the font size (percentages/100%).

The best way to calculate this values is to create block with background color and required font. Set line-height to 1 and font-size to 100px. Write “E” character or other simular to easily find top and bottom boundary of it. Measure the distance from the block boundary to the character.

For example:

div
{
    font: 100px/1 "Open Sans", sans-serif;
    background: gray;
}
<div>E<div>

Space above “E” is 17px → spaceBefore = 0.17, space below “E” is 11px → 
spaceAfter = 0.11

Plugin has build-in database with fonts metrics in file fonts.json.
You can contribute new common fonts with pull request, or just use your own collection with this option.

defaultFontFamily

Type: string | string[]
Default: 'serif'

Font to use when no other font specified. Used when CSS block has no font-family, font, or font-family value of plugin property specified.

defaultLineHeight

Type: number
Default: 1

Line-height to use when no other line-height specified. Used when CSS block has no line-height, font with line-height, or line-height value of plugin property specified.