官术网_书友最值得收藏!

Defining CSS variables

NW.js releases quite frequently, basically updating with every new version of Chromium. That means we can safely use the latest CSS features. The one I'm most excited about is called Custom Properties (https://www.w3.org/TR/css-variables), which were formerly known as CSS variables.

Actually, variables are one of the main reasons CSS preprocessors exist. With NW.js, we can set variables natively in CSS, as follows:

--color-text: #8da3c5; 
--color-primary: #189ac4;

After that, we can use the variable instead of real values across all the modules in the document scope:

.post__title { 
color: var(--color-primary);
}
.post__content {
color: var(--color-text);
}

So if we decide now to change one of defined colors, we need to do it once, and any rules relying on the variable receives the new value. Let's adopt this technology for our application.

First, we need to create definitions for the module:

./assets/css/Base/defenitions.css

:root { 
--titlebar-bg-color: #2d2d2d;
--titlebar-fg-color: #dcdcdc;
--dirlist-bg-color: #dedede;
--dirlist-fg-color: #636363;
--filelist-bg-color: #f9f9f9;
--filelist-fg-color: #333341;
--dirlist-w: 250px;
--titlebar-h: 40px;
--footer-h: 40px;
--footer-bg-color: #dedede;
--separator-color: #2d2d2d;
}

Here, we define variables representing colors and fixed sizes in the root scope. This new file gets included to the CSS index file:

./assets/css/app.css:

@import url("./Base/defenitions.css"); 
...

Then, we have to modify our components. First we take care of the top level application layout:

./assets/css/Component/l-app.css

.l-app { 
display: flex;
flex-flow: column nowrap;
align-items: stretch;
}

.l-app__titlebar {
flex: 0 0 var(--titlebar-h);
}

.l-app__main {
flex: 1 1 auto;
}

.l-app_footer {
flex: 0 0 var(--footer-h);
}

Then we layout the main section that consists of two columns with dir and file lists:

./assets/css/Component/l-main.css

.l-main { 
display: flex;
flex-flow: row nowrap;
align-items: stretch;
}

.l-main__dir-list {
flex: 0 0 var(--dirlist-w);
}

.l-main__file-list {
flex: 1 1 auto;
}

We style the header:

./assets/css/Component/titlebar.css

.titlebar { 
background-color: var(--titlebar-bg-color);
color: var(--titlebar-fg-color);
padding: 0.8em 0.6em;
}

And the footer:

./assets/css/Component/footer.css

.footer { 
border-top: 1px solid var(--separator-color);
background-color: var(--footer-bg-color);
padding: 0.4em 0.6em;
}

We also need to set colors for the child components of the main section. So style the file list component:

./assets/css/Component/file-list.css

.file-list { 
background-color: var(--filelist-bg-color);
color: var(--filelist-fg-color);
}

and directory list component:

./assets/css/Component/dir-list.css

.dir-list { 
background-color: var(--dirlist-bg-color);
color: var(--dirlist-fg-color);
border-right: 1px solid var(--separator-color);
}

We can run the application to observe that it looks the same. All the colors and sizes are successfully extrapolated from the variables.

主站蜘蛛池模板: 察隅县| 宜川县| 乐陵市| 阿克陶县| 临城县| 同江市| 宁德市| 新巴尔虎左旗| 张家港市| 望江县| 雷州市| 曲阜市| 侯马市| 滕州市| 体育| 谢通门县| 利辛县| 民勤县| 沅陵县| 泗洪县| 郸城县| 乌鲁木齐县| 延津县| 永年县| 长岛县| 资兴市| 广西| 太仓市| 耒阳市| 泽普县| 汨罗市| 平远县| 留坝县| 昭苏县| 锦屏县| 泽库县| 甘孜县| 饶阳县| 颍上县| 铜鼓县| 蒙山县|