如何嵌套聚合物布局以填充整个页面?
How do I nest polymer layouts to fill complete page?
我正在尝试在聚合物元素中使用聚合物布局,但我无法确定它们应该如何正确嵌套。
我在 fullbleed
上使用 body - 这工作正常(示例中的灰色区域)。
然后我添加一个聚合物元素 my-element
(水平布局),在其中 另一个自定义元素 your-element
(垂直布局)。
your-element
("Beta Two")的中间行设置为flex
。
预期: "Beta Two" 扩展 垂直 以填充整个剩余 space
观察到: "Beta Two" 得到高度 = 0(可在元素检查器中验证)
如果移除 flex
标签,则 "Beta Two" 会以标准高度显示。
如果 "Beta Two" 获得 style="min-height:100px"
则使用此最小高度绘制。
如果"Beta Two"得到一个没有效果的style="min-height:100%"
。
许多其他帖子建议使用 :host {display: block}
样式,但这在这里没有帮助(请参阅 jsbin - 除非我将其应用于错误的元素?)。
达到这个结果的正确方法是什么?
jsbin: http://jsbin.com/cejizoboci/1/edit
这是我期望的最终结果:http://jsbin.com/nufemimida/1/edit
嗯,这就是你想要的:jsbin
@itboy 通过他的编辑让我走上正轨,谢谢!
所以答案是确保布局属性在父元素上。一种方法是在使用元素时添加它(itboy 的建议),但实际上也可以在元素声明中添加它,即像这样:
<polymer-element name="my-element" layout horizontal noscript>
<template>
<style>
div {
background: lightgreen;
border: 1px dotted white;
}
</style>
<div>Alpha</div>
<your-element flex ></your-element>
<div>Gamma</div>
</template>
</polymer-element>
或第二个元素类似
<polymer-element name="your-element" layout vertical noscript>
<template>
<style>
div {
background: lightgreen;
border: 1px dotted white;
}
#beta2 {
color: red;
}
</style>
<div>Alpha Two</div>
<div flex id="beta2">Beta Two(flex)</div>
<div>Gamma Two</div>
</template>
</polymer-element>
这允许调用元素时无需提供布局属性:
<body fullbleed layout vertical style="background:lightgrey;">
<div style="background-color:tomato">Top Line</div>
<my-element flex ></my-element>
<div style="background-color:tomato">Bottom Line</div>
</body>
警告:确保完整的元素链使用 layout
属性。
jsbin 这个解决方案:http://jsbin.com/cavoqipani/1/edit?html,output
同样问题的Polymer 1.0解决方案
http://jsbin.com/xaxadutoli/edit?html,output
它的工作原理是将 <body>
包裹在自定义元素中,否则您必须将正文封装在额外的 <div>
中
我正在尝试在聚合物元素中使用聚合物布局,但我无法确定它们应该如何正确嵌套。
我在 fullbleed
上使用 body - 这工作正常(示例中的灰色区域)。
然后我添加一个聚合物元素 my-element
(水平布局),在其中 另一个自定义元素 your-element
(垂直布局)。
your-element
("Beta Two")的中间行设置为flex
。
预期: "Beta Two" 扩展 垂直 以填充整个剩余 space
观察到: "Beta Two" 得到高度 = 0(可在元素检查器中验证)
如果移除 flex
标签,则 "Beta Two" 会以标准高度显示。
如果 "Beta Two" 获得 style="min-height:100px"
则使用此最小高度绘制。
如果"Beta Two"得到一个没有效果的style="min-height:100%"
。
许多其他帖子建议使用 :host {display: block}
样式,但这在这里没有帮助(请参阅 jsbin - 除非我将其应用于错误的元素?)。
达到这个结果的正确方法是什么?
jsbin: http://jsbin.com/cejizoboci/1/edit
这是我期望的最终结果:http://jsbin.com/nufemimida/1/edit
嗯,这就是你想要的:jsbin
@itboy 通过他的编辑让我走上正轨,谢谢!
所以答案是确保布局属性在父元素上。一种方法是在使用元素时添加它(itboy 的建议),但实际上也可以在元素声明中添加它,即像这样:
<polymer-element name="my-element" layout horizontal noscript>
<template>
<style>
div {
background: lightgreen;
border: 1px dotted white;
}
</style>
<div>Alpha</div>
<your-element flex ></your-element>
<div>Gamma</div>
</template>
</polymer-element>
或第二个元素类似
<polymer-element name="your-element" layout vertical noscript>
<template>
<style>
div {
background: lightgreen;
border: 1px dotted white;
}
#beta2 {
color: red;
}
</style>
<div>Alpha Two</div>
<div flex id="beta2">Beta Two(flex)</div>
<div>Gamma Two</div>
</template>
</polymer-element>
这允许调用元素时无需提供布局属性:
<body fullbleed layout vertical style="background:lightgrey;">
<div style="background-color:tomato">Top Line</div>
<my-element flex ></my-element>
<div style="background-color:tomato">Bottom Line</div>
</body>
警告:确保完整的元素链使用 layout
属性。
jsbin 这个解决方案:http://jsbin.com/cavoqipani/1/edit?html,output
同样问题的Polymer 1.0解决方案
http://jsbin.com/xaxadutoli/edit?html,output
它的工作原理是将 <body>
包裹在自定义元素中,否则您必须将正文封装在额外的 <div>