如何使用 React 创建一个作品集网站

news/2024/5/20 4:15:09/文章来源:https://blog.csdn.net/u012384510/article/details/122852754

大家好,我是若川。持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。

今天,你将为自己创建一个最重要的应用程序——你的作品集。

每个 React 开发者或者 Web 开发者通常需要向潜在的客户或者雇主展示自己能做什么。

在这篇文章里,我们将使用 React、Tailwind CSS、Netlify 等等行业标准工具创建一个作品集网站。

开始吧!

作品集是怎样的

674c1dad7047dd5bb97065250c0218f3.gif

这是你将要建立的最终版本。

它的作用是展示你自己、你做过什么项目、你在做这些项目时用了什么技能,还有一个联系表单,以便客户或者雇主联系上你。

我们将使用什么工具

- 我们将用 React 来创建应用程序的用户界面。它将允许我们通过可重复使用的组件来组成登录页面的每一部分,以及添加我们想要的功能,例如博客。

- 为了设计我们的应用程序,我们将使用 Tailwind CSS。Tailwind 允许我们通过组合类名(classnames)将多种样式轻松应用到 React 项目上,给应用程序一个专业的外观。

- 为了把我们的应用程序部署到网络上,我们将使用免费的 Netlify。通过 CDN 的帮助下,用户可以通过我们自己的的域名快速访问到我们的项目。

如何开始

你可以在这里下载我们项目的启动文件:https://reedbarger.ck.page/react-portfolio-2021。

当你获取到代码,你要做的是把(解压好的)项目文件夹拖到代码编辑器中,然后在终端运行命令。

npm install

然后可以开始了!

我需要使用什么工具来构建作品集

从创建到部署应用程序,需要:

- 你的电脑安装 Node.js,你可以在 nodejs.org 下载安装程序。

- 在你的电脑安装 Git,你可以在 git-scm.com 下载。

- 我建议使用 VS Code 作为你的代码编辑器。你可以在 code.visualstudio.com 下载它。

- 一个在 Netlify.com 上的免费的 Netlify 账户。

- 一个免费的 GitHub 账号。

如何建立作品集的结构

使用 React 的好处是,我们可以将我们的应用程序扩展到任意多的页面,并添加大量的内容,这是非常容易的。

但是,由于我们只处理一个页面,所以可以在应用程序组件中非常快速地找到需要的不同组件。我们将在顶部放一个导航栏,通过上面的链接可以跳转到作品集的不同部分。

然后,我们将有一个“关于”部分,这里包含我们的项目介绍、客户推荐以及联系表单。

这种快速的规划使我们能够弄清楚组件怎样命名,以什么顺序命名。下一步,把它们全部添加到我们的 App.js 文件夹中(在 src 文件夹):

// src/App.jsimport React from "react";export default function App() {return (<main><Navbar /><About /><Projects /><Skills /><Testimonials /><Contact /></main>);
}

如何创建组件

现在我们已经列出了所有这些组件,我们需要继续创建它们。

在源代码(src)文件夹中,我们将创建一个 components 文件夹,里面有我们需要的所有文件。

my-portfolio
├── README.md
├── node_modules
├── package.json
├── .gitignore
├── public
│   ├── favicon.ico
│   ├── index.html
│   └── manifest.json
└── src├── App.js├── data.js├── index.css├── index.js└── components├── About.js├── Contact.js├── Navbar.js├── Projects.js├── Skills.js└── Testimonials.js

然后我们将创建每个 React 组件的基本结构,并使用 export default 从该文件导出:

// src/components/About.jsexport default function About() {}// repeat the same basic structure for all 6 components(在所有的 6 个组件中重复相同的结构)

最后在 App.js 中导入它:

// src/App.jsimport React from "react";
import About from "./components/About";
import Contact from "./components/Contact";
import Navbar from "./components/Navbar";
import Projects from "./components/Projects";
import Skills from "./components/Skills";
import Testimonials from "./components/Testimonials";export default function App() {return (<main><Navbar /><About /><Projects /><Skills /><Testimonials /><Contact /></main>);
}

