前端框架开发之Niu框架——从零学框架的小白

news/2024/10/10 4:25:50

起因:

从2018年6月一直到我重新提笔,6年时间。这六年时间,我见证了IT的兴衰,见证了小众框架LayUI框架的重新更新,见证了vue、angular、react等框架的主流。----博客园老牛大讲堂

 

初衷:

今年我突发灵感,想要设计一个网站,作为程序员却"提笔忘字",就连最基本的css也变得陌生,我网上翻找大量的网站,想要找到一款,像我这种半吊子也能用的网站(即懂一些代码原理,却早已经忘了底层代码怎么写),事实却让我失望,没有一款适合我。layui框架符合拿来即用,可有些组件根本就没有。请原谅我,学习vue等框架对我来说太难了,我就想要一个好看的页面,便携通用的组件。我求索无果,所以在想,为什么不自己开发一个开源的网站,让大众成为贡献者,一起参与到开发中来。

 

Niu框架由然而生:----博客园老牛大讲堂

从头编写一个框架,说真的特别难,万里长征,光是选择哪一种布局模式,让我研究了一个星期,特别是对于我这样一个不碰代码六年的小白。最终让我决定用flex布局,去开发一个框架。随后我将不断完善框架,最终形成一个小众的开源框架。

 

废话不多说,上代码:----博客园老牛大讲堂

 开发一个框架,第一步,一定要初始化浏览器的各种默认参数,别问我一个小白怎么知道的,当后期开发发现总是栅格对不齐的时候,一点点抠出来的。

* {margin: 0;padding: 0;box-sizing: border-box;/* 可以添加这个属性以确保盒模型包含border和padding */
} 

 

第二步:定义公共属性,例如栅格水槽、圆角参数、niu-container,开始确定flex布局+百分比的方式,开始开发。----博客园老牛大讲堂

/*第二部分: 定义flex *//* 公共元素 */
:root {--gap: 8px;/* 设置栅格槽之间间距 */--border-radius: 5px;/* 设置栅格圆角数值 */
}.niu-container {width: 100%;display: flex;flex-wrap: wrap;gap: var(--gap);flex-flow: row wrap;padding-left: calc(var(--gap));/* 设置左边有一个边距 这里,下面一张图会解释为什么要设置一个左边距 */
}

 

注意如果没有左边距,浏览器自带的样式,会直接覆盖掉。右侧暂时还没发现这个问题(欢迎大家留言,告诉我右边需要留边距吗?)

 

 

第三步:设置百分比。请注意:这里我让每一个元素都减少了一个水槽的宽度(水槽就是两个元素之间的距离),这个是我开发框架的亮点,有兴趣的研究一下原理,欢迎提出改机意见,前提得简单点,复杂我看不懂。----博客园老牛大讲堂

 

niu-col-1 {width: calc((100% / 24) * 1 - var(--gap));
}.niu-col-2 {width: calc((100% / 24) * 2 - var(--gap));
}.niu-col-3 {width: calc((100% / 24) * 3 - var(--gap));
}.niu-col-4 {width: calc((100% / 24) * 4 - var(--gap));
}.niu-col-5 {width: calc((100% / 24) * 5 - var(--gap));
}.niu-col-6 {width: calc((100% / 24) * 6 - var(--gap));
}.niu-col-7 {width: calc((100% / 24) * 7 - var(--gap));
}.niu-col-8 {width: calc((100% / 24) * 8 - var(--gap));
}.niu-col-9 {width: calc((100% / 24) * 9 - var(--gap));
}.niu-col-10 {width: calc((100% / 24) * 10 - var(--gap));
}.niu-col-11 {width: calc((100% / 24) * 11 - var(--gap));
}.niu-col-12 {width: calc((100% / 24) * 12 - var(--gap));
}.niu-col-13 {width: calc((100% / 24) * 13 - var(--gap));
}.niu-col-14 {width: calc((100% / 24) * 14 - var(--gap));
}.niu-col-15 {width: calc((100% / 24) * 15 - var(--gap));
}.niu-col-16 {width: calc((100% / 24) * 16 - var(--gap));
}.niu-col-17 {width: calc((100% / 24) * 17 - var(--gap));
}.niu-col-18 {width: calc((100% / 24) * 18 - var(--gap));
}.niu-col-19 {width: calc((100% / 24) * 19 - var(--gap));
}.niu-col-20 {width: calc((100% / 24) * 20 - var(--gap));
}.niu-col-21 {width: calc((100% / 24) * 21 - var(--gap)) ;
}.niu-col-22 {width: calc((100% / 24) * 22 - var(--gap));
}.niu-col-23 {width: calc((100% / 24) * 23 - var(--gap));
}.niu-col-24 {width: calc((100% / 24) * 24 - var(--gap));
} 

 

  下面是html应用结果:经过测试没有问题。----博客园老牛大讲堂

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><link rel="stylesheet" href="./css/niu.css">  </head><body><div class="niu-container"><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1"niu-bg-green>1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green ">1/24</div><div class="niu-col-1 niu-bg-green ">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div><div class="niu-col-1 niu-bg-green">1/24</div></div></body>
</html>

  

