jstewmc/get-style

获取CSS内联样式

v1.0.0 2016-08-13 22:37 UTC

This package is auto-updated.

Last update: 2024-08-29 04:18:14 UTC


README

从PHP数组中获取层叠样式表(CSS)内联样式。

use Jstewmc\GetStyle;

// define your styles
$styles = [
    // the asterisk is a special name for global style declarations
    '*' => [
        'color'     => 'red',
        'font-size' => 'small'
    ],
    'foo' => [
        'color'     => 'blue',
        'font-size' => 'medium'
    ],
    'bar' => [
        'color'     => 'green'
    ]
];

// instantiate the get-style service
$css = new Get($styles);

// get the styles
$css();           // returns "color: red; font-size: small;"
$css('foo');      // returns "color: blue; font-size: medium;"
$css('bar');      // returns "color: green; font-size: small;"
$css('foo bar');  // returns "color: green; font-size: medium;"

这个库是一个(非常)简单的PHP层叠样式表(CSS)读取器。它不声称是一个完整的CSS解析器!已经有一些了。这个库只是从样式数组快速简单地生成内联CSS的一种方式。

名称

这个库没有CSS选择器的概念!样式名称被视为数组键。可以是任何有效的字符串。例如,pa.foo.foofoo都是有效的样式名称。

请注意,星号(*)是一个特殊的样式名称,被视为全局默认样式。如果定义了星号样式,所有样式都将从其声明开始。

声明

这个库像CSS一样合并样式声明。给定一个由空格分隔的样式名称字符串(例如,"foo bar baz"),它将合并声明,后面的声明优先于前面的声明(即"foo < bar < baz")。

请注意,这个库并不智能!它需要(非常)简单的样式声明。

使用有效的声明

这个库不会验证你的声明。请确保你的CSS声明是有效的。否则,你将遇到布局问题。

避免简写声明

简写CSS声明如"margin" => "0 0 10px"无法与其他声明智能合并。

例如

use Jstewmc\GetStyle;

// this will not work!
$styles1 = [
    '*' => [
        'margin' => '0 0 10px'
    ],
    'foo' => [
        'margin-top' => '15px'   
    ]
];

// this will work!
$styles2 = [
    '*' => [
        'margin-top'    => '0',
        'margin-left'   => '0',
        'margin-right'  => '0',
        'margin-bottom' => '10px'
    ],
    'foo' => [
        'margin-top' => '15px'
    ]  
];

// create two css services
$css1 = new Get($styles1);
$css2 = new Get($styles2);

$css1('foo');  // returns "margin: 0 0 10px; margin-top: 15px;"
$css2('foo');  // returns "margin-top: 15px; margin-left: 0; ... "

注意引号

这个库不会引用空格分隔的样式。请确保你在声明中引用任何空格分隔的样式,如"Courier New"

use Jstewmc\GetStyle;

// this will not work!
$styles1 = [
    '*' => [
        'font-family' => 'Courier New'
    ]
];

// this will work!
$styles2 = [
    '*' => [
        'font-family' => '\'Courier New\''
    ] 
];

// create two css services
$css1 = new Get($styles1);
$css2 = new Get($styles2);

$css1();  // returns "font-family: Courier New;"
$css2();  // returns "font-family: 'Courier New';"

请注意,如果你将CSS输出为内联样式,请确保你的CSS引号不会与HTML源代码中的引号冲突。

例如

use Jstewmc\GetStyle;

$styles = [
    '*' => [
        'font-family' => '"Courier New"'
    ]
];

$css = new Get($styles);

echo '<p style="'. $css() .'">Hello world!</p>'

上面的例子将产生以下损坏的HTML

<p style="font-family: "Courier New"">Hello world!</p>

避免空格分隔的声明

即使你正确地引用了空格分隔的声明,你也可能遇到问题。

某些电子邮件客户端会强制将电子邮件的HTML正文行宽限制在80个字符或更少。源代码中的换行符被替换为空格,并在需要的位置插入换行符字符。

如果在声明名称中的空格处插入换行符,声明将损坏,相应的元素将未加样式。至少,这种行为在OSX 10上运行Apple Mail 8时得到了确认。

作者

Jack Clayton

许可

MIT

版本

1.0.0,2016年8月16日

  • 主要版本
  • 更新composer.json
  • 更新注释

0.1.0,2016年8月7日

  • 首次发布