作者:Ahmad shaded 译者:前端小智 来源:sitepoint

点赞再看,微信搜索**【大迁世界】**关注这个没有大厂背景,但有着一股向上积极心态人。本文 GitHub github.com/qq449245884… 上已经收录,文章的已分类,也整理了很多我的文档,和教程资料。

有些情况下,我需要用一种简单的方法来创建网格布局。 例如,每次我改变主意时,在不修改CSS的情况下快速画出五列网格。 在本文中,我们一起探索一些用例,并思考如果实现及使用它们。

它是怎么工作的

在深入探讨这些概念之前,首先我们来回顾一下 CSS 变量的基础知识, 我们也可以将它称为“自定义属性”。

所有主流浏览器都支持CSS变量,下面是各个浏览器的支持情况:

如果要定义CSS变量是全局变量,则需要将其添加到:root声明中(:root等效于<html>)。 如果该变量特定于组件,则可以在该组内声明中定义它。

在下面的例子中,我定义了一个全局变量--size,它用于square 元素的宽度和高度。

  1. :root {
  2. --size: 50px;
  3. }
  4. .square {
  5. width: var(--size);
  6. height: var(--size);
  7. }

如果--size没有定义,要怎么办呢?在传递的变量无效的情况下,CSS 支持定义默认变量或回退变量。

在下面的例子中的 var(--size, 10px)。如果--size无效,则宽度和高度值将为 10px

  1. .square {
  2. width: var(--size, 10px);
  3. height: var(--size, 10px);
  4. }

除此之外,还可以在内联CSS样式中使用CSS变量。例如

HTML

  1. <div class="elem" style="--background: red;"></div>

CSS

  1. .elem {
  2. background: var(--background);
  3. }

接着, 我们以上述这些概念,还演示一些事例。

大家都说简历没项目写,我就帮大家找了一个项目,还附赠【搭建教程】

CSS网格示例

侧边栏和主内容

在此设计中,我将CSS网格用于以下各项:

  1. 边栏和主菜单
  2. 表单项
  3. 三列布局

侧边栏的宽度是固定的,主内容是变化。假设侧边栏的宽度是240px

1.边栏和主菜单

Html

  1. <div class="o-grid" style="--columns: 240px 1fr">
  2. <aside></aside>
  3. <main></main>
  4. </div>

Html

  1. .o-grid {
  2. display: grid;
  3. grid-template-columns: var(--columns);
  4. }

2. 表单项

按照设计,每行有两列,html 结构如下:

Html

  1. <div class="o-grid" style="--columns: 1fr 1fr">
  2. <div class="form-group"></div>
  3. <div class="form-group"></div>
  4. <div class="form-group"></div>
  5. <div class="form-group"></div>
  6. </div>

CSS

  1. .o-grid {
  2. display: grid;
  3. grid-template-columns: var(--columns);
  4. }

3. 三列布局

在下面的示例中,我添加了--repeat-number:3--gap:8px作为内联CSS。 这些变量将添加到o-grid类,网格的设置将基于这些变量。

HTML

  1. <div class="o-grid" style="--repeat-number: 3; --gap: 8px;">
  2. <div></div>
  3. <div></div>
  4. <div></div>
  5. </div>

CSS

  1. .o-grid {
  2. display: grid;
  3. grid-template-columns: repeat(var(--repeat-number), 1fr);
  4. grid-gap: var(--gap, 0);
  5. }

我喜欢在CSS变量中添加默认值,以防变量没有被设置。在上面的代码中,我使用了var(--gap, 0),如果使用者没有提供--gap变量,则其默认值将为0

动态网格项:minmax

对我来说,这是一个广泛使用的用例,并且非常重要。我经常使用Grid minmax,但是当我在多个页面上使用它时,我遇到了一个问题。

让我们举一个不使用 CSS 变量的基本示例。

在 CSS 中,我使用minmax为每个网格项目定义最小宽度250px

