如何用H5+CSS+JS写一个简单的招聘网站

大家好,我是猿码叔叔,一个 Java 语言开发者。应网友要求,写一个简单的招聘页面。由于技术原因,页面相对简单,朋友们可以选择性的阅读,如果对您有帮助,也可直接拿去使用,因为接下来除了闲言碎语还有源代码干货。

一、内容介绍

这个简单的招聘网站,具备简单的响应式功能。页面元素包含:横向菜单、职位搜索与选择、简历表格、轮播图。页面没有实现与后端交互的功能,后续有需要可以更新,包括更丰富的功能都可以持续更新与扩展。

二、谈谈我对响应式的理解

  • 布局

我们应当做好页面的布局设计。一般的网站布局都会大致分为 Header、Body 和 Footer 以及 Others 四个部分。对于前三个部分仍然可以再细分为相应的“块”,每个块包含相应要展示的内容。这些块可以是竖着排列,或者是横向并排排列,亦或是复杂的瀑布式排列。排列的布局应当符合人类的基本审美标准,比如对称、右重左轻等等。

  • 自适应调整

自适应调整就是根据不同的设备来调整页面的属性,达到不同的设备布局仍然排列有序,符合我们的审美标准。这一点是建立在我们事先做好了页面布局的工作。

常见的自适应调整,我们可以使用 @media、flex、grid 和 multiCol 来实现。具体的功能大家可以去阅读 MDN Web Docsicon-default.png?t=N7T8https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Responsive_Design

这篇文章详细介绍了以上属性的各个功能。

三、代码

        注:以下代码页面布局借鉴某招聘网站。

  • CSS部分