请注意,总共应该有 6 个组件

Tailwind CSS 介绍

做完上面的,我们可以开始使用 Tailwind CSS 给我们的应用程序一个基本的外观。

使用 Tailwind CSS 的好处是,我们不必在 CSS 中手动编写任何样式,而是组合多个类(class)来创建我们想要的外观。

// src/App.jsimport React from "react";
import About from "./components/About";
import Contact from "./components/Contact";
import Navbar from "./components/Navbar";
import Projects from "./components/Projects";
import Skills from "./components/Skills";
import Testimonials from "./components/Testimonials";export default function App() {return (<main className="text-gray-400 bg-gray-900 body-font"><Navbar /><About /><Projects /><Skills /><Testimonials /><Contact /></main>);
}

如何构建 About 组件

现在开始第一部分,即 about 部分,介绍我们的基本情况和擅长的技能。

它还将包含联系表单的链接,以及我们过去的项目。由于这些链接将指向同一页面的不同部分,我们能使用 "/#projects" 和 "/#contact"。

为了使这些链接能跳转到每个部分,我们把项目部分 id 的属性设置为 projects,把联系部分的 id 属性设置为 contact

// src/components/About.jsimport React from "react";export default function About() {return (<section id="about"><div className="container mx-auto flex px-10 py-20 md:flex-row flex-col items-center"><div className="lg:flex-grow md:w-1/2 lg:pr-24 md:pr-16 flex flex-col md:items-start md:text-left mb-16 md:mb-0 items-center text-center"><h1 className="title-font sm:text-4xl text-3xl mb-4 font-medium text-white">Hi, I'm Reed.<br className="hidden lg:inline-block" />I love to build amazingapps.</h1><p className="mb-8 leading-relaxed">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quilaborum quasi, incidunt dolore iste nostrum cupiditate voluptas?Laborum, voluptas natus?</p><div className="flex justify-center"><ahref="#contact"className="inline-flex text-white bg-green-500 border-0 py-2 px-6 focus:outline-none hover:bg-green-600 rounded text-lg">Work With Me</a><ahref="#projects"className="ml-4 inline-flex text-gray-400 bg-gray-800 border-0 py-2 px-6 focus:outline-none hover:bg-gray-700 hover:text-white rounded text-lg">See My Past Work</a></div></div><div className="lg:max-w-lg lg:w-full md:w-1/2 w-5/6"><imgclassName="object-cover object-center rounded"alt="hero"src="./coding.svg"/></div></div></section>);
}

对于本部分右侧的图片,我使用的 public 文件夹中的一个 svg 文件(coding.svg)。

这个图片只是作为一个临时的占位符,我强烈建议你使用你自己的图片。

如何构建 Projects 组件

我们的项目部分是由一个 section 元素组成,id为 prpjects。这将是包含所有项目的图片集。

