CSS $变量? HTML 没有标签?
CSS $ variable ? HTML without tags?
我正在浏览 codepen 平台以查找一些示例,发现一个项目具有不同的 HTML 风格并且 CSS 具有 $ 可变颜色?我从未见过这样的代码,我无法将它应用到我的本地项目中,因为它无法读取 HTML 和 CSS。我查找了诸如“CSS $ 变量”之类的内容,但没有找到任何示例或解释。我需要查找什么来告知自己这件事? ....
HTML:
aside
h1.title — Stopwatch —
p.subtitle Pure CSS
p.description
| Inspired by this
a href="" target="_blank" Dribbble
main
.wrapper
.button.button--left
.button.button--center
.button.button--right
.stopwatch
.points
- for i in (1..18)
.point
.pointer
.stamp
.glass
CSS:
////////////////////////////////////////////
// COLORS VARIABLES
////////////////////////////////////////////
$COLOR-BLUE: #00c5d1;
$COLOR-BLUE-DARK: #00b5c7;
$COLOR-BLACK: #2c2c2c;
$COLOR-GRAY: #404f50;
$COLOR-BROWN: #74685d;
$COLOR-ORANGE: #bc563a;
$COLOR-WHITE: #ffffff;
////////////////////////////////////////////
// Wrapper - wrap stopwatch and buttons
////////////////////////////////////////////
.wrapper {
position: relative;
}
////////////////////////////////////////////
// Stopwatch - most external rounded part
////////////////////////////////////////////
.stopwatch {
position: relative;
padding: 15px;
width: 200px;
height: 200px;
border-radius: 200px;
background-image: linear-gradient(
to bottom,
$COLOR-GRAY 50%,
$COLOR-BLACK 50%
);
box-shadow:
0 1px 3px rgba(0, 0, 0, .12),
0 1px 2px rgba(0, 0, 0, .24);
// INNER AREA
&::before {
content: '';
position: absolute;
top: 10px;
left: 10px;
width: 180px;
height: 180px;
border-radius: 180px;
background-color: $COLOR-BLUE-DARK;
box-shadow:
inset 0 1px 3px rgba(0, 0, 0, .12),
inset 0 1px 2px rgba(0, 0, 0, .24);
}
}
////////////////////////////////////////////
// Points - all small white marks
////////////////////////////////////////////
.points {
position: absolute;
top: 10px;
left: 10px;
width: 180px;
height: 180px;
border-radius: 180px;
.point {
position: absolute;
top: 89px;
width: 100%;
height: 2px;
&::before,
&::after {
content: '';
position: absolute;
width: 12px;
height: 2px;
border-radius: 4px;
background-color: $COLOR-WHITE;
}
&::before { left: 4px }
&::after { right: 4px }
&:nth-of-type(1) { transform: rotate(0deg) }
&:nth-of-type(2) { transform: rotate(10deg) }
&:nth-of-type(3) { transform: rotate(20deg) }
&:nth-of-type(4) { transform: rotate(30deg) }
&:nth-of-type(5) { transform: rotate(40deg) }
&:nth-of-type(6) { transform: rotate(50deg) }
&:nth-of-type(7) { transform: rotate(60deg) }
&:nth-of-type(8) { transform: rotate(70deg) }
&:nth-of-type(9) { transform: rotate(80deg) }
&:nth-of-type(10) { transform: rotate(90deg) }
&:nth-of-type(11) { transform: rotate(100deg) }
&:nth-of-type(12) { transform: rotate(110deg) }
&:nth-of-type(13) { transform: rotate(120deg) }
&:nth-of-type(14) { transform: rotate(130deg) }
&:nth-of-type(15) { transform: rotate(140deg) }
&:nth-of-type(16) { transform: rotate(150deg) }
&:nth-of-type(17) { transform: rotate(160deg) }
&:nth-of-type(18) { transform: rotate(170deg) }
}
}
////////////////////////////////////////////
// Stamp - stopwatch background stamps
////////////////////////////////////////////
.stamp {
position: absolute;
top: 10px;
left: 10px;
width: 180px;
height: 180px;
border-radius: 180px;
&::before {
content: '';
position: absolute;
top: 25px;
left: calc(50% - 25px);
width: 50px;
height: 50px;
border-radius: 50px;
background-color: rgba(0, 0, 0, .2);
}
&::after {
content: '';
position: absolute;
bottom: 30px;
left: calc(50% - 30px);
width: 60px;
height: 25px;
border-radius: 3px;
background-color: rgba(0, 0, 0, .2);
}
}
////////////////////////////////////////////
// Glass - a filter to looks like glass
////////////////////////////////////////////
.glass {
position: absolute;
top: 10px;
left: 10px;
width: 180px;
height: 180px;
border-radius: 180px;
background-image:
linear-gradient(
to bottom,
rgba(255, 255, 255, 0.15),
rgba(0, 0, 0, 0.25)
),
linear-gradient(
to bottom,
// to right bottom,
rgba(255, 255, 255, 0),
rgba(255, 255, 255, 0.15) 50%,
rgba(255, 255, 255, 0) 50%,
rgba(255, 255, 255, 0)
);
}
////////////////////////////////////////////
// Pointer - moving pointer
////////////////////////////////////////////
.pointer {
position: absolute;
top: 99px;
left: 14px;
width: 106px;
height: 3px;
border-radius: 4px;
background-color: $COLOR-ORANGE;
box-shadow:
0 1px 3px rgba(0, 0, 0, .12),
0 1px 2px rgba(0, 0, 0, .24);
transform-origin: 86px 50%;
animation: spin 15s infinite linear;
// BULLET POINTER
&::before {
content: '';
position: absolute;
width: 20px;
height: 20px;
border-radius: 20px;
right: 10px;
top: -9px;
border: 3px solid $COLOR-BLACK;
background-color: $COLOR-GRAY;
}
}
////////////////////////////////////////////
// Button - stopwatch buttons
////////////////////////////////////////////
.button {
position: absolute;
width: 20px;
height: 30px;
background-color: $COLOR-BLACK;
box-shadow:
0 1px 3px rgba(0, 0, 0, .12),
0 1px 2px rgba(0, 0, 0, .24);
&::before {
content: '';
position: absolute;
top: -20px;
left: -5px;
width: 30px;
height: 25px;
border-radius: 4px;
background-color: $COLOR-BLACK;
box-shadow:
0 1px 3px rgba(0, 0, 0, .12),
0 1px 2px rgba(0, 0, 0, .24);
}
// STATES
&.button--left {
top: 15px;
left: 15px;
transform: rotate(-45deg);
&::before {
background-color: $COLOR-ORANGE;
}
}
&.button--center {
top: -20px;
left: calc(50% - 10px);
&::before {
background-image: linear-gradient(
90deg,
transparent 75%,
rgba(255, 255, 255, .2) 25%
);
background-size: 3px 3px;
}
&::after {
content: '';
position: absolute;
top: -35px;
left: -15px;
width: 50px;
height: 50px;
border-radius: 50px;
border: 4px solid $COLOR-BLACK;
box-shadow:
inset 0 1px 3px rgba(0, 0, 0, .12),
inset 0 1px 2px rgba(0, 0, 0, .24);
z-index: -1;
}
}
&.button--right {
top: 15px;
right: 15px;
transform: rotate(45deg);
&::before {
background-color: $COLOR-WHITE;
}
}
}
////////////////////////////////////////////
// Spin - pointer animation
////////////////////////////////////////////
@keyframes spin {
0% { transform: rotate(0deg) }
100% { transform: rotate(360deg) }
}
////////////////////////////////////////////
// Base - Some base styles
////////////////////////////////////////////
html,
body {
height: 100%;
}
body {
display: flex;
background-color: $COLOR-BLUE-DARK;
background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, .3));
font-family: Georgia, Serif;
}
a {
padding-bottom: 2px;
border-bottom: 1px solid #f4f4f4;
color: #f4f4f4;
text-decoration: none;
&:hover {
border-bottom: 1px solid #ff3c41;
color: #ff3c41;
font-weight: bold;
}
}
*,
*::after,
*::before {
box-sizing: border-box;
}
////////////////////////////////////////////
// Structure
////////////////////////////////////////////
aside {
flex-basis: 380px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
background-color: rgba(0, 0, 0, 0.2);
color: #fff;
line-height: 1.5;
.title,
.subtitle,
.description {
font-style: italic;
text-shadow: 1px 1px 5px rgba(0, 0, 0, .5);
}
.title {
font-weight: bold;
font-size: 2em;
}
.subtitle {
font-size: 1.5em;
}
.description {
margin-top: 24px;
font-size: 1.2em;
}
}
main {
flex-grow: 1;
display: flex;
align-items: center;
justify-content: center;
}
我在 Google 上搜索了代码风格,希望得到一些解释,以便我可以了解这一点。
这不是 HTML 和 CSS,而是一些生成 HTML 和 CSS 的“pre-processing”系统。您需要找出正在使用的语法,然后 运行 服务器上的一个程序将自定义标记转换为真正的 HTML 和 CSS.
它在 Codepen 上运行的原因是 Codepen 运行在他们的服务器上为您安装该程序。
如果您在 Codepen 中点击“设置”,您可以 select 来自 4 HTML pre-processors、5 CSS pre-processors 和 4 JS pre-processors。其中每一个都会读取不同形式的源代码,并生成浏览器可以理解的HTML、CSS和JS。
查看它们中的每一个以了解它们的功能,以及您需要安装什么才能自己使用它们。
所见即所得Compiled Languages。在浏览器可以解释它们之前,他们需要另一个软件将它们转换为 HTML/CSS。
重点是使用变量和循环来提高大型项目源代码的可维护性和一致性。
HTML 看起来像 Pug.js,这是一种模板语言,可以配置为从服务器即时接受变量,并将不同文件的多个部分编译成一个 HTML 轻松记录。
看起来 CSS 的是 Scss,Sass 的一种方言,其用途相似。
如果您想在您的项目中使用它们,您可以使用众多在线编译器之一:
或者设置一个工具链在本地编译这些语言(这是用 node.js 完成的)。有关设置的详细信息,请参阅相应语言的入门页面。
我正在浏览 codepen 平台以查找一些示例,发现一个项目具有不同的 HTML 风格并且 CSS 具有 $ 可变颜色?我从未见过这样的代码,我无法将它应用到我的本地项目中,因为它无法读取 HTML 和 CSS。我查找了诸如“CSS $ 变量”之类的内容,但没有找到任何示例或解释。我需要查找什么来告知自己这件事? ....
HTML:
aside
h1.title — Stopwatch —
p.subtitle Pure CSS
p.description
| Inspired by this
a href="" target="_blank" Dribbble
main
.wrapper
.button.button--left
.button.button--center
.button.button--right
.stopwatch
.points
- for i in (1..18)
.point
.pointer
.stamp
.glass
CSS:
////////////////////////////////////////////
// COLORS VARIABLES
////////////////////////////////////////////
$COLOR-BLUE: #00c5d1;
$COLOR-BLUE-DARK: #00b5c7;
$COLOR-BLACK: #2c2c2c;
$COLOR-GRAY: #404f50;
$COLOR-BROWN: #74685d;
$COLOR-ORANGE: #bc563a;
$COLOR-WHITE: #ffffff;
////////////////////////////////////////////
// Wrapper - wrap stopwatch and buttons
////////////////////////////////////////////
.wrapper {
position: relative;
}
////////////////////////////////////////////
// Stopwatch - most external rounded part
////////////////////////////////////////////
.stopwatch {
position: relative;
padding: 15px;
width: 200px;
height: 200px;
border-radius: 200px;
background-image: linear-gradient(
to bottom,
$COLOR-GRAY 50%,
$COLOR-BLACK 50%
);
box-shadow:
0 1px 3px rgba(0, 0, 0, .12),
0 1px 2px rgba(0, 0, 0, .24);
// INNER AREA
&::before {
content: '';
position: absolute;
top: 10px;
left: 10px;
width: 180px;
height: 180px;
border-radius: 180px;
background-color: $COLOR-BLUE-DARK;
box-shadow:
inset 0 1px 3px rgba(0, 0, 0, .12),
inset 0 1px 2px rgba(0, 0, 0, .24);
}
}
////////////////////////////////////////////
// Points - all small white marks
////////////////////////////////////////////
.points {
position: absolute;
top: 10px;
left: 10px;
width: 180px;
height: 180px;
border-radius: 180px;
.point {
position: absolute;
top: 89px;
width: 100%;
height: 2px;
&::before,
&::after {
content: '';
position: absolute;
width: 12px;
height: 2px;
border-radius: 4px;
background-color: $COLOR-WHITE;
}
&::before { left: 4px }
&::after { right: 4px }
&:nth-of-type(1) { transform: rotate(0deg) }
&:nth-of-type(2) { transform: rotate(10deg) }
&:nth-of-type(3) { transform: rotate(20deg) }
&:nth-of-type(4) { transform: rotate(30deg) }
&:nth-of-type(5) { transform: rotate(40deg) }
&:nth-of-type(6) { transform: rotate(50deg) }
&:nth-of-type(7) { transform: rotate(60deg) }
&:nth-of-type(8) { transform: rotate(70deg) }
&:nth-of-type(9) { transform: rotate(80deg) }
&:nth-of-type(10) { transform: rotate(90deg) }
&:nth-of-type(11) { transform: rotate(100deg) }
&:nth-of-type(12) { transform: rotate(110deg) }
&:nth-of-type(13) { transform: rotate(120deg) }
&:nth-of-type(14) { transform: rotate(130deg) }
&:nth-of-type(15) { transform: rotate(140deg) }
&:nth-of-type(16) { transform: rotate(150deg) }
&:nth-of-type(17) { transform: rotate(160deg) }
&:nth-of-type(18) { transform: rotate(170deg) }
}
}
////////////////////////////////////////////
// Stamp - stopwatch background stamps
////////////////////////////////////////////
.stamp {
position: absolute;
top: 10px;
left: 10px;
width: 180px;
height: 180px;
border-radius: 180px;
&::before {
content: '';
position: absolute;
top: 25px;
left: calc(50% - 25px);
width: 50px;
height: 50px;
border-radius: 50px;
background-color: rgba(0, 0, 0, .2);
}
&::after {
content: '';
position: absolute;
bottom: 30px;
left: calc(50% - 30px);
width: 60px;
height: 25px;
border-radius: 3px;
background-color: rgba(0, 0, 0, .2);
}
}
////////////////////////////////////////////
// Glass - a filter to looks like glass
////////////////////////////////////////////
.glass {
position: absolute;
top: 10px;
left: 10px;
width: 180px;
height: 180px;
border-radius: 180px;
background-image:
linear-gradient(
to bottom,
rgba(255, 255, 255, 0.15),
rgba(0, 0, 0, 0.25)
),
linear-gradient(
to bottom,
// to right bottom,
rgba(255, 255, 255, 0),
rgba(255, 255, 255, 0.15) 50%,
rgba(255, 255, 255, 0) 50%,
rgba(255, 255, 255, 0)
);
}
////////////////////////////////////////////
// Pointer - moving pointer
////////////////////////////////////////////
.pointer {
position: absolute;
top: 99px;
left: 14px;
width: 106px;
height: 3px;
border-radius: 4px;
background-color: $COLOR-ORANGE;
box-shadow:
0 1px 3px rgba(0, 0, 0, .12),
0 1px 2px rgba(0, 0, 0, .24);
transform-origin: 86px 50%;
animation: spin 15s infinite linear;
// BULLET POINTER
&::before {
content: '';
position: absolute;
width: 20px;
height: 20px;
border-radius: 20px;
right: 10px;
top: -9px;
border: 3px solid $COLOR-BLACK;
background-color: $COLOR-GRAY;
}
}
////////////////////////////////////////////
// Button - stopwatch buttons
////////////////////////////////////////////
.button {
position: absolute;
width: 20px;
height: 30px;
background-color: $COLOR-BLACK;
box-shadow:
0 1px 3px rgba(0, 0, 0, .12),
0 1px 2px rgba(0, 0, 0, .24);
&::before {
content: '';
position: absolute;
top: -20px;
left: -5px;
width: 30px;
height: 25px;
border-radius: 4px;
background-color: $COLOR-BLACK;
box-shadow:
0 1px 3px rgba(0, 0, 0, .12),
0 1px 2px rgba(0, 0, 0, .24);
}
// STATES
&.button--left {
top: 15px;
left: 15px;
transform: rotate(-45deg);
&::before {
background-color: $COLOR-ORANGE;
}
}
&.button--center {
top: -20px;
left: calc(50% - 10px);
&::before {
background-image: linear-gradient(
90deg,
transparent 75%,
rgba(255, 255, 255, .2) 25%
);
background-size: 3px 3px;
}
&::after {
content: '';
position: absolute;
top: -35px;
left: -15px;
width: 50px;
height: 50px;
border-radius: 50px;
border: 4px solid $COLOR-BLACK;
box-shadow:
inset 0 1px 3px rgba(0, 0, 0, .12),
inset 0 1px 2px rgba(0, 0, 0, .24);
z-index: -1;
}
}
&.button--right {
top: 15px;
right: 15px;
transform: rotate(45deg);
&::before {
background-color: $COLOR-WHITE;
}
}
}
////////////////////////////////////////////
// Spin - pointer animation
////////////////////////////////////////////
@keyframes spin {
0% { transform: rotate(0deg) }
100% { transform: rotate(360deg) }
}
////////////////////////////////////////////
// Base - Some base styles
////////////////////////////////////////////
html,
body {
height: 100%;
}
body {
display: flex;
background-color: $COLOR-BLUE-DARK;
background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, .3));
font-family: Georgia, Serif;
}
a {
padding-bottom: 2px;
border-bottom: 1px solid #f4f4f4;
color: #f4f4f4;
text-decoration: none;
&:hover {
border-bottom: 1px solid #ff3c41;
color: #ff3c41;
font-weight: bold;
}
}
*,
*::after,
*::before {
box-sizing: border-box;
}
////////////////////////////////////////////
// Structure
////////////////////////////////////////////
aside {
flex-basis: 380px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
background-color: rgba(0, 0, 0, 0.2);
color: #fff;
line-height: 1.5;
.title,
.subtitle,
.description {
font-style: italic;
text-shadow: 1px 1px 5px rgba(0, 0, 0, .5);
}
.title {
font-weight: bold;
font-size: 2em;
}
.subtitle {
font-size: 1.5em;
}
.description {
margin-top: 24px;
font-size: 1.2em;
}
}
main {
flex-grow: 1;
display: flex;
align-items: center;
justify-content: center;
}
我在 Google 上搜索了代码风格,希望得到一些解释,以便我可以了解这一点。
这不是 HTML 和 CSS,而是一些生成 HTML 和 CSS 的“pre-processing”系统。您需要找出正在使用的语法,然后 运行 服务器上的一个程序将自定义标记转换为真正的 HTML 和 CSS.
它在 Codepen 上运行的原因是 Codepen 运行在他们的服务器上为您安装该程序。
如果您在 Codepen 中点击“设置”,您可以 select 来自 4 HTML pre-processors、5 CSS pre-processors 和 4 JS pre-processors。其中每一个都会读取不同形式的源代码,并生成浏览器可以理解的HTML、CSS和JS。
查看它们中的每一个以了解它们的功能,以及您需要安装什么才能自己使用它们。
所见即所得Compiled Languages。在浏览器可以解释它们之前,他们需要另一个软件将它们转换为 HTML/CSS。
重点是使用变量和循环来提高大型项目源代码的可维护性和一致性。
HTML 看起来像 Pug.js,这是一种模板语言,可以配置为从服务器即时接受变量,并将不同文件的多个部分编译成一个 HTML 轻松记录。
看起来 CSS 的是 Scss,Sass 的一种方言,其用途相似。
如果您想在您的项目中使用它们,您可以使用众多在线编译器之一:
或者设置一个工具链在本地编译这些语言(这是用 node.js 完成的)。有关设置的详细信息,请参阅相应语言的入门页面。