在切换到Vue之前,我尝试了Angular,并发现其组件中的:host
选择器非常方便。其基本目的是将:host
的样式应用于组件本身。
在.vue
部分的<style scoped></style>
文件中是否有与之等效的文件?
父母:
<template>
<div class="host">
<layout-header :open-nav="openNav" @toggle-open="toggleOpen"></layout-header>
<layout-sidebar :open-nav="openNav"></layout-sidebar>
<layout-content></layout-content>
<layout-footer></layout-footer>
</div>
</template>
<style scoped>
.host {
display: flex;
height: 100%;
width: 100%;
flex-direction: column;
}
</style>
内容:
({<layout-content>
)
<div class="host">
stuff
</div>
<style scoped>
.host{
flex: 1;
}
</style>
输出:
(为简单起见,删除了页眉,页脚和侧边栏。)
这将导致页眉,侧边栏,内容和页脚继承父css(如果它们具有.host
类)。
HTML:
<div data-v-238e7577="" class="host">
<div data-v-7412829c="" data-v-238e7577="" class="host">stuff</div>
</div>
CSS应用于子元素:
答案 0 :(得分:1)
Vue中没有Angular的:host
。
您将获得的最接近的结果是使用CSS module。
演示:https://codesandbox.io/s/o4orw9nz35中的App.vue
<template>
<div id="app" :class="$style.container">
<p class="red">p tag</p>
<div class="blue">div tag</div>
</div>
</template>
<style lang="scss" module>
.container :global {
.red {
color: red;
}
.blue {
color: blue;
}
}
</style>
请注意如何将.container
类用作$style.container
作为根div
中的类。
CSS模块将为.container
生成唯一的类名,使类名冲突不会发生。
:global
会做什么?
CSS模块默认将CSS类名称转换为唯一的名称。
例如当.container
用作.container_7ba5bd90
时,将转换成类似$style.container
的东西。
为避免在某些类上进行此转换,请使用:global
来包装它们。
(here可以找到:global
的说明。)