// src/components/Projects.jsimport { CodeIcon } from "@heroicons/react/solid";
import React from "react";
import { projects } from "../data";export default function Projects() {return (<section id="projects" className="text-gray-400 bg-gray-900 body-font"><div className="container px-5 py-10 mx-auto text-center lg:px-40"><div className="flex flex-col w-full mb-20"><CodeIcon className="mx-auto inline-block w-10 mb-4" /><h1 className="sm:text-4xl text-3xl font-medium title-font mb-4 text-white">Apps I've Built</h1><p className="lg:w-2/3 mx-auto leading-relaxed text-base">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Explicabofacilis repellat ab cupiditate alias vero aliquid obcaecati quisquamfuga dolore.</p></div><div className="flex flex-wrap -m-4">{projects.map((project) => (<ahref={project.link}key={project.image}className="sm:w-1/2 w-100 p-4"><div className="flex relative"><imgalt="gallery"className="absolute inset-0 w-full h-full object-cover object-center"src={project.image}/><div className="px-8 py-10 relative z-10 w-full border-4 border-gray-800 bg-gray-900 opacity-0 hover:opacity-100"><h2 className="tracking-widest text-sm title-font font-medium text-green-400 mb-1">{project.subtitle}</h2><h1 className="title-font text-lg font-medium text-white mb-3">{project.title}</h1><p className="leading-relaxed">{project.description}</p></div></div></a>))}</div></div></section>);
}

注意,我们还将使用库 @heroicons/react,以便将 SVG 图标写成 React 组件。

我们从同一个文件夹中的 data.js 文件导入一个项目数组。在那里,我们导出一个对象数组,每个对象包含项目的数据。

// src/data.jsexport const projects = [{title: "React Reserve",subtitle: "MERN Stack",description:"Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium dolore rerum laborum iure enim sint nemo omnis voluptate exercitationem eius?",image: "./project-1.gif",link: "https://reactbootcamp.com",},{title: "React Tracks",subtitle: "React and Python",description:"Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium dolore rerum laborum iure enim sint nemo omnis voluptate exercitationem eius?",image: "./project-2.gif",link: "https://reedbarger.com",},{title: "DevChat",subtitle: "React and Firebase",description:"Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium dolore rerum laborum iure enim sint nemo omnis voluptate exercitationem eius?",image: "./project-3.gif",link: "https://jsbootcamp.com",},{title: "Epic Todo App",subtitle: "React Hooks",description:"Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium dolore rerum laborum iure enim sint nemo omnis voluptate exercitationem eius?",image: "./project-4.gif",link: "https://pythonbootcamp.com",},
];

如何构建 Skills 组件

我们在这部分填写自己会的技能和技术。

这将包含一个简单的清单,列出在我们熟悉的主要工具,可用于雇主或客户的项目中。

再一次,我们将从 data 文件夹导入一个数组。但是这个数组是由字符串组成,是我们所知道的技能,如 JavaScript、React 和 Node。

// src/components/Skills.jsimport { BadgeCheckIcon, ChipIcon } from "@heroicons/react/solid";
import React from "react";
import { skills } from "../data";export default function Skills() {return (<section id="skills"><div className="container px-5 py-10 mx-auto"><div className="text-center mb-20"><ChipIcon className="w-10 inline-block mb-4" /><h1 className="sm:text-4xl text-3xl font-medium title-font text-white mb-4">Skills &amp; Technologies</h1><p className="text-base leading-relaxed xl:w-2/4 lg:w-3/4 mx-auto">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Nisi sitipsa delectus eum quo voluptas aspernatur accusantium distinctiopossimus est.</p></div><div className="flex flex-wrap lg:w-4/5 sm:mx-auto sm:mb-2 -mx-2">{skills.map((skill) => (<div key={skill} className="p-2 sm:w-1/2 w-full"><div className="bg-gray-800 rounded flex p-4 h-full items-center"><BadgeCheckIcon className="text-green-400 w-6 h-6 flex-shrink-0 mr-4" /><span className="title-font font-medium text-white">{skill}</span></div></div>))}</div></div></section>);
}

如何构建 Testimonials 组件

在 Testimonials 组件中,我们将列出一些过去的比较熟悉的客户的推荐信。

这些将由几个卡片组成,里面有推荐人和推荐人所在的公司。

我们将导入一个包含推荐信息的数组,里面的对象包含了评价、图片和公司。

