Polymer 2.0 iron-list 列表项上下边距不显示问题求助
解决Iron List网格模式下列表项上下边距不生效的问题
我之前也碰到过Polymer Iron List在grid模式下margin不生效的情况,核心原因是Iron List的虚拟滚动机制加上flex布局特性导致的——列表项作为flex子元素时,垂直margin容易出现折叠问题,或者Iron List的内部样式悄悄重置了相关属性,所以虽然开发者工具能看到样式规则,但实际渲染时没被正确应用。
结合你的代码,给你几个可行的解决方案:
方案1:给列表项套外层容器,用容器的margin实现边距
这是最稳妥的方法,外层容器不受Iron List内部布局规则的干扰,边距能稳定生效:
修改模板部分,给.country添加一个外层容器:
<iron-list items="[[countries]]" as="country" scroll-target="document" grid> <template> <div class="item-wrapper"> <div class="country"> <p>[[country.name]]</p> </div> </div> </template> </iron-list>
然后调整样式,把边距移到外层容器上:
:host { display: block; padding: 10px; } .item-wrapper { margin: 16px 0; } /* 上下边距设置在这里 */ .country { height: 50px; width: 300px; background-color: white; } /* 移除原来的margin */ iron-list { height: 100vh; }
方案2:使用CSS gap 属性(需浏览器支持)
如果你的目标浏览器支持CSS Grid的gap属性,可以直接给Iron List设置间距,不需要修改模板结构:
iron-list { height: 100vh; display: grid; gap: 16px 0; /* 上下16px,左右0间距 */ }
不过要注意,Polymer 2的Iron List在grid模式下默认已经使用grid布局,这个方法需要确认目标环境的兼容性。
方案3:用::slotted提升样式优先级
有时候Iron List的内部样式会覆盖自定义的margin,你可以通过::slotted选择器提升样式优先级:
iron-list ::slotted(.country) { margin: 16px 0; height: 50px; width: 300px; background-color: white; }
如果还是不生效,可以临时加!important强制生效,但优先推荐方案1,尽量避免使用!important。
你可以先试试方案1,这个方法几乎没有兼容性问题,能保证边距正常显示。
内容的提问来源于stack exchange,提问作者Jobie J
相关产品推荐
相关产品推荐

