马黑黑 发表于 2023-5-8 18:42

css-doodle嵌套

本帖最后由 马黑黑 于 2023-5-8 18:47 编辑 <br /><br /><style>
.mama {
        width: 100%;
        position: relative;
}
.hCode, .hLineNum {
        padding: 10px;
        width: calc(100% - 40px);
        background: #eee;
        box-sizing: border-box;
        tab-size: 4;
        position: absolute;
}
.hCode { left: 40px; }
.hLineNum { width: 40px; background: #ccc; text-align: right; pointer-events: none; }
</style>

<p>css-doodle 图案里再嵌套一个css-doodle图案,实现方法之一是给单元格的背景属性 background 套一个 @doodle() 函数,该函数的参数是标准的 css-doodle 代码。试看如下代码:</p>

<div class="mama">
<pre class="hLineNum"></pre>
<pre class="hCode">&lt;css-doodle&gt;
        :doodle {
                @grid: 1 / 400px;
        }
        background: @doodle(
                :doodle {
                        @grid: 3 / 100%;
                }
                @shape: clover 4;
                background: pink;
                @match(@row=@col) { animation: rot 6s infinite linear; }
                @keyframes rot { to { transform: rotate(360deg); } }
        );
&lt;/css-doodle&gt;</pre>
</div>
<p><br><button class="btnok" type="button" value="运行代码">运行代码</button><br><br></p>
<div class="stage"></div>
<p>代码中,我们创建了一个1x1的css-doodle网格(第2至4行),然后我们给唯一的单元格设置背景 background 属性,所使用的方法是 @doodle() 函数,函数的参数是标准的一组 css-doodle 代码(第6至第12行),它创建3x3的网格、尺寸为100%即和父元素一样的大小(第7行),形状为四叶草(第9行),背景颜色为粉红色(第10行),然后,凡单元格的行序号等于列序号的都运行关键帧动画 rot(第11行),关键帧动画需要设置在 @doodle() 函数代码块之内(第12行),设置在该代码块之外不生效,但它以及调用它的animation属性可以接收来自父元素的相关CSS变量。</p>
<p>本例只是 css-doodle 嵌套使用的方式之一,他应该拥有无限可能,但不要太贪心,嵌套太多会导致浏览器出错。</p>

<script>

let script = document.createElement('script');
script.src = 'https://unpkg.com/css-doodle@0.34.9/css-doodle.min.js';
document.head.appendChild(script);

let btns = document.querySelectorAll('.btnok'),
        stages = document.querySelectorAll('.stage'),
        hCodes = document.querySelectorAll('.hCode'),
        hLineNums = document.querySelectorAll('.hLineNum'),
        mamas = document.querySelectorAll('.mama');

btns.forEach((item,key) => {
        let lines = hCodes.innerText.trim().split('\n').length;
        let str = '';
        for(i = 0; i < lines; i ++) {
                str += i + 1 + '\n';
        }
        hLineNums.innerText = str;
        mamas.style.cssText += `height: ${hCodes.offsetHeight + 10}px`;
        item.onclick = () => {
                let val = item.value;
                stages.innerHTML = val === '运行代码' ? hCodes.innerText : '';
                item.value = item.innerText = val === '运行代码' ? '关闭运行' : '运行代码';
        }
});

</script>

红影 发表于 2023-5-8 18:56

嵌套可以使得行序号等于列序号的的单元格执行动画。这个真厉害{:4_187:}

马黑黑 发表于 2023-5-8 20:11

红影 发表于 2023-5-8 18:56
嵌套可以使得行序号等于列序号的的单元格执行动画。这个真厉害

中文版的 css-doodle 并不介绍 @doodle() 函数,开始时我没有注意到,后来才慢慢发现的

红影 发表于 2023-5-8 20:29

马黑黑 发表于 2023-5-8 20:11
中文版的 css-doodle 并不介绍 @doodle() 函数,开始时我没有注意到,后来才慢慢发现的

哦,那这个函数到底是什么含义呢?

马黑黑 发表于 2023-5-8 20:49

红影 发表于 2023-5-8 20:29
哦,那这个函数到底是什么含义呢?

它用于修饰 css-doodle 的元素,比如一个单元格的背景,其意思是,用 css-doodle 图案去装饰一个单元格的背景:

background: @doodle (css-doodle代码);

红影 发表于 2023-5-8 21:00

马黑黑 发表于 2023-5-8 20:49
它用于修饰 css-doodle 的元素,比如一个单元格的背景,其意思是,用 css-doodle 图案去装饰一个单元格的 ...

这么多功能,这个东西看的真的有点晕。

马黑黑 发表于 2023-5-8 21:21

红影 发表于 2023-5-8 21:00
这么多功能,这个东西看的真的有点晕。

先理解它可以嵌套,其他以后会慢慢理解的

红影 发表于 2023-5-8 21:32

马黑黑 发表于 2023-5-8 21:21
先理解它可以嵌套,其他以后会慢慢理解的

嗯嗯,先看到嵌套的效果,感受一下。

马黑黑 发表于 2023-5-8 21:53

红影 发表于 2023-5-8 21:32
嗯嗯,先看到嵌套的效果,感受一下。

起个网名好难 发表于 2023-5-8 22:35

红影 发表于 2023-5-8 20:29
哦,那这个函数到底是什么含义呢?


红影 发表于 2023-5-8 22:51

马黑黑 发表于 2023-5-8 21:53


至少线知道有这么回事{:4_173:}

红影 发表于 2023-5-8 22:53

起个网名好难 发表于 2023-5-8 22:35


哦,可以生成图片啊。谢谢难难的帮助{:4_204:}

马黑黑 发表于 2023-5-8 22:54

红影 发表于 2023-5-8 22:51
至少线知道有这么回事

挺好的

红影 发表于 2023-5-8 23:03

马黑黑 发表于 2023-5-8 22:54
挺好的

虽然还没完全弄懂{:4_173:}

马黑黑 发表于 2023-5-8 23:04

红影 发表于 2023-5-8 23:03
虽然还没完全弄懂

完全弄懂需要一个过程

亦是金 发表于 2023-5-8 23:08

看得头晕,先复制保存代码,慢慢体会试用!{:5_111:}

红影 发表于 2023-5-8 23:09

马黑黑 发表于 2023-5-8 23:04
完全弄懂需要一个过程

今天是不可能的。先睡觉去了{:4_173:}

起个网名好难 发表于 2023-5-8 23:35

红影 发表于 2023-5-8 22:53
哦,可以生成图片啊。谢谢难难的帮助

官网的Usage就相当于用法(举例)说明,看看至少可初步了解下。

马黑黑 发表于 2023-5-9 08:15

红影 发表于 2023-5-8 23:09
今天是不可能的。先睡觉去了

{:4_181:}

马黑黑 发表于 2023-5-9 08:15

亦是金 发表于 2023-5-8 23:08
看得头晕,先复制保存代码,慢慢体会试用!

辛苦{:4_190:}
页: [1] 2 3 4 5 6 7
查看完整版本: css-doodle嵌套