// src/components/Testimonialsimport React from "react";
import { TerminalIcon, UsersIcon } from "@heroicons/react/solid";
import { testimonials } from "../data";export default function Testimonials() {return (<section id="testimonials"><div className="container px-5 py-10 mx-auto text-center"><UsersIcon className="w-10 inline-block mb-4" /><h1 className="sm:text-4xl text-3xl font-medium title-font text-white mb-12">Client Testimonials</h1><div className="flex flex-wrap m-4">{testimonials.map((testimonial) => (<div className="p-4 md:w-1/2 w-full"><div className="h-full bg-gray-800 bg-opacity-40 p-8 rounded"><TerminalIcon className="block w-8 text-gray-500 mb-4" /><p className="leading-relaxed mb-6">{testimonial.quote}</p><div className="inline-flex items-center"><imgalt="testimonial"src={testimonial.image}className="w-12 rounded-full flex-shrink-0 object-cover object-center"/><span className="flex-grow flex flex-col pl-4"><span className="title-font font-medium text-white">{testimonial.name}</span><span className="text-gray-500 text-sm uppercase">{testimonial.company}</span></span></div></div></div>))}</div></div></section>);
}

如何构建 Contact 组件

在登录页的尾部,我们将加入联系表单,以便潜在的雇主能联系到我们。

这个表格包含 3 个输入:姓名、电子邮件和输入信息。

为了接收这些表格所提交的信息,我们将使用 Netlify 表格工具以轻松保存这些信息。

// src/components/Contact.jsimport React from "react";export default function Contact() {return (<section id="contact" className="relative"><div className="container px-5 py-10 mx-auto flex sm:flex-nowrap flex-wrap"><div className="lg:w-2/3 md:w-1/2 bg-gray-900 rounded-lg overflow-hidden sm:mr-10 p-10 flex items-end justify-start relative"><iframewidth="100%"height="100%"title="map"className="absolute inset-0"frameBorder={0}marginHeight={0}marginWidth={0}style={{ filter: "opacity(0.7)" }}src="https://www.google.com/maps/embed/v1/place?q=97+warren+st+new+york+city&key=AIzaSyBFw0Qbyq9zTFTd-tUY6dZWTgaQzuU17R8"/><div className="bg-gray-900 relative flex flex-wrap py-6 rounded shadow-md"><div className="lg:w-1/2 px-6"><h2 className="title-font font-semibold text-white tracking-widest text-xs">ADDRESS</h2><p className="mt-1">97 Warren St. <br />New York, NY 10007</p></div><div className="lg:w-1/2 px-6 mt-4 lg:mt-0"><h2 className="title-font font-semibold text-white tracking-widest text-xs">EMAIL</h2><a className="text-indigo-400 leading-relaxed">reedbarger@email.com</a><h2 className="title-font font-semibold text-white tracking-widest text-xs mt-4">PHONE</h2><p className="leading-relaxed">123-456-7890</p></div></div></div><formnetlifyname="contact"className="lg:w-1/3 md:w-1/2 flex flex-col md:ml-auto w-full md:py-8 mt-8 md:mt-0"><h2 className="text-white sm:text-4xl text-3xl mb-1 font-medium title-font">Hire Me</h2><p className="leading-relaxed mb-5">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Illumsuscipit officia aspernatur veritatis. Asperiores, aliquid?</p><div className="relative mb-4"><label htmlFor="name" className="leading-7 text-sm text-gray-400">Name</label><inputtype="text"id="name"name="name"className="w-full bg-gray-800 rounded border border-gray-700 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-900 text-base outline-none text-gray-100 py-1 px-3 leading-8 transition-colors duration-200 ease-in-out"/></div><div className="relative mb-4"><label htmlFor="email" className="leading-7 text-sm text-gray-400">Email</label><inputtype="email"id="email"name="email"className="w-full bg-gray-800 rounded border border-gray-700 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-900 text-base outline-none text-gray-100 py-1 px-3 leading-8 transition-colors duration-200 ease-in-out"/></div><div className="relative mb-4"><labelhtmlFor="message"className="leading-7 text-sm text-gray-400">Message</label><textareaid="message"name="message"className="w-full bg-gray-800 rounded border border-gray-700 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-900 h-32 text-base outline-none text-gray-100 py-1 px-3 resize-none leading-6 transition-colors duration-200 ease-in-out"/></div><buttontype="submit"className="text-white bg-indigo-500 border-0 py-2 px-6 focus:outline-none hover:bg-indigo-600 rounded text-lg">Submit</button></form></div></section>);
}

