今天在学习的时候发现自己居然不知道 css 可以使用变量来引用一个值。所以决定做一个小案例。刚好之前也了解到新出的 grid 布局很好用,这里我就结合一下两个我不熟悉的知识点,给大家画一只可爱的小企鹅。欢迎大家指正错误。我们共同进步吧!
1.grid 实现”9 宫格“- 小企鹅是基于下图的九宫格来展开的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>CSS 变量加 grid 画一只企鹅 </title>
<style>
.penguin {
width: 300px;
height: 300px;
display: grid;
grid-template-columns: 100px 100px 100px;// 3 列
grid-template-rows: 100px 100px 100px; // 3 行
}
.item:nth-child(even) {background-color: darkkhaki;}
.item:nth-child(odd) {background-color: darksalmon;}
</style>
</head>
<body>
<main class="penguin">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
</main>
</body>
</html>
2. 画一只小企鹅
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>CSS 变量加 grid 画一只企鹅 </title>
<style>
.penguin {
width: 300px;
height: 300px;
background-color: aquamarine;
display: grid;
grid-template-columns: 65px 170px 65px;
grid-template-rows: 100px 150px 50px;
/* 声明变量的时候,变量名前面要加两根连词线(--);var()函数用于读取变量;函数还可以使用第二个参数,表示变量的默认值。eg:background: var(--penguin-skin, gray);*/
/* 动态设置企业的肤色 */
--penguin-skin: gray;
--penguin-belly: white;
--penguin-foot: orange;
--penguin-cheek: pink;
}
/* 基数 */
/* .item:nth-child(even) {background-color: darkkhaki;}*/
/* 偶数 */
/* .item:nth-child(odd) {background-color: darksalmon;} */
/* 头 */
.head {background: var(--penguin-skin, gray);
width: 80%;
height: 100%;
border-radius: 80% 80% 50% 50%;
align-self: end;
transform: translateY(20%);
z-index: 3;
position: relative;
}
.face {
/* display: grid;
grid-template-columns: 33% 33% 33%;
justify-items: center;
align-items: end; */
width: 80%;
height: 90%;
/* border-radius: 50%; */
position: relative;
position: absolute;
bottom: 0;
left: 0;
right: 0;
top: 0;
margin: 10% auto;
}
.face:before {
display: block;
content: "";
width: 80%;
height: 100%;
border-radius: 70% 60% 50% 40%;
transform: rotate(-45deg);
background: var(--penguin-belly, white);
position: absolute;
left: -5%;
top: 5%;
}
.face:after {
display: block;
content: "";
width: 80%;
height: 100%;
border-radius: 60% 70% 40% 50%;
transform: rotate(45deg);
background: var(--penguin-belly, white);
position: absolute;
right: -5%;
top: 5%;
}
.face-on {
display: grid;
grid-template-columns: 33% 33% 33%;
justify-items: center;
align-items: end;
width: 80%;
height: 80%;
margin: 0 auto;
position: absolute;
left: 0;
right: 0;
bottom: 0;
}
.eye {
background: black;
width: 20px;
height: 20px;
border-radius: 50%;
}
.left-eye {margin-left: 50%;}
.right-eye {margin-right: 50%;}
/*
CSS 选择器
:before p:before 在每个 <p> 元素的内容之前插入内容。:after p:after 在每个 <p> 元素的内容之后插入内容。*/
.eye:after {
display: block;
content: " ";
background-color: var(--penguin-belly, white);
width: 8px;
height: 8px;
border-radius: 50%;
}
/* 脸颊 */
.cheek {
width: 60%;
height: 30%;
border-radius: 50%;
background-color: var(--penguin-cheek, pink);
align-self: start;
}
.mouth {
width: 100%;
height: 100%;
display: block;
}
.mouth:before {
display: block;
content: " ";
width: 60%;
height: 20%;
border-radius: 50%;
background: var(--penguin-foot, rgb(139, 137, 137));
margin: 0 auto;
}
.mouth:after {
display: block;
content: " ";
width: 50%;
height: 20%;
border-radius: 50%;
background: var(--penguin-foot, gray);
margin: 0 auto;
}
/* 手 */
.hand {
width: 50%;
height: 50%;
background: var(--penguin-skin, gray);
z-index: 0;
}
/*
设置多个不同的 CSS 变换 (transform) 属性时,在属性中间用空格隔开即可,旋转 缩放 扭曲 等同时执行多个效果!顺序:是从后向前执行的!!!顺序不同变换效果也会不同!!!eg: transform: rotate(45deg) translateX(10px);
eg: transform: translateX(10px) rotate(45deg) ;
位置会有很大的区别!*/
/* 左手 */
.left-hand {
border-radius: 30% 30% 120% 30%;
transform: rotate(45deg) translate(90%, -26%);
justify-self: end;
}
/* 右手 */
.right-hand {
border-radius: 30% 30% 30% 120%;
transform: rotate(-45deg) translate(-90%, -26%);
}
/* 肚子 */
.center {margin: 0 auto;}
.belly-border {
width: 95%;
height: 100%;
background: var(--penguin-skin, gray);
border-radius: 120%;
z-index: 1;
}
.belly-in {
width: 85%;
height: 95%;
background: var(--penguin-belly, white);
border-radius: 120% 120% 100% 100%;
}
/* 脚 */
.penguin-feet {position: relative;}
.feet {
display: inline-block;
width: 30%;
height: 50%;
background: var(--penguin-foot, orange);
border-radius: 50%;
position: absolute;
z-index: 0;
top: -40%;
}
.left-feet {transform: rotate(160deg);
left: 18%;
}
.right-feet {transform: rotate(-160deg);
right: 18%;
}
</style>
</head>
<body>
<img src="./penguin.png" style="width: 300px; height: 300px;" />
<main class="penguin">
<section class="item"></section>
<section class="item head center">
<div class="face"></div>
<div class="face-on">
<div class="eye left-eye"></div>
<div></div>
<div class="eye right-eye"></div>
<div class="cheek left-cheek"></div>
<div class="mouth"></div>
<div class="cheek right-cheek"></div>
</div>
</section>
<section class="item"></section>
<section class="item hand left-hand"></section>
<section class="item center belly-border">
<div class="belly-in center"></div>
</section>
<section class="item hand right-hand"></section>
<section class="item"></section>
<section class="item penguin-feet">
<section class="feet left-feet"></section>
<section class="feet right-feet"></section>
</section>
<section class="item"></section>
</main>
</body>
</html>
3. 预览
推荐文章
1.grid 布局
http://www.ruanyifeng.com/blo…
2.css 变量
http://www.ruanyifeng.com/blo…
3.css 选择器
https://www.w3school.com.cn/c…
4.flex 布局
http://www.ruanyifeng.com/blo…