从零开始学习html+css:构建一个拟态键盘

代码共计230行,花费两节课手搓出来的,完整代码放在了文章末尾。

图片[1]-从零开始学习html+css:构建一个拟态键盘-属余学习网

一、先认“骨架”:HTML部分(放内容的架子)

HTML就像“搭房子的框架”,你能看到的键盘、按键,都是用这个“积木块”堆出来的。

1. 最开头的固定格式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>拟态键盘</title>
</head>
<body>
    <!-- 键盘内容都在这里 -->
</body>
</html>
  • <DOCTYPE html> :告诉浏览器“这是HTML文件”,必须放第一行。
  • <html> :所有内容的“大外套”,所有代码都要包在里面。
  • <head> :“后台配置区”,放浏览器需要的设置,比如 <title> 是浏览器标签上的名字(“拟态键盘”这四个字)。
  • <body> :“前台展示区”,键盘、按键这些能看见的东西,全放这里面。

2. 键盘的“三层积木”(核心结构)

就像“大盒子套中盒子,中盒子套小盒子”,用3层 <div> 搭出键盘的样子:

第一层:container(最外层盒子)

<div class="container">...</div>
  • 作用:让键盘乖乖待在屏幕正中间,背景弄成黑色(突出键盘)。​
  • 注意: container 就是“容器”,把键盘装起来固定位置。

第二层:keyboard(键盘主体盒子)

<div class="keyboard">...</div>
  • 作用:这是键盘的“外壳”,所有按键都装在里面,自带圆角和立体边框。​
  • 注意: keyboard 就是“键盘”,是中间的大盒子。

第三层:area(按键分区盒子)

真实键盘分主键盘、方向键、小键盘,这里也用3个盒子分开装:

  • <div class=”area-1″> :装主键盘(字母键、Esc、Shift这些常用键)
  • <div class=”area-2″> :装方向键和功能键(↑↓←→、Insert这些)
  • <div class=”area-3″> :装小键盘(数字键、Num Lock这些)

最小积木:key(单个按键)

每个按键都是一个小 <div> ,比如Esc键:

<div class="key" style='background-color: chocolate;color: white;'>Esc</div>
  • class=”key” :给按键贴个“标签”,后面用CSS给所有按键统一加样式。
  • 中间的 Esc :就是按键上显示的文字。

二、再穿“衣服”:CSS部分(让内容变好看)

CSS就像“给积木上色、做造型”,没有CSS,键盘就是一堆乱序的文字。所有CSS都写在 <head> 里的 <style> 标签里。

1. 第一步:擦掉默认“污渍”(必做)

浏览器会给文字、盒子自带边距,就像衣服上的污渍,先擦掉:

html, body, div {
    margin: 0; /* 擦掉外边距 */
    padding: 0; /* 擦掉内边距 */
    font-family:'Segoe UI', ...; /* 统一文字样式,更美观 */
}

2. 让键盘居中:一招搞定

给 container (最外层盒子)加样式,让键盘在屏幕正中间:

.container {
    width: 100vw; /* 宽度=整个屏幕宽 */
    height: 100vh; /* 高度=整个屏幕高 */
    display: flex; /* 开启“弹性布局”,万能居中工具 */
    justify-content: center; /* 水平方向居中 */
    align-items: center; /* 垂直方向居中 */
    background-color: black; /* 背景弄成黑色 */
}
  • 注意: display: flex  + 两个 center ,就是“上下左右都居中”的秘诀。

3. 键盘外壳的“立体感”(拟态核心)

keyboard (键盘主体)的样式,让它看起来像真实的键盘外壳:

.keyboard {
    display: flex; /* 让3个按键分区横向排开 */
    border-radius: 10px; /* 边角弄成圆角,不扎手 */
    /* 内外阴影叠加,做出“凹陷”的立体效果 */
    box-shadow: 0px 0px 20px 1px #666 inset, /* 内阴影:像外壳凹进去 */
                0px 0px 5px 1px #fff; /* 外阴影:像外壳的亮边 */
    background-color: #E4E6EA; /* 外壳底色:浅灰色 */
    padding: 30px; /* 外壳内部留空隙,按键不贴边 */
}