如何嵌入 Google Maps 位置

在表格的左边,我们将一个 Google Maps 嵌入,显示我们的所在位置。

我们可以在一个在线工具(embed-map.com)的帮助下这样做。你所要做的事只是输入你的位置并点击Generate HTML code

在给我们生成的代码中,不要复制所有的代码,只要复制 ifame 中的 src 属性,然后替换掉 src 的默认值。

168ad256ae99035b2fd86890d8203769.png

向 Netlify 发送任何提交的表单数据,Netlify Forms 需要将从静态 HTML 中识别表单。因为我们的 React 应用是由 JavaScript 控制的,而不是普通的 HTML 组成,所以我们需要在 public 文件夹下的 index.html 文件中添加一个隐藏的表单。

<!-- public/index.html --><!DOCTYPE html>
<html lang="en"><head><!-- head content skipped --></head><body><form name="contact" netlify netlify-honeypot="bot-field" hidden><input type="text" name="name" /><input type="email" name="email" /><textarea name="message"></textarea></form><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body>
</html>

我们需要隐藏这个表单,因为它不需要被用户看到,它只需要被Netlify看到。

如何从联系表单提交

完成上面这些,我们将回到 Contact.js。我们将使用 JavaScript 提交这个表单。

const [name, setName] = React.useState("");
const [email, setEmail] = React.useState("");
const [message, setMessage] = React.useState("");

我们将在 onChange 处理程序的帮助下,将用户在每个输入项的信息存储在 state

// src/components/Contact.jsimport React from "react";export default function Contact() {const [name, setName] = React.useState("");const [email, setEmail] = React.useState("");const [message, setMessage] = React.useState("");function encode(data) {return Object.keys(data).map((key) => encodeURIComponent(key) + "=" + encodeURIComponent(data[key])).join("&");}function handleSubmit(e) {e.preventDefault();fetch("/", {method: "POST",headers: { "Content-Type": "application/x-www-form-urlencoded" },body: encode({ "form-name": "contact", name, email, message }),}).then(() => alert("Message sent!")).catch((error) => alert(error));}return (<section id="contact" className="relative"><div className="container px-5 py-10 mx-auto flex sm:flex-nowrap flex-wrap"><div className="lg:w-2/3 md:w-1/2 bg-gray-900 rounded-lg overflow-hidden sm:mr-10 p-10 flex items-end justify-start relative"><iframewidth="100%"height="100%"title="map"className="absolute inset-0"frameBorder={0}marginHeight={0}marginWidth={0}style={{ filter: "opacity(0.7)" }}src="https://www.google.com/maps/embed/v1/place?q=97+warren+st+new+york+city&key=AIzaSyBFw0Qbyq9zTFTd-tUY6dZWTgaQzuU17R8"/><div className="bg-gray-900 relative flex flex-wrap py-6 rounded shadow-md"><div className="lg:w-1/2 px-6"><h2 className="title-font font-semibold text-white tracking-widest text-xs">ADDRESS</h2><p className="mt-1">97 Warren St. <br />New York, NY 10007</p></div><div className="lg:w-1/2 px-6 mt-4 lg:mt-0"><h2 className="title-font font-semibold text-white tracking-widest text-xs">EMAIL</h2><a className="text-indigo-400 leading-relaxed">reedbarger@email.com</a><h2 className="title-font font-semibold text-white tracking-widest text-xs mt-4">PHONE</h2><p className="leading-relaxed">123-456-7890</p></div></div></div><formnetlifyname="contact"onSubmit={handleSubmit}className="lg:w-1/3 md:w-1/2 flex flex-col md:ml-auto w-full md:py-8 mt-8 md:mt-0"><h2 className="text-white sm:text-4xl text-3xl mb-1 font-medium title-font">Hire Me</h2><p className="leading-relaxed mb-5">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Illumsuscipit officia aspernatur veritatis. Asperiores, aliquid?</p><div className="relative mb-4"><label htmlFor="name" className="leading-7 text-sm text-gray-400">Name</label><inputtype="text"id="name"name="name"className="w-full bg-gray-800 rounded border border-gray-700 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-900 text-base outline-none text-gray-100 py-1 px-3 leading-8 transition-colors duration-200 ease-in-out"onChange={(e) => setName(e.target.value)}/></div><div className="relative mb-4"><label htmlFor="email" className="leading-7 text-sm text-gray-400">Email</label><inputtype="email"id="email"name="email"className="w-full bg-gray-800 rounded border border-gray-700 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-900 text-base outline-none text-gray-100 py-1 px-3 leading-8 transition-colors duration-200 ease-in-out"onChange={(e) => setEmail(e.target.value)}/></div><div className="relative mb-4"><labelhtmlFor="message"className="leading-7 text-sm text-gray-400">Message</label><textareaid="message"name="message"className="w-full bg-gray-800 rounded border border-gray-700 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-900 h-32 text-base outline-none text-gray-100 py-1 px-3 resize-none leading-6 transition-colors duration-200 ease-in-out"onChange={(e) => setMessage(e.target.value)}/></div><buttontype="submit"className="text-white bg-indigo-500 border-0 py-2 px-6 focus:outline-none hover:bg-indigo-600 rounded text-lg">Submit</button></form></div></section>);
}