* {margin: 0;padding: 0;box-sizing: border-box;
}#main-menu {position: relative;background: rgba(0, 0, 0, 0.2);width: 100%;max-width: 100%;box-shadow: 2px 2px 6px 2px rgba(0, 0, 0, 0.3);
}.main-body {position: relative;padding: 30px;display: flex;justify-content: center;
}.carousel-space {
}.search-space {margin-bottom: 20px;
}.fake-input-box {border: solid 1px lightgrey;height: 45px;position: relative;border-radius: 2px;display: flex;justify-content: center;
}.fake-input-search {height: 100%;border: none;width: 80px;background: red;color: white;border-top-right-radius: 2px;border-bottom-right-radius: 2px;float: right;cursor: pointer;
}.none-style-input {border: none;height: 100%;width: 100%;padding: 2px 5px;outline-style: none;
}.none-style-ul {list-style: none;
}.main-menu-ul {display: flex;justify-content: center;
}.main-menu-item {padding: 12px 16px;
}.main-menu-item:not(li:first-child) {cursor: pointer;
}.main-menu-item:first-child {margin-right: 50px;
}.main-menu-item:last-child {margin-left: 50px;color: blue;
}.main-menu-item:hover:not(li:first-child, li:last-child) {background: red;color: white;
}.addr-switch {background: none;border: none;cursor: pointer;padding: 0 3px;
}.addr-switch:hover {color: dodgerblue;
}.main-footer {position: relative;width: 100%;display: flex;flex-direction: row;justify-content: space-evenly;flex: 1;border-top: solid 1px rgba(0, 0, 0, 0.1);color: rgba(0, 0, 0, 0.5);font-size: 12px;line-height: 20px;padding: 10px 0;
}.company-info {align-items: center;
}.hiring-info {margin-right: 10px;text-align: center;color: rgba(0, 0, 0, 0.7);
}.alternative-info {}.hiring-info-title {margin-top: 16px;
}.jobs-selection {margin-top: 30px;
}.jobs-selection > ul > li {padding: 20px 26px;border-top: solid 1px rgba(0, 0, 0, 0.1);cursor: pointer;
}.jobs-selection > ul > li:first-child {}.drawer-container {position: fixed;height: 100%;width: 600px;right: -600px;top: 0;background: white;box-shadow: 2px 2px 6px 2px rgba(0, 0, 0, 0.2);transition: transform 1.5s;max-width: 100%;
}.show {transform: translateX(-600px); /* 展开抽屉 */transition: transform 1.5s;
}.drawer-header {padding: 10px 16px;border-bottom: solid 1px rgba(0, 0, 0, 0.2);color: lightslategray;
}.drawer-body {padding: 10px;height: auto;
}.close-icon {float: right;cursor: pointer;
}.form-item:first-child {display: flex;flex-direction: row;
}.form-item {padding: 10px;width: 100%;height: auto;
}.form-item > label {display: flex;flex: 2;
}.form-item > label > span {width: 30%;vertical-align: bottom;color: rgba(0, 0, 0, 0.6);
}.form-item > label > input {width: 100%;height: 30px;padding: 4px;
}.drawer-footer {float: right;
}.confirm-btn {background: red;
}.close-btn {background: rgba(0, 0, 0, 0.4);
}.confirm-btn, .close-btn {outline-style: none;border: none;padding: 4px 6px;margin-right: 8px;cursor: pointer;color: white;
}img {max-width: 100%;
}
  • H5+JS部分
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0, user-scale=0"><title>Title</title><link type="text/css" rel="stylesheet" href="css/a.css"></head>
<body>
<div class="main"><header class="main-header"><menu id="main-menu"></menu></header><main class="main-body"><div class="hiring-info"><div class="hiring-info-title"><h5>选择你心仪的职业</h5></div><div class="jobs-selection" id = 'jobs-selection'></div></div><div class="carousel-space"><div class="search-space"><div class="fake-input-box"><input class="none-style-input" placeholder="搜索热门职业"><button class="fake-input-search">搜索</button></div></div><div class="carousel-img-group"><div><img id="carousel-img" alt="" width="600px" height="500px" src="carouselImg/c.jpg"></div></div></div><div class="other-info"></div></main><footer class="main-footer"><div class="company-info"><p>未经 xxxxxx.com 同意,不得转载本网站之所有招聘信息及作品 xxxxx招聘网版权所有</p><p>京ICP备xxxxxxx号  合字xx-xxxxxx</p><p>京公网安备 1xxxxxxxxxxxxx号  人力资源许可证:xxxxxxxxxxxxxxxxx号</p><p>网上有害信息举报专区  违法不良信息举报电话:400-xxx-xxxx 关爱未成年举报热线:400-xxx-xxxx-x</p><p>xx区人力资源与社会保障局监督电话</p></div><div class="alternative-info"><p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p><p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p><p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p><p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p><p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p></div></footer><div class="drawer-container"><div class="drawer-header"><span>填写你的应聘信息</span><span onclick="closeDrawerContainer()" class="close-icon">×</span></div><div class="drawer-body"><form><p class="form-item"><label for="employee-name"><span>姓名: </span><input id="employee-name"/></label></p><p class="form-item"><label for="employee-age"><span>年龄: </span><input id="employee-age"/></label></p><p class="form-item"><label for="employee-address"><span>目前住址: </span><input id="employee-address"/></label></p><p class="form-item"><label for="workplace-expected"><span>希望工作的城市: </span><input id="workplace-expected"/></label></p><p class="form-item"><label for="employee-eduction"><span>您的学历: </span><input id="employee-eduction"/></label></p><p class="form-item"><label for="employee-major"><span>您的专业:</span><input id="employee-major"/></label></p><p class="form-item"><label for="employee-work-experiences"><span>工作经历:</span><input id="employee-work-experiences"/></label></p></form></div><div class="drawer-footer"><button class="confirm-btn" onclick="">确定</button><button class="close-btn" onclick="closeDrawerContainer()">关闭</button></div></div>
</div>
</body>
<script src="js/utils.js"></script>
<script type="text/javascript">window.onload = ()=> {this.initializeMenu();const intervalId = this.triggerCarousel();this.initializeCarousel(intervalId);this.initializeJobGenres();}const menuNames = [{id: '0', name: '全国', icon: ''},{id: '1', name: '首页', icon: ''},{id: '2', name: '城市频道', icon: ''},{id: '3', name: '政企招聘', icon: ''},{id: '4', name: '校园招聘', icon: ''},{id: '5', name: '高端职位', icon: ''},{id: '6', name: '海外招聘', icon: ''},{id: '7', name: '我要投简历', icon: ''},];const jobGenre = ['技术', '产品', '设计', '市场', '运营', '销售', '管理'];const carouselPics = ['a', 'b', 'c'];function initializeCarousel(id) {const carousel = iDomById('carousel-img');carousel.onmouseover = () => {clearInterval(id);}carousel.onmouseleave = () => {this.initializeCarousel(triggerCarousel());}}function closeDrawerContainer() {const drawer = document.querySelector('.drawer-container');if (drawer.classList.contains('show')) {drawer.classList.remove('show'); // 关闭抽屉} else {drawer.classList.add('show'); // 打开抽屉}}function initializeJobGenres() {const parent = iDomById('jobs-selection');const ul = document.createElement('ul');ul.className = 'none-style-ul';const frag = document.createDocumentFragment();for (const name of jobGenre) {const li = document.createElement('li');li.onmouseover = () => {li.style.background = 'coral';li.style.color = 'white';}li.onmouseleave = () => {li.style.background = 'white';li.style.color = 'rgba(0, 0, 0, 0.7)';}li.innerText = name;frag.append(li);}ul.appendChild(frag);parent.appendChild(ul);}function triggerCarousel() {const obj = {x: 0};return setInterval(setCarouselSrc, 2000, obj);}function setCarouselSrc(obj) {obj.x = (obj.x + 1) % carouselPics.length;iDomById('carousel-img').src = `carouselImg/${carouselPics[obj.x]}.jpg`;}function initializeMenu() {const menu = iDomById('main-menu');const menuUl = document.createElement('ul');menuUl.className = 'main-menu-ul none-style-ul';const fragment = document.createDocumentFragment();for (const obj of menuNames) {const li = document.createElement('li');li.className = 'main-menu-item';const icon = document.createElement('span');icon.className = 'menu-item-icon';icon.innerText = obj.icon;const txt = document.createElement('span');txt.className = 'menu-item-name';txt.innerText = obj.name;li.appendChild(icon);li.appendChild(txt);fragment.append(li);}menuUl.appendChild(fragment);menu.appendChild(menuUl);const firstChild = menuUl.firstChild;const btn = document.createElement('button');btn.className = 'addr-switch';btn.innerText = '[切换]'firstChild.appendChild(btn);btn.onclick =()=> {addrSwitch();}const menuLi = document.getElementsByClassName('main-menu-item');const lastLi = menuLi[menuLi.length - 1];lastLi.onclick = () => {closeDrawerContainer();};}function addrSwitch() {}</script>
</html>
  • utils.js部分 
function iDomById(id) {return document.getElementById(id);
}

四、结语 

最后,感谢阅读。由于还在学习前端技术当中,文章内容不是很全面和系统,后续有机会还会持续补充!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/418686.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI写的代码比“手工代码”安全性差很多

类似Github Copilot这样的人工智能代码助手能大大提高开发人员的开发效率和生产力&#xff0c;并降低开发技术门槛&#xff08;不熟悉语言或概念的程序员的进入&#xff09;。然而&#xff0c;缺乏经验的开发人员可能会轻易相信人工智能助手的输出内容&#xff0c;从而引入安全…

国考省考行测:语句排序2刷题

国考省考行测&#xff1a;语句排序2刷题 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重要的还是申论和行测&#xff0c;所以大家认真准备吧&#xff0c;我讲一起屡屡申论和行测的重要知识点…

2024/1/20 并查集

目录 并查集关键代码 亲戚 村村通 团伙&#xff08;新知识&#xff09; 并查集关键代码 返回祖宗节点路径压缩&#xff1a; int find(int x) {if(f[x]!x) f[x]find(f[x]);return f[x]; } 合并&#xff1a; void make(int x,int y) {int f1find(f[x]);int f2find(f[y]);…

spring boot shardingsphere mybatis-plus druid mysql 搭建mysql数据库读写分离架构

spring boot shardingsphere mybatis-plus druid mysql 搭建mysql数据库读写分离架构 ##关于window mysql主从搭建简单教程 传送门 window mysql5.7 搭建主从同步环境-CSDN博客 ##父pom.xml <?xml version"1.0" encoding"UTF-8"?> <project…

c++ mysql数据库编程(linux系统)

ubuntu下mysql数据库的安装 ubuntu安装mysql&#xff08;图文详解&#xff09;-CSDN博客https://blog.csdn.net/qq_58158950/article/details/135667062?spm1001.2014.3001.5501 项目目录结构 数据库及表结构 public.h //打印错误信息 #ifndef PUBLIC_h #define PUBLIC_H…

SetFitABSA: 基于 SetFit 的少样本、方面级情感分析

SetFitABSA 是一种可以有效从文本中检测特定方面情感的技术。 方面级情感分析 (Aspect-Based Sentiment Analysis&#xff0c;ABSA) 是一种检测文本中特定方面的情感的任务。例如&#xff0c;在“这款手机的屏幕很棒&#xff0c;但电池太小”一句中&#xff0c;分别有“屏幕”和…

fabric.js 组件 图片上传裁剪并进行自定义区域标记

目录 0. 前言 1. 安装fabric与引入 2. fabric组件的使用 3. 属性相关设置 4. 初始化加载 4. 方法 5. 全代码 0. 前言 利用fabric组件&#xff0c;实现图片上传、图片”裁剪“、自定义的区域标记一系列操作 先放一张效果图吧&#x1f447; 1. 安装fabric与引入 npm i …

x-cmd pkg | mermaid - 流程图、时序图等图表绘制工具

简介 mermaid-cli 是由 Mermaid 官方提供的命令行工具&#xff0c;用于将 Mermaid 语法的文本转换为 SVG / PNG / PDF。 Mermaid 是一个基于 JavaScript 的图表绘制工具&#xff0c;它使用简单的文本描述语法&#xff0c;就可以绘制出流程图、时序图、甘特图等多种图表。 首次…

C#调用C动态链接库

前言 已经没写过博客好久了&#xff0c;上一篇还是1年半前写的LTE Gold序列学习笔记&#xff0c;因为工作是做通信协议的&#xff0c;然后因为大学时没好好学习专业课&#xff0c;现在理论还不扎实&#xff0c;不敢瞎写&#xff1b; 因为工作原因&#xff0c;经常需要分析一些字…

4496 蓝桥杯 求函数零点 简单

4496 蓝桥杯 求函数零点 简单 //C风格解法1&#xff0c;通过率100% #include <bits/stdc.h> // int a, b; 一定会自动初始化为 0int main(){int a 2, b 3; // 定义a&#xff0c;b&#xff0c;不会自动初始化&#xff0c;最好自己定义时初始化// windows环境下a值固定&…

Redis原理篇(SkipList)

一.概述 本质是双端链表&#xff0c;只不过在正向遍历时可以不一个一个遍历&#xff0c;而是可以跳着遍历。 怎么实现的呢&#xff0c;下面是SkipList源码 二.源码 1. zskiplist 意义&#xff1a;跳表 zskiplist里面有头指针和尾指针&#xff0c;节点数量&#xff0c;最大…

acwing讲解篇之93. 递归实现组合型枚举

文章目录 题目描述题解思路题解代码 题目描述 题解思路 本题相当于二叉树的深度优先遍历&#xff0c;树的第i层表示第i个数选或不选&#xff0c;当选择了m次左节点后退出 我们记录当前递归的深度deep 然后用state进行状态压缩&#xff0c;state第i位是1表示选第i个数&#xff…