媒体查询在 Vue 组件里为啥不生效?
我在 Vue 单文件组件里写了媒体查询,但不管怎么缩放屏幕,样式都没变化,是不是写法有问题?
试过把 CSS 放在 <style> 里,也加了 scoped,但断点完全没触发:
<template>
<div class="card">响应式卡片</div>
</template>
<style scoped>
.card {
width: 300px;
background: lightblue;
}
@media (max-width: 768px) {
.card {
width: 100%;
background: salmon;
}
}
</style>
.card[data-v-xxxxx]的 selector,而媒体查询内部又套了一层.card,结果变成@media (max-width: 768px) { .card[data-v-xxxxx] .card { ... } },这当然匹配不到。解决办法有两个,一个是把媒体查询提到 scoped 外面,用全局样式覆盖;另一个更常用的是用
:deep(Vue 3)或者::v-deep(Vue 2)让媒体查询里的样式穿透 scoped。复制过去试试这个写法(Vue 3):
Vue 2 的话把
:deep换成::v-deep就行:或者干脆把媒体查询那段抽出去,写个非 scoped 的