正如你在上面看到的,我们正在用一个特殊的encode(编码)函数对表单数据进行编码。

如何构建 Navbar 组件

最后一步是构建我们的 Navbar 组件。

// src/components/Navbar.jsimport { ArrowRightIcon } from "@heroicons/react/solid";
import React from "react";export default function Navbar() {return (<header className="bg-gray-800 md:sticky top-0 z-10"><div className="container mx-auto flex flex-wrap p-5 flex-col md:flex-row items-center"><a className="title-font font-medium text-white mb-4 md:mb-0"><a href="#about" className="ml-3 text-xl">Reed Barger</a></a><nav className="md:mr-auto md:ml-4 md:py-1 md:pl-4 md:border-l md:border-gray-700 flex flex-wrap items-center text-base justify-center"><a href="#projects" className="mr-5 hover:text-white">Past Work</a><a href="#skills" className="mr-5 hover:text-white">Skills</a><a href="#testimonials" className="mr-5 hover:text-white">Testimonials</a></nav><ahref="#contact"className="inline-flex items-center bg-gray-800 border-0 py-1 px-3 focus:outline-none hover:bg-gray-700 rounded text-base mt-4 md:mt-0">Hire Me<ArrowRightIcon className="w-4 h-4 ml-1" /></a></div></header>);
}

如何在较大的设备上将 Navbar 组件在页面的顶部显示?我们将使用 md:sticky 类添加到 header 元素。

如何部署作品集

现在,为了使我们的作品集上线,我们需要把应用程序推送到 GitHub。

一旦你熟悉了这个流程,我们可以首先创建一个新的 GitHub 仓库。之后,我们将运行 git add .git commit -m "Deploy",创建 git 远程,然后 git push -u orgin master

一旦我们的项目建立在 GitHub 上,我们就可以去 Netlify,选择 Choose Site from Git。然后选择 GitHub 作为持续部署,并选择我们刚刚推送代码的 GitHub 仓库。

eeb6f29bea01a2dd88a9121749f82214.gif

之后,我们的项目将自动部署到网络上!

下一步是什么

祝贺你,你现在可以通过一个在线的作品集应用程序向潜在雇主展示你的所有项目和技能了!

下一步要做的事设置一个自己的域名,最好用你的名字(例如 reedbarger.com)。

由于 Netlify 包含一个 DNS,你可以很容易在那里设置一个自己的域名。

可以考虑在你的 React 应用程序中添加一个博客,向潜在的雇主展示你更多的开发知识。

通过个人作品集表达你自己以及你作为开发者的热情所在,你将获得成功!


