我写的这个Vue的Less样式为什么没有生效?
<template> <div class="grid-list"> <slot /> </div></template><script setup>import {computed} from 'vue';const props = defineProps({ itemWidth: { type: String, default: '300px', },});const itemWidth = computed(() => { return props.itemWidth;});</script><style lang="less">.grid-list { display: grid; gap: 16px; grid-auto-rows: minmax(172px, auto);}@iw: e(%('%d', v-bind(itemWidth)));.loop(@index) when (@index < 20) { @media (min-width: calc(288px + 16px * (@index - 1) + @iw * @index)) { .grid-list { grid-template-columns: repeat(@index, 1fr); } } .loop(@index + 1);}.loop(1);</style>
上面是我写的一个自定义组件,但是@media这里的代码没有生效,请问我这里少了什么步骤吗?
有点绕,但是大概能明白你期望在 less
中使用当前的 itemWith
变量的值来作为计算值。
但是你要明白 less
是预处理样式,在编译阶段就已经编译成了普通的CSS了,并不会获取到项目在浏览器中运行的值。除非你的 props.itemWith
是一个固定的值比如说:
<script setup>const testStyle = { itemWidth: '300px'}</script><style lang="less">.grid-list { display: grid; gap: 16px; grid-auto-rows: minmax(172px, auto);}@iw: e(%('%d', v-bind(testStyle.itemWidth)));.loop(@index) when (@index < 20) { @media (min-width: calc(288px + 16px * (@index - 1) + @iw * @index)) { .grid-list { grid-template-columns: repeat(@index, 1fr); } } .loop(@index + 1);}.loop(1);</style>
所以要达到你期望的目标,可以使用 CSS 自定义属性 来实现。举个例子
<template> <div :style="cssVars"> <div class="grid-list"> <slot /> </div> </div></template><script setup>import {computed} from 'vue';const props = defineProps({ itemWidth: { type: String, default: '300px', },});const cssVars = computed(() => { return { "--itemWidth": props.itemWidth };});</script><style lang="less">.grid-list { display: grid; gap: 16px; grid-auto-rows: minmax(172px, auto);}.loop(@index) when (@index < 20) { @media (min-width: calc(288px + 16px * (@index - 1) + var(--itemWidth) * @index)) { .grid-list { grid-template-columns: repeat(@index, 1fr); } } .loop(@index + 1);}.loop(1);</style>
但是不一定对,我不太确定能否在 calc()
中使用 CSS variables
。
把@media的样式代码放到下面,确保嵌套层级一样,就会覆盖上面的。
您提供的Vue组件代码使用了Less语言来编写样式,并试图通过Less的循环来生成一系列基于媒体查询的样式规则。然而,您的代码中存在几个问题,导致@media样式没有生效。
calc
函数中,这可能导致编译错误。以下是您可以尝试的修改步骤,以便生成有效的媒体查询样式:
由于这个问题涉及到动态创建媒体查询,而Less并不直接支持这种用法,因此解决方案可能会比较复杂。您可能需要重新考虑如何组织您的代码,以便更好地利用Vue和CSS的功能来实现您的目标。
最后,请注意,对于动态媒体查询,通常更好的做法是在组件的JavaScript部分进行计算,并根据需要动态地添加或删除CSS类,而不是试图在样式预处理器中处理所有逻辑。
有什么方法可以简化这段代码吗?我正好有一个白色的一块,想要得到它的位置 代码: 瓦片类: 件类:
我正在尝试获取角色id,但我不知道如何操作,因为它不起作用: 身份验证::用户- 对象(照亮\数据库\雄辩\收集)#843(1) {["项目":受保护]=
我想把这段代码传递给我的其他类,这样我就不必继续粘贴它了。 以下是错误: 这就是我试图调用代码的方式:
输入: 第一行:两个空间分隔的整数N和Q,分别表示数组A中的元素数和查询数 第二行:N个表示数组元素的分隔整数
现在做一个拖拽的功能,有个问题想不明白。 就是低代码拖拽组件到内容区展示,但是导出的时候,你拖拽组件部分是经过什么处理?才能保持原样(就跟平时在vscode编译器里面开发的代码一样)导出一个vue文件呢? 组件在内容区显示,在浏览器开发者模式去看是最原始的样子,直接导出html肯定不行的。 各位道友有什么好的想法呢?谢谢大家! 我能想到导出代码就是直接把dom导出出去,但是这样肯定不行