每日挑战の飞机舷窗

本文介绍了一个使用纯HTML和CSS创建的飞机舷窗动画教程。通过跟随前端每日挑战专栏,作者分享了如何使用CSS3实现一个可点击并带有开合动画的飞机舷窗,包括窗盖的开合和灯光颜色变化,以及窗外云朵的动态效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每日挑战の飞机舷窗

内容摘要

在segmentFault上看到有前端每日专栏,觉得不错,正好css基础还不够巩固决定跟着该专栏每天跟着学习一些有趣的纯html+css制作的效果,动画出处:https://segmentfault.com/a/1190000016688955

最终效果预览:https://codepen.io/comehope/pen/jeaOrw
在这里插入图片描述

内容学习

画css动画需要很多css3.0的属性,可以很好的巩固自己css3的能力,很多人都对js研究的比较深,但最基础的部分html+css却掌握不足。这次学习的是可点击的动画效果,点击窗体窗盖部分就能实现打开窗盖的动画,很简单。代码中改了少部分内容和原来的代码有些许不同,但总体效果几乎一致。

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>飞机舷窗</title>
    <style>
        body{
            /*居中显示*/
            margin:0;
            height: 100vh;
            align-items: center;
            /*设置盒子的对齐方式*/
            display: flex;
            justify-content: center;
            background-color: skyblue;
        }
        /*:root 选择器匹配文档根元素 这里为html元素*/
        :root{
            --font-size: 10px;
        }
        .window{
            position: relative;
            /*设置为ie盒子模型,以边框指定宽度高度*/
            -webkit-box-sizing: border-box;
            -moz-box-sizing: border-box;
            box-sizing: border-box;
            width: 25em;
            height: 35em;
            font-size: var(--font-size);
            background-color: #d9d9d9;
            /*画出窗框*/
            border-radius: 5em;
            box-shadow:
             inset 0 0 8em rgba(0,0,0,0.2),0 0 0 0.4em #808080,0 0 0 4em whitesmoke,0 0 0 4.4em #808080,0 2em 4em 4em rgba(0,0,0,0.1);
        }
        .window .curtain{
            position: absolute;
            width: inherit;
            height: inherit;
            border-radius:5em;
            box-shadow: 0 0 0 0.5em #808080,0 0 3em rgba(0,0,0,0.4);
            background-color: whitesmoke;
            left: 0;
            top: -5%;
        }
        .window .curtain::before{
            content: "";
            position: absolute;
            width: 40%;
            height: 0.8em;
            background-color: #808080;
            left: 30%;
            bottom: 1.6em;
            border-radius:0.4em;
        }
        .window .curtain::after{
            content: "";
            position: absolute;
            width: 1.6em;
            height: 0.8em;
            /*渐变色处理*/
            background-image: radial-gradient(orange,orangered);
            bottom: 1.6em;
            -webkit-border-radius: 0.4em;
            -moz-border-radius: 0.4em;
            border-radius: 0.4em;
            /*1.6em来自于自身的宽度*/
            left: calc((100% - 1.6em)/2);
        }
        .toggle{
            position: absolute;
            filter: Opacity(0);
            width: 35em;
            height: 52em;
            top: 1em;
            font-size: var(--font-size);
            cursor:pointer;
            z-index: 3;
            left: calc((100% - 35em)/2);
        }
        /*动画制作*/
        .window .curtain{
            transition: 0.5s ease;
            /*为了让窗体盖住景色*/
            z-index: 1;
        }
        .toggle:checked ~ .window .curtain{
            top:-90%;
        }
        /*灯变成绿光*/
        .toggle:checked ~ .window .curtain::after{
            background-image: radial-gradient(lightgreen,limegreen);
        }
        .window{
            /*超出窗体部分隐藏*/
            overflow: hidden;
        }

        /*接下来绘制窗外的景色*/
        .window .clouds{
            position: relative;
            width: 20em;
            height: 30em;
            background-color: deepskyblue;
            -webkit-box-shadow: 0 0 0 0.4em #808080;
            -moz-box-shadow: 0 0 0 0.4em #808080;
            box-shadow: 0 0 0 0.4em #808080;
            left: calc((100% - 20em)/2);
            top: calc((100% - 30em)/2);
            border-radius: 7em;
        }
        .clouds span{
            position: absolute;
            width: 10em;
            height: 4em;
            background-color: white;
            border-radius: 50%;
        }
        .clouds span::before, .clouds span::after{
            content: "";
            position: absolute;
            width: 4em;
            height: 4em;
            background-color: white;
            border-radius: 50%;
        }
        .clouds span::before{
            top:-2em;
            left: 2em;
        }
        .clouds span::after{
            top: -1em;
            right: 1em;
        }

        .window .clouds{
            overflow: hidden;
            /*z-index: 0;*/
        }

    /*云朵的飘动效果*/
        .clouds span{
            /*{animation-name animation-duration(动画所花费时间)
            animation-timing-function(速度曲线 linear为全程等速)
            animation-iteration-count(播放次数 infinite无限次)
           */
            -webkit-animation: move 4s linear infinite;
            -o-animation: move 4s linear infinite;
            animation: move 4s linear infinite;
        }
        @keyframes move {
            from{
                left: -150%;
            }to{
            left: 150%;
                         }
        }
        .clouds span:nth-child(2){
            top: 40%;
            animation-delay: -1s;
        }
        .clouds span:nth-child(3){
            top: 60%;
            animation-delay: -0.5s;
        }
        .clouds span:nth-child(4){
            top: 20%;
            /*缩放 放大两倍*/
            transform: scale(2);
            animation-delay: -1.5s;
        }
        .clouds span:nth-child(2){
            top: 70%;
            transform: scale(1.5);
            animation-delay: -3s;
        }
        /*搞定!~*/
    </style>