原文链接:https://www.freecodecamp.org/news/build-portfolio-website-react/

作者:Reed Barger

译者:luojiyin


7fa291123641f550914e8f47986db01b.gif

················· 若川简介 ·················

你好,我是若川,毕业于江西高校。现在是一名前端开发“工程师”。写有《学习源码整体架构系列》20余篇,在知乎、掘金收获超百万阅读。
从2014年起,每年都会写一篇年度总结,已经写了7篇,点击查看年度总结。
同时,最近组织了源码共读活动,帮助3000+前端人学会看源码。公众号愿景:帮助5年内前端人走向前列。

ec19b6b61f0964950f51d7f0eebd4d74.png

识别方二维码加我微信、拉你进源码共读

今日话题

略。分享、收藏、点赞、在看我的文章就是对我最大的支持~

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

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

相关文章

魔兽怀旧网站模块下载_一个人的网站重新设计和怀旧

魔兽怀旧网站模块下载Despite how I look, I’m the kind kind of person that loves to play old video games. (Full disclosure: I look exactly like the kind of person that loves to play old video games).尽管我长得很帅&#xff0c;但我还是一个喜欢玩旧视频游戏的人…

文案写作软件_11种可改善网站用户体验的文案写作技术

文案写作软件Written by John Stevens约翰史蒂文斯 ( John Stevens)撰写 When we talk about user experience and your website, it is easy to get caught up in the site’s design and navigation options. While that is important, the words you place on the page are…

最优资产组合步骤_重新设计投资组合网站之前,请按照以下5个步骤进行操作

最优资产组合步骤The portfolio website is one of the most important assets for a designer. Without it, it can be tough to find your next job or client.作品集网站是设计师最重要的资产之一。 没有它&#xff0c;很难找到下一份工作或客户。 The temptation is high …

axios 发布 v1.1.0 据说导致很多网站瘫痪~那么如何自动提升版本号呢~

- 大家好&#xff0c;我是若川。友情提醒&#xff0c;今天还是周二。就不发长篇技术文了~近日&#xff0c;axios 发布了 v1.1.0 版本&#xff0c;调用 axios.get 时报错&#xff0c;据说导致请求无效很多网站瘫痪。目前官方已发布了 v1.1.1 v1.1.2 修复了该问题。让我想起群友在…

类从未使用_如果您从未依赖在线销售,如何优化您的网站

类从未使用初学者指南 (A beginner’s guide) If you own a small business with a store front, you might have never had to rely on online sales. Maybe you’re a small clothing store or a coffee shop. You just made that website so people could find you online, …

程序详细设计之代码编写规范_我在不编写任何代码的情况下建立了一个设计策划网站

程序详细设计之代码编写规范It’s been just over a month since MakeStuffUp.Info — my first solo project as an independent Creator; was released to the world. It was not a big project or complicated in any way, it’s not even unique, but I’m thrilled where …

404 错误页面_如何设计404错误页面,以使用户留在您的网站上

404 错误页面重点 (Top highlight)网站设计 (Website Design) There is a thin line between engaging and enraging when it comes to a site’s 404 error page. They are the most neglected of any website page. The main reason being, visitors are not supposed to end…

一个网站自动化测试程序的设计与实现

CSDN博客不再经常更新&#xff0c;更多优质文章请来 粉丝联盟网 FansUnion.cn! (FansUnion) 代码 下载地址&#xff1a;http://download.csdn.net/detail/fansunion/5018357(免积分) 代码亮点&#xff1a;可读性很好&#xff0c;注释详尽 背景 工作中&#xff0c;在维护一…

用户体验设计师能为seo做_用户体验设计师可以从产品设计历史中学到什么

用户体验设计师能为seo做Many things have changed from tool design in the prehistoric era to today’s digital product design. However, we can see surprisingly many similarities. Especially when it comes down to one particular aspect: usability.从史前时代的工…

优秀HTML5网站学习范例:从“饥饿游戏浏览器”谈用户体验

