CSS自定义属性改变网站布局和颜色

打开’ index.html ‘,你注意到的第一件事就是一个大的SVG元素。它包含所有页面的图标的路径,每个图标都包含在符号元素中,并赋予唯一的ID。这些符号在需要时使用’ use '元素进行引用,允许重复使用图标而不会重复SVG代码。

添加CSS变量到SVG

使用内联SVG而不是.SVG文件的一个好处是CSS可以访问其内部结构。这意味着我们的CSS变量(除了Edge,在写作时)。在“ index.html ”中,将SVG的样式块替换为下面的代码段。现在,每个SVG的颜色都链接到我们的CSS变量的值。

创建一个列变量

我们也可以为颜色以外的属性使用CSS变量。在根块中创建一个新变量,将其称为“ 列 ”,并赋值为3.这应该与页面上“ 列 ”UI组件的默认值相匹配。功能完成后,此组件将切换列数。

:root {

–primary: #2F353E;

–secondary: #2B9BCA;

–tertiary: #F3583F;

–quaternary: #E0E1E2;

–quinary: #FFFFFF;

–columns: 3;

}

实施列切换

使用我们的新列变量和calc()函数,我们现在将计算每个音符组件应该多大,以创建正确数量的列。例如,如果列设置为4,则每个音符的宽度应为25%。

.c-note {

width:calc(100% / var(–columns));

}

添加JS类和数据属性

当将JS行为应用于DOM元素时,通过具有JS前缀的类来挂接它。这将元素的功能方面与CSS脱钩。我们为所有的颜色和无线电输入添加一个’ js-update-variable ‘类,并引用一个’ data-attribute '来引用要更新的对应变量。

class=“js-update-variable u-hidden-visually”

data-variable=“primary”>

添加JS来更新CSS变量

打开’ main.js ‘并添加下面的代码段。这循环了我们所有的’ js-update-variable '输入,并添加了逻辑,所以在更改时,其数据变量属性中引用的变量将更新为输入值。颜色色板和列切换应该现在正在工作!

var varTrig = document

.querySelectorAll(“.js-update-variable”);

for(var i = 0; i < varTrig.length; i++){

varTrig[i]

.addEventListener(“change”, function(){

document.documentElement.style

.setProperty(“–” + this.dataset.variable,

this.value);

});

}

10.将JS类附加到保存按钮

只有当用户点击保存按钮时,才能保存用户的配色方案,这样可以让他们尽可能多地尝试主题,而不会自动覆盖当前的配置。要开始,将’ .js-save-colors '添加到“ 保存 ”按钮以作为我们的JS钩子。

data-modal=“js-modal” data-modal

-content=“js-colours-modal-content”>

Save

11.创建颜色数组

返回’ main.js ‘,声明一个名为’ colors ’ 的新变量,并分配一个包含所有要保存的所有颜色变量的新数组,一旦保存按钮被点击。

var colours = [

“primary”,

“secondary”,

“tertiary”,

“quaternary”,

“quinary”

];

12.构建保存按钮事件侦听器

在colors数组下方,为“ js-save-colors ”类创建一个点击事件侦听器,我们以前添加到“保存”按钮。在其中创建一个名为’ htmlStyles ’ 的新变量,并为其分配根HTML元素的计算属性。我们将使用它来访问我们的CSS变量。

document.querySelector(“.js-save-colours”)

.addEventListener(“click”, function() {

var htmlStyles = window

.getComputedStyle(document

.querySelector(“html”)),

}),

记录CSS颜色变量

接下来,在事件侦听器中,创建一个名为“ coloursToSave ” 的新变量,并为其分配一个空对象。接下来,使用第11步中的’ colors ‘数组创建一个FOR循环。在其中,我们将把’ colors ‘数组中提到的变量的完整键/值记录添加到’ coloursToSave '对象。

array to the ‘coloursToSave’ object.

coloursToSave = new Object;

for(var i = 0; i < colours.length; i++) {

coloursToSave[colours[i]] = htmlStyles

.getPropertyValue(“–” + colours[i]);

}

14.将coloursToSave发送到localStorage

现在我们将所有颜色变量保存在“ coloursToSave ”中,我们将它发送到名为localStorage的Web Storage API的组件。这本质上是一个在会话中持续存在的对象。我们可以使用其’ setItem() ‘方法在其中存储其他对象。我们把它发送给我们的’ coloursToSave '对象。

localStorage.setItem(“colours”,

JSON.stringify(coloursToSave));

15.将一个JS类添加到列

除了颜色之外,我们还希望确保我们选择的列号在会话中仍然存在。第一步是为列组件中的所有无线电输入添加“ js-update-columns ”。

="js-update-variable js-update-columns

u-hidden-visually" value=“1”

data-variable=“columns”>

16.将列发送到localStorage

对于每个’ js-update-columns ‘,我们接下来分配事件侦听器来监视更改。检测时,我们再将’ columns ‘变量的当前值发送到localStorage,再次使用’ setItem() '方法。与颜色不同,我们不需要对该值进行字符串化,因为它不是一个对象。

var colInputs = document

.querySelectorAll(“.js-update-columns”);

for(var i = 0; i < colInputs; i++) {

colInputs[i].addEventListener(“change”,

function(){ var htmlStyles = window

.getComputedStyle(document

.querySelector(“html”));

localStorage.setItem(“columns”,

htmlStyles.getPropertyValue(“–columns”));

});}

17.处理新会话

如果用户在以前选择颜色和列偏好设置之后返回,我们需要构建逻辑,这样保存的数据就会转回到CSS变量中。第一步是定义一个“ DOMContentLoaded ”事件侦听器,然后使用’ if ‘语句来检查localStorage中使用其’ getItem() '方法的任何保存的数据。

document.addEventListener

(“DOMContentLoaded”,function() {

if(localStorage.getItem(“colours”)) {

}

if(localStorage.getItem(“columns”)) {

}

});

修改颜色变量

在颜色’ if '语句中,创建一个名为“ savedColours ” 的新变量,并从localStorage为其分配解析的颜色对象的值。使用带有“ savedColours ” 的FOR IN循环,抓取每个颜色键/值对,并将其附加到根HTML元素作为CSS变量。

var savedColours = JSON.parse

(localStorage.getItem(“colours”));

for(colour in savedColours){

document.documentElement.style.setProperty

(“–” + colour, savedColours[colour]); }

19.收集列变量数据

在我们修改列变量之前,我们必须首先获取对localStorage中保存的数据的引用以及“ Columns ”组件中的无线电输入。后者是我们可以更新其状态,以确保正确的数字是预选的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值