运行结果:不管屏幕多窄,元素总能保持在一行。欢迎各位大神,前来指正,我将不断改进我的代码----博客园老牛大讲堂

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/27797.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Blazor流程编排的艺术:深入Z.Blazor.Diagrams库的使用与实践

为现代网页应用开发提供动力的其中一个重要方面就是前端框架的强大功能与灵活性。而在.NET生态中,Blazor以其独特的工作方式和优势逐渐获得了开发者们的青睐。今天,在这篇文章中,我将带你深入探索一个基于Blazor的优秀库——Z.Blazor.Diagrams,我们将了解它是如何帮助开发者…

【未整合】数学 day4.2

博弈论 Nim游戏 对于 \(n=2\),\(a_1=a_2\),后手可以“模仿”先手,使得后手必胜。 对于 \(a_1\ne a_2\),先手可以让自己进入“模仿期”,使得先手必胜。 结论:若 \(\oplus a_i=0\),先手必败,否则必胜。很神奇的东西,证明需要群论知识。 发现石子的合并满足上面四条性质,…

Jmeter内存溢出:java.lang.OutOfMemoryError: Java heap space解决思路

一、问题原因 用JMeter压测,有时候当模拟并发请求较大或者脚本运行时间较长时,JMeter会停止,报OOM(内存溢出)错误。原因是JMeter是一个纯Java开发的工具,内存由java虚拟机JVM管理,当内存回收不及时,堆内存不足时,就会报内存溢错误。 概念补充: 内存泄露:应用使用资源…

深度学习相关理论

一、深度学习相关理论 1.神经网络概述 2. 卷积神经网络CNN ①卷积层——计算方法是大矩阵内部小矩阵=较小矩阵,作用是特征提取 ②池化层——计算方法是大矩阵通过选取最大值或是平均值变成小矩阵,作用是降维、提高计算效率 3. 激活函数

关于diffusion model一些统计和数学的基础知识

likelihood-based models,通过(近似)最大似然直接学习分布的probability density(或mass)函数。典型的基于似然的模型包括自回归模型、归一化流模型、基于能量的模型(EBMs)和变分自编码器(VAEs)。 概率质量函数(Probability Mass Function,PMF):概率质量函数用于描述离散随…

UE4 -- 实现用于网络连接的插件

插件 UE中的插件就相当于一个模块,在引擎界面点击创建新的插件后,会在项目文件夹中生成插件的文件夹,在该文件夹内,只需要像游戏项目一样编写插件逻辑,最后在插件选择界面开启该插件即可 当新建插件后,UE会自动生成继承于IModuleInterface的类,说明该文件夹的内容为插件…

OKR-Periods of Words

[POI2006] OKR-Periods of Words 题面翻译 对于一个仅含小写字母的字符串 \(a\),\(p\) 为 \(a\) 的前缀且 \(p\ne a\),那么我们称 \(p\) 为 \(a\) 的 proper 前缀。 规定字符串 \(Q\) 表示 \(a\) 的周期,当且仅当 \(Q\) 是 \(a\) 的 proper 前缀且 \(a\) 是 \(Q+Q\) 的前缀。…

Phone List

题目描述输入格式输出格式样例 样例输入 2 3 911 97625999 91125426 5 113 12340 123440 12345 98346 样例输出 NO YES 数据范围与提示这道题的三条判断是否存在前缀的标准:当在建树字符串已经到结尾时,如果该点有结束标记,那肯定是前缀(不是真前缀)当在建树字符串已经到结…