4. 单个按键的“凸起感”(最关键)

每个按键的样式,让它摸起来像能按下去:

.key {
    width: 40px; /* 按键宽40px */
    height: 40px; /* 按键高40px */
    border-radius: 8px; /* 按键边角也弄圆角 */
    background-color: #E4E9EC; /* 按键底色:比外壳浅一点 */
    /* 左右阴影反差,做出“凸起”效果 */
    box-shadow: 3px 3px 8px 2px #999, /* 左下深阴影:像凸起的影子 */
                -3px -3px 8px 2px #fff; /* 右上白阴影:像凸起的高光 */
    color: #666; /* 按键文字颜色:深灰色 */
    cursor: pointer; /* 鼠标放上去变“小手”,提示能点 */
}
/* 鼠标放上去的效果(模拟按下去) */
.key:hover {
    box-shadow: 0 0 3px 1px #999; /* 阴影变浅,像按下去了 */
}

完整代码&演示地址

演示地址:点我进入
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>拟态键盘</title>
</head>
<style>
        html, body, div {
            margin: 0;
            padding: 0;
			font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif
        }
        .container {
            width: 100vw;
            height: 100vh;
            display: flex;
            justify-content: center;
            align-items: center;
            background-color: black;
        }
         .keyboard {
            display: flex;
            border-radius: 10px;
            box-shadow: 0px 0px 20px 1px #666 inset, 0px 0px 5px 1px #fff;
            background-color: #E4E6EA;
            padding: 30px;
        }
        .key {
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            width: 40px;
            height: 40px;
            border-radius: 8px;
            background-color: #E4E9EC;
            box-shadow: 3px 3px 8px 2px #999, -3px -3px 8px 2px #fff;
            color: #666;
            font-size: 13px;
            cursor: pointer;
			transition: .1s;
        }
        .key:hover {
            box-shadow: 0 0 3px 1px #999;
        }
        .key-empty {
            width: 40px;
            height: 40px;
        }
        .area-1 {
            width: 740px;
            display: flex;
            flex-wrap: wrap;
            gap: 10px;
            align-content: baseline;
        }
        .area-2 {
            width: 140px;
            margin-left: 20px;
            display: flex;
            flex-direction: column;
            justify-content: space-between;
        }
        .area-2-item{
            display: flex;
            gap: 10px;
            flex-wrap: wrap;
        }
        .area-3 {
            width: 190px;
            margin-left: 20px;
            display: flex;
            flex-direction: column;
            gap: 10px;
        }
        .area-3-light{
            display: flex;
            gap: 10px;
        
        }
        .area-3-light-item{
            width: 40px;
            height: 40px;
            text-align: center;
            line-height: 40px;
        }
        .area-3-number {
            display: flex;
            gap: 10px;
        }
        .area-3-number-item {
            display: flex;
            flex-wrap: wrap;
            gap: 10px;
        }
        </style>