CSS

  1. .o-grid {
  2. display: grid;
  3. grid-template-columns: repeat(auto-fit, minmax(250px, 1fr);
  4. grid-gap: 16px;
  5. }

现在,如果设计要求网格项目的宽度至少为300px,应该怎么做? 我需要创建类似以下版本吗?

  1. .o-grid--2 {
  2. grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
  3. }

想象一下,有五个不同的网格,每个网格具有不同的项目宽度,所以以上不是正确的解决方案。

使用CSS变量,我可以执行以下操作

  1. .o-grid {
  2. display: grid;
  3. grid-template-columns: repeat(auto-fit, minmax(var(--item-width), 1fr);
  4. grid-gap: var(--gap);
  5. }

在HTML中,就可以在标签上设置 CSS 变量:

  1. <!-- Example 1 -->
  2. <div class="o-grid" style="--item-width: 250px;">
  3. <div></div>
  4. <div></div>
  5. <div></div>
  6. </div>
  7. <!-- Example 2 -->
  8. <div class="o-grid" style="--item-width: 350px;">
  9. <div></div>
  10. <div></div>
  11. <div></div>
  12. </div>
  13. <!-- Example 3 -->
  14. <div class="o-grid" style="--item-width: 150px;">
  15. <div></div>
  16. <div></div>
  17. <div></div>
  18. </div>

事例源码:codepen.io/shadeed/pen…

大家都说简历没项目写,我就帮大家找了一个项目,还附赠【搭建教程】

Flexbox示例

在示例中,有一个文章标题,其中包含作者姓名和标签。 这些在页面中的排布方式是动态变化,所以需要一种快速切换这些布局方式的方法 。

HTML

  1. <div class="article-header">
  2. <h2>Article title</h2>
  3. <div class="article-header__meta" style="--justify: space-between;">
  4. <p>By Ahmad Shadeed</p>
  5. <p>Published under: CSS, Design</p>
  6. </div>
  7. </div>

CSS

  1. .article-header__meta {
  2. display: flex;
  3. justify-content: var(--justify);
  4. }

有了它,我可以调整内联样式以将值更改为另一个关键字。 我发现这在进行快速原型制作甚至是制作网站时很有用。

按钮

按钮宽度

CSS 变量也适用于按钮元素。 假设有一个带有两个input字段和一个按钮的表单。

我的目的是通过使用内联CSS变量来控制按钮的宽度。 有时,按钮应占据其父控件的100%宽度。

html

  1. <button class="c-button" style="--width: 100%;">Submit</button>

css

  1. .c-button {
  2. /* Other styles */
  3. width: var(--width, initial);
  4. }

按钮颜色

另一个有用的用途是当有重影按钮(轮廓按钮)时。 按钮的颜色可以是任何颜色,通过使用CSS变量,可以轻松更改颜色。

HTML

  1. <button class="c-button c-button--ghost" style="--color: #5e35b1;">Save Edits</button>
  2. <button class="c-button c-button--ghost" style="--color: #ec2828;">Delete</button>

CSS

  1. .c-button--ghost {
  2. /* Other styles */
  3. background: transparent;
  4. color: var(--color,
  5. border-color: currentColor;
  6. }

CSS 变量同样适合悬停效果。悬停时,按钮背景将变为纯色,并且字体颜色为白色。

事例源码:codepen.io/shadeed/pen…

用户头像

每个角色的大小都不同,这非常适合用 CSS 变量来解决。假设有四个不同大小的用户头像。

在CSS中,定义了以下样式:

  1. .c-avatar {
  2. display: inline-block;
  3. margin-right: 2rem;
  4. width: calc(var(--size, 1) * 30px);
  5. height: calc(var(--size, 1) * 30px);
  6. object-fit: cover;
  7. border-radius: 50%;
  8. box-shadow: 0 3px 10px 0 rgba(
  9. }

通过使用Calc()函数,我可以传递一个--size 变量,它将乘以一个基本宽度值,在HTML中定义 --size变量:

  1. <img src="user.jpg" alt="" class="c-avatar" style="--size: 1">
  2. <img src="user.jpg" alt="" class="c-avatar" style="--size: 2">
  3. <img src="user.jpg" alt="" class="c-avatar" style="--size: 3">
  4. <img src="user.jpg" alt="" class="c-avatar" style="--size: 4">

事例源码:codepen.io/shadeed/pen…

人才们的 【三连】 就是小智不断分享的最大动力,如果本篇博客有任何错误和建议,欢迎人才们留言,最后,谢谢大家的观看。


原文:css-tricks.com/patterns-fo…

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug

交流

文章每周持续更新,可以微信搜索**【大迁世界 】第一时间阅读,回复【福利】**有多份前端视频等着你,本文 GitHub github.com/qq449245884… 已经收录,欢迎Star。

使用内联的 CSS 变量技巧,提高灵巧布局效率!的更多相关文章

  1. 内联式css样式,直接写在现有的HTML标签中

    CSS样式可以写在哪些地方呢?从CSS 样式代码插入的形式来看基本可以分为以下3种:内联式.嵌入式和外部式三种.这一小节先来讲解内联式. 内联式css样式表就是把css代码直接写在现有的HTML标签中 ...

  2. C++ primer(八)--内联函数 引用变量 引用传递函数参数 函数重载/模板/模板具体化

    一.内联函数     常规函数和内联函数的区别在于C++编译器如何将他们组合到程序中.编译过程的最终产品是可执行程序--由一组机器语言指令组成.运行程序时,操作系统将这些指令载入到计算机内存中,因此每 ...

  3. 内联外联CSS和JS

    内联CSS 代码示例: <p style="color:red;font-size:18px">这里文字是红色.</p> 内联CSS也可称为行内CSS或者行 ...

  4. 五十个小技巧提高PHP执行效率(二)

    更详细具体的总结如下: 1.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量, 单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的 ...

  5. 五十个小技巧提高PHP执行效率

    在项目开发过程中,经常遇到了一些PHP处理程序性能底下的情况,程序运行在centos+nginx环境,虽然这个有很多的原因如:服务器本身配置,运行环境nginx服务,php-fpm配置等等,更多有一点 ...

  6. 五十个小技巧提高PHP执行效率(一)

    在项目开发过程中,经常遇到了一些PHP处理程序性能底下的情况,程序运行在centos+nginx环境,虽然这个有很多的原因如:服务器本身配置,运行环境nginx服务,php-fpm配置等等,更多有一点 ...

  7. 编程技巧│提高 Javascript 代码效率的技巧

    目录 一.变量声明 二.三元运算符 三.解构赋值 四.解构交换 五.箭头函数 六.字符串模版 七.多值匹配 八.ES6对象简写 九.字符串转数字 十.次方相乘 十一.数组合并 十二.查找数组最大值最小 ...

  8. 18 12 27 css 盒模型使用 以及相关技巧问题 元素溢出 块元素、内联元素、内联块元素

    盒子模型的实际尺寸 盒子的width和height设置的是盒子内容的宽和高,不是盒子本身的宽和高,盒子的真实尺寸计算公式如下: 盒子宽度 = width + padding左右 + border左右 ...

  9. webpack4对第三方库css,项目全局css和vue内联css文件提取到单独的文件(二十二)

    在讲解提取css之前,我们先看下项目的架构如下结构: ### 目录结构如下: demo1 # 工程名 | |--- dist # 打包后生成的目录文件 | |--- node_modules # 所有 ...

随机推荐

  1. Spring Boot新增一个YML配置文件,并进行加载

    我们在同级目录下增加 然后增加一个配置类 SpringBootConfiguration.java import org.springframework.beans.factory.config.Ya ...

  2. Spring整合ActiveMQ实现消息延迟投递和定时投递

    linux(centos)系统安装activemq参考:https://www.cnblogs.com/pxblog/p/12222231.html 首先在ActiveMQ的安装路径 /conf/ac ...

  3. 【LeetCode】703. Kth Largest Element in a Stream 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 小根堆 日期 题目地址:https://leetco ...

  4. 使用.NET 6开发TodoList应用(10)——实现DELETE请求以及HTTP请求幂等性

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 先说明一下关于原本想要去更新的PATCH请求的文章,从目前试验的情况来看,如果是按照.NET 6的项目结构(即只使用一个Pro ...

  5. TensorFlow.NET机器学习入门【6】采用神经网络处理Fashion-MNIST

    "如果一个算法在MNIST上不work,那么它就根本没法用:而如果它在MNIST上work,它在其他数据上也可能不work". -- 马克吐温 上一篇文章我们实现了一个MNIST手 ...

  6. Visualizing Data using t-SNE

    目录 概 主要内容 Stochastic Neighbor Embedding t-SNE Der Maaten L V, Hinton G E. Visualizing data using t-S ...

  7. ACE_Get_Opt函数笔记

    #include "ace/OS_NS_string.h" #include "ace/Configuration.h" #include "ace/ ...

  8. Android物联网应用程序开发(智慧城市)—— 查询购物信息界面开发

    效果: 布局代码: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...

  9. 大厂必问的JVM面试题

    本文目录: 讲一下JVM内存结构? 程序计数器 虚拟机栈 本地方法栈 堆 方法区 运行时常量池 直接内存 Java对象的定位方式 说一下堆栈的区别? 什么情况下会发生栈溢出? 类文件结构 什么是类加载 ...

  10. 深入 Laravel 内核之 PHP 反射机制和依赖注入

    结论: PHP中提供了反射类来解析类的结构: 通过反射类可以获取到类的构造函数及其参数和依赖: 给构造函数的参数递归设置默认值后,即可使用这些带默认值的参数通过 newInstanceArgs 实例化 ...