The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

CSS::Scopifier - Prepends CSS selectors to apply scope/context

SYNOPSIS

  use CSS::Scopifier;
  my $CSS = CSS::Scopifier->read('/path/to/base.css');
  $CSS->scopify('.myclass');
  
  # To scopify while also merging 'html' and 'body' into
  # the '.myclass' selector rule:
  $CSS->scopify('.myclass', merge => ['html','body']);
  
  # New, "scopified" version of the CSS with each rule 
  # prepended with '.myclass':
  my $newCss = $CSS->write_string;

DESCRIPTION

CSS::Scopifier extends CSS::Tiny adding the scopify method. The scopify method rewrites and prepends all the rules in the CSS object with the supplied selector string.

For instance, consider a CSS::Scopifier object $CSS representing the following CSS:

  h1, h2 {
    font-family: Georgia, "DejaVu Serif", serif;
    letter-spacing: .1em;
  }
  h1 {font-size: 1.5em;}
  h2 {font-size: 1.4em;}

Then, after calling:

  $CSS->scopify('.myclass');

The CSS would then be:

  .myclass h2 {
    font-family: Georgia, "DejaVu Serif", serif;
    font-size: 1.4em;
    letter-spacing: .1em;
  }
  .myclass h1 {
    font-family: Georgia, "DejaVu Serif", serif;
    font-size: 1.5em;
    letter-spacing: .1em;
  }

Note: CSS::Scopifier only supports single-level CSS; to scopify across nested/grouped rules (i.e. grouped within rules like @media print { ... }) use CSS::Scopifier::Group.

METHODS

Note: CSS::Scopifier extends CSS::Tiny. Please see CSS::Tiny for complete API reference.

scopify

Prepends the selector string supplied in the first argument to each rule in the object.

Also accepts optional hash param merge to rewrite and merge specific selector rules into the top selector, instead of prepending it.

For instance, consider a CSS::Scopifier object $CSS representing the following CSS:

  html {
    height: 100%;
    overflow-y: scroll;
  }
  body {
    height: 100%;
    background: #fff;
    color: #444;
    line-height: 1.4;
  }
  h1, h2 {
    font-family: Georgia, "DejaVu Serif", serif;
    letter-spacing: .1em;
  }
  h1 {font-size: 1.5em;}

Then, after calling:

  $CSS->scopify('#myid', merge => ['html','body']);

The CSS would then be:

  #myid h2 {
    font-family: Georgia, "DejaVu Serif", serif;
    letter-spacing: .1em;
  }
  #myid h1 {
    font-family: Georgia, "DejaVu Serif", serif;
    font-size: 1.5em;
    letter-spacing: .1em;
  }
  #myid {
    background: #fff;
    color: #444;
    height: 100%;
    line-height: 1.4;
    overflow-y: scroll;
  }

AUTHOR

Henry Van Styn <vanstyn@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by IntelliTree Solutions llc.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.