良久没有更新了,本日更一篇款式篇。
Polyermer运用的是Shadow DOM styling划定规矩来限制每一个自定义组件的款式局限(即每一个组件都能够定义本身内部自力的款式,而不受外界全局款式的滋扰)。怎样定义组件内部款式呢,我们须要在<dom-module>标签内运用<style>标签(1.1版本最先引荐与<template>平级)。
我们来看个例子
首先是自定义组件的代码
<link rel="import" href="../bower_components/polymer/polymer.html">
<dom-module id="sub-element">
<style>
:host {
display: block;
border: 1px solid red;
}
#child-element {
background: yellow;
}
.content-wrapper >::content .special {
background: silver;
}
</style>
<template>
<div id="child-element">In local DOM!</div>
<div class="content-wrapper">
<content></content>
</div>
</template>
<script>
Polymer({
is: 'sub-element'
});
</script>
</dom-module>
主index.html的代码
<!DOCTYPE html>
<html>
<head>
<script src="bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="components/sub-element.html">
<style>
#child-element{
background: green;
}
</style>
</head>
<body>
<div id="child-element">native div of index page</div>
<sub-element id="subElement">
<div class="special">I'm content child of sub element</div>
</sub-element>
</body>
</html>
运转结果以下:
能够看到我们在主index.html里也定义了一个#child-element的全局款式,结果为背景绿色,然则这个我们在sub-element中的style设置里对这个款式举行了再次定义,所以终究衬着时会以自组建为先,掩盖父容器中的定义,或者是全局的款式定义。假如我们把sub-element中这个style解释掉,则子组件会运用外层的定义,显现为绿色。
#child-element {
/*background: yellow;*/
}
我们接着看style中几个和以往传统写法不一样的处所,
:host {
display: block;
border: 1px solid red;
}
:host 是对宿主子容器举行设定,你能够把它当做是<template></template>,或者是<sub-element></sub-element>
.content-wrapper >::content .special {
background: silver;
}
::content 是对被插进去的child标签举行设定,也就是途中灰色的<div class=”special”>I’m content child of sub element</div>
.content-wrapper >::content .special
---->终究会被翻译成
.content-wrapper >.special
为何要让自定义组件的style有本身自力的作用域呢!原理实在请简朴,我们开辟一套体系平常都要定义全局一套主题,每一个控件的样色设想作风要一致一致,然则一旦我对某些组件举行了扩大,须要一些特别的款式设置,我们就能够在每一个自定义组件内部举行设置,而不须要损坏全局的css文件。
Polymer team如今以为::content的写法有些冗杂,会在后续版本中加以改进,我们也拭目以待