</head>
<body>
    <!--window代表窗台-->s
    <input type="checkbox" class="toggle">
    <input type="checkbox" class="toggle2">
    <figure class = "window">
        <!--curtain代表窗帘-->
        <div class="curtain"></div>
        <!--云朵的表示层-->
        <div class="clouds">
            <span></span>
            <span></span>
            <span></span>
            <span></span>
            <span></span>
        </div>
    </figure>
</body>
</html>
<think>我们被要求绘制飞机盒的设计图或进行3D建模。飞机盒通常是指一种特定的折纸盒子,形状像飞机,也可能是航空主题的收纳盒或包装盒。考虑到用户意图,我们需要进行网络搜索以获取相关信息。第一步:通过搜索了解飞机盒的设计要素飞机盒设计通常包含以下几个关键部分:-盒身:主体结构,可能包含飞机机身、机翼、尾翼等特征。-折叠结构:用于实现从平面图纸到立体成型的折叠线。-装饰元素:如窗户、螺旋桨等细节。第二步:获取设计图绘制方法根据网络资源,绘制飞机盒设计图通常有两种方式:1.手绘设计图:需要准备绘图纸、铅笔、尺子、橡皮等工具。按照折纸原理设计展开图,标注切割线和折线(通常虚线表示谷折,点划线表示山折)。2.使用设计软件:如AutoCAD,AdobeIllustrator等,可以精确绘制平面展开图。第三步:3D建模方法对于3D建模,可以采用以下软件:-Blender:免费开源的3D建模软件,适合创建复杂的飞机模型。-Tinkercad:基于浏览器的简单3D建模工具,适合初学者。-SketchUp:易用的3D建模软件,有免费版本。第四步:具体步骤示例(以Blender为例)1.创建基本形状:使用立方体作为机身,调整大小。2.添加细节:通过挤出、倒角等操作塑造机翼、尾翼。3.添加材质和纹理:赋予飞机盒颜色或图案。第五步:参考资源根据搜索,有许多在线教程和模板可供参考:-折纸飞机盒的模板可以在FreeVector、Freepik等网站找到免费矢量图。-YouTube上有许多关于折纸飞机盒和3D建模的教程。根据上述信息,给出以下答案:</think> 要绘制飞机盒的设计图或进行3D建模,可采用以下方法: ### 平面设计图绘制方法 准备工具:绘图纸、铅笔、尺子、圆规 1. **确定基础尺寸** 测量实际需要的长宽高(如$L \times W \times H$),飞机盒需额外计算机翼和尾翼尺寸。典型展开图总尺寸公式: $$总长度 = 2L + 2W + 粘边$$ $$总宽度 = H + W + 机翼延伸量$$ 2. **绘制展开图** - 用实线标注切割轮廓 - 虚线标示内折线(谷折),点划线标示外折线(山折) - 机身区域保留插口位置(通常5-10mm宽度) 3. **添加航空元素** 在侧翼位置设计机翼剖面(NACA翼型建议用$y = \pm \frac{t}{0.2}(0.2969\sqrt{x} - 0.126x - 0.3516x^2 + 0.2843x^3 - 0.1015x^4)$),机头设计流线型弧度 ### 3D建模实现流程 推荐软件:Blender(免费)或Fusion 360(教育版免费) 1. **基础建模** 创建立方体机身,通过挤出(Extrude)操作生成机翼: ```blender # Blender基本操作 bpy.ops.mesh.primitive_cube_add(size=2) bpy.ops.transform.translate(value=(0, 1.5, 0)) bpy.ops.mesh.extrude_region_move(TRANSFORM_OT_translate={"value":(0,3,0)}) ``` 2. **曲面优化** - 应用细分表面修改器(Subdivision Surface)平滑边缘 - 使用布尔运算切割舷窗(布尔差集操作) ```blender mod_subsurf = obj.modifiers.new("Subd", 'SUBSURF') mod_subsurf.levels = 2 ``` 3. **结构细化** - 添加厚度修改器(Solidify)实现纸板厚度 - 在折叠线位置创建倒角边(Bevel Edge) - 展开UV贴图导出平面模板 ### 实用资源参考 1. GrabCAD提供免费飞机盒STEP模型(搜索"paper airplane box") 2. 折纸数据库Origami Database收录经典飞机盒模板(编码#PF-112) 3. Thingiverse可下载3D打印适配的飞机盒卡扣部件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值