<body>
    <div class="container">
    <div class="keyboard">
    <div class="area-1">
    <div class="key" style='background-color: chocolate;color: white;'>Esc</div>
    <div class="key" style="margin-left: 50px;">F1</div>
    <div class="key"> F2</div>
    <div class="key">F3</div>
    <div class="key">F4</div>
    <div class="key" style="margin-left: 25px;">F5</div>
    <div class="key">F6</div>
    <div class="key">F7</div>
    <div class="key">F8</div>
    <div class="key" style="margin-left: 25px;">F9</div>
    <div class="key">F10</div>
    <div class="key">F11</div>
    <div class="key">F12</div>
    <div class="key"><span>~</span>`</div>
    <div class="key"><span>!</span>1</div>
    <div class="key"><span>@</span>2</div>
    <div class="key"><span>#</span>3</div>
    <div class="key"><span>$</span>4</div>
    <div class="key"><span>%</span>5</div>
    <div class="key"><span>^</span>6</div>
    <div class="key"><span>&</span>7</div>
    <div class="key"><span>*</span>8</div>
    <div class="key"><span>(</span>9</div>
    <div class="key"><span>)</span>0</div>
    <div class="key"><span>—</span>-</div>
    <div class="key"><span>+</span>=</div>
    <div class="key" style="width: 90px;">←</div>
    <div class="key" style="width: 70px;">Tab</div>
    <div class="key">Q</div>
    <div class="key">W</div>
    <div class="key">E</div>
    <div class="key">R</div>
    <div class="key">T</div>
    <div class="key">Y</div>
    <div class="key">U</div>
    <div class="key">I</div>
    <div class="key">O</div>
    <div class="key">P</div>
    <div class="key"><span>{</span>[</div>
    <div class="key"><span>}</span>]</div>
    <div class="key"style="width:50px;">Enter</div>
    <div class="key"style="width: 50px">Cap</div>
    <div class="key">A</div>
    <div class="key">S</div>
    <div class="key">D</div>
    <div class="key">F</div>
    <div class="key">G</div>
    <div class="key">H</div>
    <div class="key">J</div>
    <div class="key">K</div>
    <div class="key">L</div>
    <div class="key"><span>:</span>;</div>
    <div class="key"><span>"</span>'</div>
    <div class="key" style="width: 40px;"><span>|</span>\</div>
    <div class="key" style="width: 100px;">Shift</div>
    <div class="key">Z</div>
    <div class="key">X</div>
    <div class="key">C</div>
    <div class="key">V</div>
    <div class="key">B</div>
    <div class="key">N</div>
    <div class="key">M</div>
    <div class="key"><span><</span>,</div>
    <div class="key"><span>></span>.</div>
    <div class="key"><span>?</span>/</div>
    <div class="key" style="width: 120px;">Shift</div>
    <div class="key" style="width: 50px;">Ctrl</div>
    <div class="key" style="width: 50px;">Win</div>
    <div class="key" style="width: 50px;">Alt</div>
    <div class="key" style="width: 300px;">Ctrl</div>
    <div class="key" style="width: 50px;">Alt</div>
    <div class="key" style="width: 50px;">Fn</div>
    <div class="key" style="width: 50px;">▤</div>
    <div class="key" style="width: 50px;">Ctrl</div>
    </div>
    <div class="area-2">
    <div class="area-2-item">
    <div class="key">Print</div>
    <div class="key">Scroll</div>
    <div class="key">Pause</div>
    <div class="key">Insert</div>
    <div class="key">Home</div>
    <div class="key">Up</div>
    <div class="key">Delete</div>
    <div class="key">End</div>
    <div class="key">Down</div>
    </div>
    <div class="area-2-item">
    <div class="key-empty"></div>
    <div class="key">↑</div>
    <div class="key-empty"></div>
    <div class="key">←</div>
    <div class="key">↓</div>
    <div class="key">→</div>
    </div>
    </div>
    <div class="area-3">
    <div class="area-3-light">
                    <div class="area-3-light-item" style="color: yellow;">◘</div>
                    <div class="area-3-light-item">◘</div>
                    <div class="area-3-light-item">◘</div>
                    <div class="area-3-light-item">◘</div>
                </div>
    <div class="area-3-number">
<div class="area-3-number">
                    <div class="area-3-number-item">
                        <div class="key">Num</div>
                        <div class="key">/</div>
                        <div class="key">*</div>
                        <div class="key">7</div>
                        <div class="key">8</div>
                        <div class="key">9</div>
                        <div class="key">4</div>
                        <div class="key">5</div>
                        <div class="key">6</div>
                        <div class="key">1</div>
                        <div class="key">2</div>
                        <div class="key">3</div>
                        <div class="key" style="width: 90px;">0</div>
                        <div class="key">.</div>
                    </div>
                    <div class="area-3-number-item">
                        <div class="key">-</div>
                        <div class="key" style="height: 90px;">+</div>
                        <div class="key" style="height: 90px;">Enter</div>
    </div>
</body>

</html>
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容