css - 使用 :host selector vs container div

标签 css angular web-component

在我看来,它可以用作 <div> 的替代品用于设置组件样式的容器。示例:

使用容器

@Component({
    template: `
        <div class="container">
            <h1>Some Title</h1>
            <p>Some Content</h1>
        </div>
    `,
    styles: [`
        .container {
            border: 1px solid black;
            display: flex;
        }
    `],
})

使用:host

@Component({
    template: `
      <h1>Some Title</h1>
      <p>Some Content</h1>
    `,
    styles: [`
        :host {
            border: 1px solid black;
            display: flex;
        }
    `],
})

如果我没理解错的话,这两个解决了完全相同的问题。在几乎每个组件中都少了一个需要担心的元素和类,这真是太好了。

问题:这是什么:host是为了什么?如果不是,它有什么意义?除了在各处添加容器之外,为您的组件提供样式的最佳实践是什么?

最佳答案

他们解决的不是同一个问题。 :host 用于设置主机样式,.container 用于设置组件内具有 container 类的任何 div 的样式。

由于封装,.container div 将无法用于在组件外部设置样式,而可以设置宿主元素的样式。

请注意,display 属性的初始值为 inline,因此默认情况下,您的组件将显示为 inline 元素。也许你不想要那个,尤其是 if you have a block element inside of it这可能看起来违反直觉(即使它是允许的)。

关于css - 使用 :host selector vs container div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46448385/

相关文章:

Angular9 的 react 形式和原子设计

javascript - 如何从模型数据中预选纸张下拉菜单中的纸张项目?

css - 为什么 ng-container 不响应样式?

javascript - 我应该上传 "node_modules"吗?

javascript - 如何为内容可编辑元素上的特定单词着色?

javascript - 加载内联 SVG 时出现 fill(url#) 问题

Angular JWT 拦截器切换不记名 token 以进行刷新

firebase - (Webpack 构建失败?)不同级别 Vue 组件中的 Firebase DB

javascript - reactjs 复选框列表组件 - 更新父级中的状态更改

javascript - 图像映射的悬停和选定状态