继影片《饥饿游戏》获得票房成功后&#xff0c;《饥饿游戏2&#xff1a;火星燎原》也于2012年宣布开拍&#xff0c;将在今年的11月22日登陆全球各大院线。值此之际&#xff0c;微软携手美国狮门影业公司和 RED Interactive Agency 一起为影迷打造了一个基于 HTML5 现代网页规范…

svg配合css3动画_带有Adobe Illustrator,HTML和CSS的任何网站的SVG动画

svg配合css3动画A top trend in web design for 2020 is the increased use of SVG animations on web pages and in logo design. In this article, we will implement a simple and straight forward method to create relatively complex animation. We will use Adobe Illu…

名词解释:对等知识互联网_网站设计理论:比较和对等

名词解释:对等知识互联网Equivalence and contrast, connection and distinction, categorization and non-categorization are all ways to distinguish the same or different elements. Based on the information they carry, we hope that the equivalent elements can hav…

idea重要插件代码颜色_颜色在您的网站上的重要性和品牌形象

idea重要插件代码颜色Choosing the right colors for a website or a logo can be a perplexing and time-consuming task, unless you have the right knowledge of colors. Colors play a pivotal role in the success of some businesses and can make a huge impact on the…

c++编写托管dll_教程:如何编写简单的网站并免费托管

c编写托管dll本教程适用于谁&#xff1f; (Who is this tutorial for?) This tutorial assumes no prior knowledge and is suitable for complete beginners as a first project 本教程假定您没有先验知识&#xff0c;并且适合初学者作为第一个项目 您将需要什么 (What you w…

浅蓝色设计类网站模板

浅蓝色设计类网站模板是一款高端大气的设计css3企业网站模板。 模板地址&#xff1a;http://www.huiyi8.com/sc/8673.html 转载于:https://www.cnblogs.com/xkzy/p/3765371.html

Apache JMeter--网站自动测试与性能测评

Apache JMeter--网站自动测试与性能测评2013-02-28 15:48:05标签&#xff1a;JmeterFrom:http://bdql.iteye.com/blog/291987 出于学习热情&#xff0c;翻译总结Emily H. Halili的《Apache JMeter》一书的部分内容。 JMeter的简介 可以肯定的是&#xff0c;JMeter至少符合以下几…

html5的网络书店图书网站代码_【技能提升】10个编写HTML5的实用小技巧

1. 新的文档类型(Doctype)html PUBLIC ”-//W3C//DTD XHTML 1.0 Transitional//EN”“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>上面这个既麻烦又难记的XHTML文档类型你还在使用吗&#xff1f;如果还是这样的话&#xff0c;现在该切换到新的HTML5文档类型…

云服务器建站原理_云服务器cvm与建站主机之间的区别

(文章来源&#xff1a;西部数码)云服务器cvm与建站主机区别是什么&#xff1f;cvm的英文全拼是CloudVirtualMachine(云虚拟机)&#xff0c;所以云服务器cvm是指虚拟云服务器&#xff0c;属于云服务器产品中的一种。而建站主机一般多是指虚拟主机&#xff0c;是在服务器中划分出…

程序员常访问的国外技术交流网站

技术人员经常会在各种技术交流社区游逛&#xff0c;大家互相学习、交流、分享、帮助。互联网拉近了地球人的距离&#xff0c;让全世界的技术人员可以聚集在一起分享交流。当然因为多方面原因&#xff0c;通常最新最权威的技术知识传到国内存在一定“时差”。本文将给大家分享技…

盘点程序员最喜欢的15个网站

程序员作为一个经常和互联网打交道的人群&#xff0c;他们喜欢浏览哪些网站呢&#xff1f;不爱敲代码的程序猿整理了以下网站供大家参考&#xff0c;排名不分先后&#xff1a; 0. Google https://google.com 这个不用多说了吧。 1.GitHub 开发者最最最重要的网站&#xff1a;h…