当前位置:

首页 > 编程开发 > 程序猿说love的100种语言

程序猿说love的100种语言

本文目录

    一位前端程序员制作了展示100种语言“爱”的页面,采用CSSGrid布局和彩虹渐变背景,每个卡片悬停有浮雕效果,点击后弹出模态框放大显示对应语言的“爱”字,并配有心形装饰,交互反馈细腻。

    提到程序猿,很多人脑海中浮现的刻板印象是:直男、木讷、不解风情。不可否认,这个群体确实挺“直”,心思都花在逻辑和代码上了,哪有时间兜圈子。但如果你因此断定程序猿不懂浪漫,那可就大错特错了。

    程序猿的时间大多给了工作和学习,比起一般人,可能确实少了一些风花雪月的机会。但浪漫这件事,他们有自己的表达方式。你心情不好的时候,他分分钟就能搞出个让你眼前一亮的小惊喜——比如,用100种语言跟你表白。

    这里说的“语言”,可不是编程语言,而是实实在在的各个国家的语言文字。下面就是一位前端程序猿制作的“一百种语言的LOVE”页面,代码直接贴出来了,感兴趣的可以参考一下。

    index.html

    
    
      
        
        CodePen - 100 List items: Love translations ♡
        
      
      
        

    HTML 页面结构非常简单,头部引入了一个样式文件 style.css,底部引入了一个 JS 脚本 script.js。核心逻辑都在后面这两个文件里。

    style.css

    @import url('https://fonts.googleapis.com/css2?family=Great+Vibes&display=swap');
    
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }
    
    body {
        overflow-x: hidden;
        background-image: -webkit-gradient(linear,
            right bottom, left top,
            from(#ffadad),
            color-stop(#ffd6a5),
            color-stop(#fdffb6),
            color-stop(#caffbf),
            color-stop(#9bf6ff),
            color-stop(#a0c4ff),
            to(#bdb2ff));
        background-image: linear-gradient(to top left,
            #ffadad,
            #ffd6a5,
            #fdffb6,
            #caffbf,
            #9bf6ff,
            #a0c4ff,
            #bdb2ff);
        color: #5d5865;
    }
    
    #list-group {
        display: grid;
        grid-template-columns: repeat(5, 1fr);
        grid-gap: 0.5rem; gap: 0.5rem;
        padding: 1rem;
    }
    
    .item {
        position: relative;
        display: -webkit-box;
        display: flex;
        -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
                flex-direction: column;
        -webkit-box-pack: center;
                justify-content: center;
        -webkit-box-align: center;
                align-items: center;
        background-image: linear-gradient(45deg, rgba(255,255,255,0.3), transparent, rgba(255,255,255,0.3));
        border-radius: 2rem;
        padding: 3rem 0;
        box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);
        cursor: pointer;
        -webkit-transition: 0.3s;
        transition: 0.3s;
    }
    
    .item::before,
    .item::after {
        content: "";
        position: absolute;
        z-index: 1;
        width: 3rem;
        height: 3rem;
    }
    
    .item::before {
        bottom: 1rem; left: 1rem;
        border-radius: 0 0 0 1rem;
        background-image: linear-gradient(225deg, transparent 50%, rgba(255, 255, 255, 0.5));
    }
    
    .item::after {
        top: 1rem; right: 1rem;
        border-radius: 0 1rem 0 0;
        background-image: linear-gradient(45deg, transparent 50%, rgba(255, 255, 255, 0.5));
    }
    
    .item:hover,
    .item:focus,
    .item:active {
        background-color: white;
        outline: none;
    }
    
    dt {
        text-align: right;
        font-family: 'Great Vibes', serif;
        font-size: 3rem;
    }
    
    dt.smaller {
        font-size: 1.8rem;
    }
    
    dt.medium {
        font-size: 2.1rem;
    }
    
    dt.smaller,
    dt.medium {
        font-style: italic;
    }
    
    .italic {
        font-style: italic;
    }
    
    dd {
        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        font-weight: 300;
        font-size: 0.9rem;
    }
    
    dd, dt {
        pointer-events: none;
    }
    
    #modal {
        display: none;
        -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
                flex-direction: column;
        -webkit-box-pack: center;
                justify-content: center;
        -webkit-box-align: center;
                align-items: center;
        left: 2rem; top: 2rem; right: 2rem; bottom: 2rem;
        border-radius: 1rem;
        box-shadow: 0.5rem 0.5rem 5rem rgba(0, 0, 0, 0.5);
        border: 1px solid rgba(0, 0, 0, 0.25);
        background-color: white;
    }
    
    #modal.active {
        min-height: 15rem;
        display: -webkit-box;
        display: flex;
        position: fixed;
        z-index: 2;
        -webkit-animation: openModal 0.2s;
                animation: openModal 0.2s;
    }
    
    #modal .lang-name {
        position: relative;
        z-index: 4;
        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        font-weight: 600;
        font-size: 1.3rem;
        text-transform: capitalize;
    }
    
    #modal h1 {
        position: relative;
        z-index: 1;
        font-family: 'Great Vibes', serif;
        font-size: 10rem;
        line-height: 1.3;
    }
    
    #modal h1.smaller {
        font-size: 5rem;
    }
    
    #modal h1.medium {
        font-size: 7.5rem;
    }
    
    #modal h1::after,
    #modal h1::before {
        content: "";
        position: absolute;
        bottom: 50%; left: 50%;
        -webkit-transform: translateX(-50%) translateY(52%);
                transform: translateX(-50%) translateY(52%);
        -webkit-clip-path: polygon(50% 10%, 66% 0, 100% 0, 100% 50%, 50% 100%, 0 50%, 0 0, 33% 0);
                clip-path: polygon(50% 10%, 66% 0, 100% 0, 100% 50%, 50% 100%, 0 50%, 0 0, 33% 0);
    }
    
    #modal h1::before {
        z-index: -2;
        background-color: lightcoral;
        opacity: 0.5;
        width: 10rem;
        height: 10rem;
        border-radius: 3rem 3rem 6rem 6rem;
    }
    
    #modal h1::after {
        z-index: -1;
        background-color: lightcoral;
        opacity: 0.3;
        width: 12rem;
        height: 12rem;
        border-radius: 3rem 3rem 6rem 6rem;
    }
    
    #modal-close-btn {
        position: absolute;
        top: 1rem; right: 1rem;
        width: 2rem; height: 2rem;
        text-align: center;
        display: -webkit-box;
        display: flex;
        -webkit-box-pack: center;
                justify-content: center;
        -webkit-box-align: center;
                align-items: center;
        background-color: transparent;
        border: 1px solid rgba(93, 88, 101, 0.5);
        border-radius: 0.5rem;
        -webkit-transition: 0.2s ease;
        transition: 0.2s ease;
    }
    
    #modal-close-btn:hover {
        background-color: rgba(0, 0, 0, 0.05);
        border: 1px solid rgba(93, 88, 101, 0.8);
    }
    
    button {
        cursor: pointer;
    }
    
    @media screen and (max-width: 959px) {
        #list-group {
            grid-template-columns: repeat(4, 1fr);
        }
        #modal {
            left: 1rem; top: 1rem; right: 1rem; bottom: 1rem;
        }
    }
    
    @media screen and (max-width: 759px) {
        #list-group {
            grid-template-columns: repeat(3, 1fr);
        }
        #modal h1 {
            font-size: 7rem;
            line-height: 1.3;
        }
        #modal h1.smaller {
            font-size: 3rem;
        }
        #modal h1.medium {
            font-size: 4.4rem;
        }
        #modal {
            left: 0.75rem; top: 0.75rem; right: 0.75rem; bottom: 0.75rem;
        }
    }
    
    @media screen and (max-width: 639px) {
        #list-group {
            grid-template-columns: repeat(2, 1fr);
        }
        #modal h1 {
            font-size: 5rem;
            line-height: 1.3;
        }
        #modal h1.smaller {
            font-size: 2rem;
        }
        #modal h1.medium {
            font-size: 3.3rem;
        }
        #modal {
            left: 0.5rem; top: 0.5rem; right: 0.5rem; bottom: 0.5rem;
        }
    }
    
    @-webkit-keyframes openModal {
        from {
            opacity: 0;
            -webkit-transform: scale(0.8);
                    transform: scale(0.8);
        }
        to {
            opacity: 1;
            -webkit-transform: scale(1);
                    transform: scale(1);
        }
    }
    
    @keyframes openModal {
        from {
            opacity: 0;
            -webkit-transform: scale(0.8);
                    transform: scale(0.8);
        }
        to {
            opacity: 1;
            -webkit-transform: scale(1);
                    transform: scale(1);
        }
    }

    着重看这些样式。背景用了一组从暖色到冷色的渐变,恰好对应了彩虹色系,视觉上就很讨喜。卡片布局用的是 CSS Grid,每行5列,每个卡片都带有圆角、阴影,以及一种微妙的“浮雕”感。点击卡片后,会弹出一个模态框,里面会放大显示对应语言的“爱”字,并配上心形背景装饰。整个交互的视觉反馈非常细腻,从动画过渡到字体大小自适应,都考虑得很周到。

    script.js

    const dl = document.getElementById('list-group');
    const modal = document.getElementById('modal');
    
    dl.addEventListener('click', openModal);
    
    function populateList() {
        let output = '';
        loveTranslations.forEach((love) => {
            if (love.language === 'georgian' || love.language === 'malayalam' || love.language === 'tatar') {
                output += `
    ${love.word}
    ${love.language}
    `; } else if (to_medium.includes(love.language) === true) { output += `
    ${love.word}
    ${love.language}
    `; } else if (to_italic.includes(love.language) === true) { output += `
    ${love.word}
    ${love.language}
    `; } else { output += `
    ${love.word}
    ${love.language}
    `; } }); dl.innerHTML = output; } function openModal(e) { if (e.target.nodeName.toLowerCase() === 'dl') { return; } else if (e.target.classList.contains('item') === true) { const lang = e.target.children[1].innerText.toLowerCase(); modal.classList.toggle('active'); if (to_italic.includes(lang) === true) { modal.innerHTML += `

    ${e.target.children[0].innerText}

    ${e.target.children[1].innerText}

    `; } else if (to_medium.includes(lang) === true) { modal.innerHTML += `

    ${e.target.children[0].innerText}

    ${e.target.children[1].innerText}

    `; } else if (lang === 'georgian' || lang === 'malayalam' || lang === 'tatar') { modal.innerHTML += `

    ${e.target.children[0].innerText}

    ${e.target.children[1].innerText}

    `; } else { modal.innerHTML += `

    ${e.target.children[0].innerText}

    ${e.target.children[1].innerText}

    `; } } } function closeModal() { document.getElementById('modal').classList.toggle('active'); modal.innerHTML = ''; } const loveTranslations = [ { "language": "english", "word": "love" }, { "language": "pish", "word": "amor" }, { "language": "french", "word": "l'amour" }, { "language": "dutch", "word": "liefde" }, { "language": "greek", "word": "αγάπη" }, { "language": "Arabic", "word": "حب" }, { "language": "albanian", "word": "dashuri" }, { "language": "amharic", "word": "ፍቅር" }, { "language": "armenian", "word": "Սեր" }, { "language": "azerbaijani", "word": "sevgi" }, { "language": "basque", "word": "maitasuna" }, { "language": "belarusian", "word": "каханне" }, { "language": "bengali", "word": "ভালবাসা" }, { "language": "bosnian", "word": "ljuba vi" }, { "language": "bulgarian", "word": "любов" }, { "language": "catalan", "word": "amor" }, { "language": "cebuano", "word": "gugma" }, { "language": "chinese", "word": "爱" }, { "language": "corsican", "word": "amore" }, { "language": "croatian", "word": "ljuba v" }, { "language": "czech", "word": "milovat" }, { "language": "danish", "word": "elsker" }, { "language": "esperanto", "word": "amo" }, { "language": "estonian", "word": "armastus" }, { "language": "filipino", "word": "pag-ibig" }, { "language": "finnish", "word": "rakkaus" }, { "language": "frisian", "word": "leafde" }, { "language": "galician", "word": "amor" }, { "language": "georgian", "word": "სიყვარული" }, { "language": "german", "word": "liebe" }, { "language": "gujarati", "word": "પ્રેમ" }, { "language": "haitian creole", "word": "lanmou" }, { "language": "hausa", "word": "soyayya" }, { "language": "hawaiian", "word": "aloha" }, { "language": "hebrew", "word": "אהבה" }, { "language": "hindi", "word": "प्रेम" }, { "language": "hmong", "word": "kev hlub" }, { "language": "hungarian", "word": "szeretet" }, { "language": "icelandic", "word": "ást" }, { "language": "igbo", "word": "ihunanya" }, { "language": "indonesian", "word": "cinta" }, { "language": "irish", "word": "grá" }, { "language": "italian", "word": "amore" }, { "language": "japanese", "word": "愛" }, { "language": "ja vanese", "word": "katresnan" }, { "language": "kannada", "word": "ಪ್ರೀತಿ" }, { "language": "kazakh", "word": "махаббат" }, { "language": "khmer", "word": "ស្រឡាញ់" }, { "language": "kiryarwanda", "word": "urukundo" }, { "language": "korean", "word": "사랑" }, { "language": "kurdish", "word": "evîn" }, { "language": "kyrgyz", "word": "сүйүү" }, { "language": "lao", "word": "ຮັກ" }, { "language": "latin", "word": "amare" }, { "language": "latvian", "word": "mīlestība" }, { "language": "lithuanian", "word": "meilė" }, { "language": "luxembourish", "word": "Léift" }, { "language": "macedonian", "word": "убов" }, { "language": "malagasy", "word": "fitia vana" }, { "language": "malay", "word": "cinta" }, { "language": "malayalam", "word": "സ്നേഹം" }, { "language": "maltese", "word": "imħabba" }, { "language": "moari", "word": "aroha" }, { "language": "marathi", "word": "प्रेम" }, { "language": "mongolian", "word": "хайр" }, { "language": "burmese", "word": "aahkyit" }, { "language": "nepali", "word": "माया" }, { "language": "norwegian", "word": "kjærlighet" }, { "language": "odia", "word": "ପ୍ରେମ" }, { "language": "pashto", "word": "مينه" }, { "language": "persian", "word": "عشق" }, { "language": "polish", "word": "miłość" }, { "language": "portuguese", "word": "amar" }, { "language": "punjabi", "word": "ਪਿਆਰ" }, { "language": "romanian", "word": "dragoste" }, { "language": "russian", "word": "люблю" }, { "language": "samoan", "word": "alofa" }, { "language": "scots gaelic", "word": "ghaoil" }, { "language": "serbian", "word": "љубав" }, { "language": "sesotho", "word": "lerato" }, { "language": "shona", "word": "rudo" }, { "language": "sindhi", "word": "پيار" }, { "language": "sinhala", "word": "ආදරය" }, { "language": "slovak", "word": "láska" }, { "language": "slovinian", "word": "ljubezen" }, { "language": "somali", "word": "jacayl" }, { "language": "sudanese", "word": "bogoh" }, { "language": "swahili", "word": "upendo" }, { "language": "swedish", "word": "kärlek" }, { "language": "tamil", "word": "காதல்" }, { "language": "tatar", "word": "мәхәббәт" }, { "language": "telugu", "word": "ప్రేమ" }, { "language": "thai", "word": "รัก" }, { "language": "turkish", "word": "aşk" }, { "language": "turkmen", "word": "söýgi" }, { "language": "ukranian", "word": "кохання" }, { "language": "urdu", "word": "محبت" }, { "language": "vietnamese", "word": "yêu" }, { "language": "yiddish", "word": "ליבע" }, { "language": "zulu", "word": "uthando" } ]; const to_italic = ['hebrew', 'hindi', 'korean', 'kannada', 'lao', 'macedonian', 'mongolian', 'nepali', 'odia', 'russian', 'serbian', 'telugu', 'thai', 'marathi']; const to_medium = ['belarusian', 'bengali', 'greek', 'armenian', 'bulgarian', 'gujarati', 'khmer', 'kazakh', 'kyrgyz', 'punjabi', 'tamil', 'ukranian']; populateList();

    JS 部分的逻辑很清晰。首先,一个 loveTranslations 数组包含了100种语言中“爱”的写法,从英语、法语到汉语、日语,甚至还有斯瓦希里语和祖鲁语,覆盖得非常全。数据展示时,根据字符长度和书写系统,动态调整了字体大小和样式——比如格鲁吉亚语、马拉雅拉姆语这些字符较复杂的,会显示得更小一些;而希伯来语、印地语这类需要倾斜的,则加上了 italic 类。点击卡片后,会弹出一个模态窗口,将对应文字放大显示,并配上心形背景,效果很惊艳。

    整个项目没有依赖任何第三方库,纯粹用原生 HTML/CSS/JS 实现,而且从移动端到桌面端的响应式适配都做了,细节处理得很到位。这大概就是程序猿特有的浪漫方式——不用花言巧语,用代码把心意直接摆在你面前。当你看到屏幕上跳出100种语言的“我爱你”,那种感觉,比收到一束花要来得更特别一点。

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    编程开发
    相关文章 更多
    链表删除节点的时间复杂度是多少及其详细分析
    链表删除节点的时间复杂度是多少及其详细分析

    详细分析链表删除节点的时间复杂度,深入探讨单链表与双向链表在不同已知前提下的查找与删除开销,并结合完整代码与清晰图解进行对比总结。

    codex如何配置模型参数及文件设置教程
    codex如何配置模型参数及文件设置教程

    想知道如何让AI写出的代码更贴合你的习惯?本文手把手教你在VS Code中调整Codex相关模型参数,通过修改配置文件优化温度值和令牌限制,解决代码建议不准确或响应慢的问题。

    Claude Code AI编程工具实力揭秘与编程助手实测
    Claude Code AI编程工具实力揭秘与编程助手实测

    通过实测展示Claude Code在终端中如何理解自然语言指令、自动修改代码文件并处理复杂编程任务,帮助开发者评估其实际辅助能力。

    winforms教程自学入门与基础开发步骤详解
    winforms教程自学入门与基础开发步骤详解

    本教程详细讲解如何使用Visual Studio创建WinForms项目,通过添加按钮和标签控件并编写点击事件代码,实现一个基础的计数器功能,适合C#初学者快速上手Windows窗体应用开发。

    Cursor自动补全设置教程教你快速开启代码补全功能
    Cursor自动补全设置教程教你快速开启代码补全功能

    详解Cursor编辑器中自动补全功能的开启与优化设置,涵盖Tab触发机制、上下文窗口调整及模型切换,帮助开发者解决补全延迟、干扰大等问题,提升编码流畅度。

    pandas的数据格式怎么转换和设置方法教程
    pandas的数据格式怎么转换和设置方法教程

    详解Pandas中数据格式转换的核心方法,包括astype强制转换、to_numeric容错处理及日期解析技巧,解决常见类型错误并提升数据处理效率。

    VS Code中文设置方法 简体语言包安装与切换教程
    VS Code中文设置方法 简体语言包安装与切换教程

    详细介绍在Visual Studio Code中安装Chinese (Simplified)语言包的方法,包括通过扩展市场搜索、安装及自动重启切换至简体中文界面的完整步骤,帮助开发者快速将编辑器本地化。

    cursor安装过程无法更改安装位置的解决方法
    cursor安装过程无法更改安装位置的解决方法

    针对Cursor安装包默认锁定C盘且无路径选择界面的问题,提供通过手动移动文件并创建目录联结(Symbolic Link)的解决方案,实现将软件安装在其他磁盘分区。

    rust下载安装教程详解及Windows环境配置方法
    rust下载安装教程详解及Windows环境配置方法

    详解Windows系统下Rust语言的安装步骤,重点解析rustup工具链管理机制,解决环境变量配置错误及MSVC链接器缺失问题,提供可复制的命令验证方法与常见报错的因果排查思路。

    vs code怎么配置 chat实用设置教程步骤
    vs code怎么配置 chat实用设置教程步骤

    详解VS Code中Chat插件的安装与核心配置步骤,重点解决API连接失败、响应慢等常见问题,通过优化上下文设置提升代码生成质量,适合希望集成AI辅助工具的开发者阅读。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。