当前位置: 首页 > news >正文

第10章:CSS最佳实践 --[CSS零基础入门]

代码组织

在CSS开发中,良好的代码组织和最佳实践对于项目的可维护性和扩展性至关重要。以下是两个示例,展示了如何遵循CSS最佳实践来组织代码。

示例 1: 使用 BEM(Block Element Modifier)命名法

BEM 是一种用于提高 CSS 可读性和可维护性的命名约定。它通过使用特定的命名模式帮助开发者更好地理解和组织样式规则。下面是一个简单的例子,展示如何在 HTML 和 CSS 中应用 BEM 命名法。

HTML
<article class="card"><img src="image.jpg" alt="Description" class="card__image"><div class="card__content"><h2 class="card__title">Title</h2><p class="card__text">Some descriptive text.</p><a href="#" class="card__link card__link--primary">Read More</a></div>
</article>
CSS
/* Block */
.card {border: 1px solid #ddd;border-radius: 4px;overflow: hidden;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}/* Element */
.card__image {width: 100%;display: block;
}.card__content {padding: 16px;
}.card__title {margin: 0 0 8px;font-size: 1.5em;
}.card__text {margin: 0 0 16px;
}/* Modifier */
.card__link {color: #007bff;text-decoration: none;
}.card__link--primary {background-color: #007bff;color: white;padding: 8px 16px;border-radius: 4px;
}

说明:

  • Block: .card 是一个独立的组件。
  • Element: .__element 表示属于该块的部分,如 .card__image.card__content 等。
  • Modifier: .--modifier 用来表示元素或块的不同状态或版本,例如 .card__link--primary 表示链接的一个变体。

示例 2: 使用 SCSS(Sass)进行模块化和嵌套

SCSS 是 CSS 的预处理器,允许你编写更简洁且结构化的代码。它可以让你利用变量、嵌套、混合(mixins)、函数等功能,从而提高代码的可维护性。

SCSS 文件 (styles.scss)
// Variables
$primary-color: #007bff;
$secondary-color: #6c757d;// Mixin for media queries
@mixin respond-to($media) {@if $media == small {@media (max-width: 576px) { @content; }} @else if $media == medium {@media (min-width: 576px) and (max-width: 768px) { @content; }} // Add more media queries as needed
}// Base styles
body {font-family: Arial, sans-serif;line-height: 1.5;color: $secondary-color;
}// Component: Button
.button {display: inline-block;padding: 8px 16px;font-size: 1em;border: none;border-radius: 4px;cursor: pointer;transition: all 0.3s ease;&--primary {background-color: $primary-color;color: white;&:hover {background-color: darken($primary-color, 10%);}}&--secondary {background-color: $secondary-color;color: white;&:hover {background-color: darken($secondary-color, 10%);}}@include respond-to(small) {padding: 6px 12px;font-size: 0.9em;}
}

说明:

  • Variables: 定义了颜色等常用值作为变量,方便全局修改。
  • Mixins: 创建了一个响应式断点的 mixin,简化了媒体查询的书写。
  • Nesting: 使用嵌套减少了重复选择器的输入,并且使得样式与HTML结构更加匹配。
  • Component: 按照组件的方式定义样式,比如按钮(.button),并且为不同类型的按钮提供了修饰符(如 .button--primary.button--secondary)。

这两个示例展示了如何通过采用 BEM 命名法和使用 SCSS 来提高 CSS 代码的组织性和可维护性。遵循这些最佳实践可以帮助团队成员更容易地理解代码,同时也使得项目在未来更容易扩展和维护。

重用代码

在CSS开发中,重用代码是提高效率、减少冗余和增强可维护性的关键。以下是两个示例,展示了如何通过不同的方法来实现CSS代码的重用。

示例 1: 使用 CSS 类的组合与继承

通过定义通用样式类,并将这些类组合应用到HTML元素上,可以有效地重用样式规则。此外,使用伪类(如 :hover)可以在不增加额外类的情况下为特定状态添加样式。

HTML
<div class="container"><button class="btn btn-primary">Primary Button</button><button class="btn btn-secondary">Secondary Button</button><button class="btn btn-success">Success Button</button>
</div>
CSS
/* 基础按钮样式 */
.btn {display: inline-block;padding: 10px 20px;font-size: 16px;border: none;border-radius: 4px;cursor: pointer;transition: background-color 0.3s ease;
}/* 按钮颜色变体 */
.btn-primary {background-color: #007bff;color: white;
}.btn-secondary {background-color: #6c757d;color: white;
}.btn-success {background-color: #28a745;color: white;
}/* 鼠标悬停效果 */
.btn:hover {opacity: 0.9;
}

说明:

  • 基础样式类.btn 定义了所有按钮共享的基础样式。
  • 变体类.btn-primary, .btn-secondary, .btn-success 等为不同类型的按钮提供了特定的颜色和外观。
  • 状态样式:通过 :hover 伪类为所有按钮提供一致的鼠标悬停效果,无需为每个按钮单独定义。

示例 2: 使用 CSS 预处理器(如 SCSS/Sass)进行代码重用

CSS预处理器如SCSS允许你使用变量、混合(mixins)、嵌套等功能,从而更方便地重用代码并保持样式的一致性。

SCSS 文件 (styles.scss)
// 定义全局变量
$primary-color: #007bff;
$secondary-color: #6c757d;
$success-color: #28a745;
$padding-base: 10px;
$border-radius: 4px;// 创建mixin用于生成按钮样式
@mixin button-style($color) {background-color: $color;color: white;&:hover {background-color: darken($color, 10%);}
}// 定义基础按钮样式
.button {display: inline-block;padding: $padding-base 20px;font-size: 16px;border: none;border-radius: $border-radius;cursor: pointer;transition: background-color 0.3s ease;
}// 应用mixin到不同类型的按钮
.button--primary {@include button-style($primary-color);
}.button--secondary {@include button-style($secondary-color);
}.button--success {@include button-style($success-color);
}

说明:

  • 变量:使用 $variable 定义常用值,例如颜色和间距,这使得全局修改变得简单。
  • Mixin:创建了一个名为 button-style 的 mixin 来封装按钮的颜色逻辑,包括默认状态和悬停状态。这样可以避免重复编写相似的样式代码。
  • 嵌套:利用 SCSS 的嵌套功能简化选择器结构,同时保持代码清晰易读。

这两个示例展示了如何通过合理组织 CSS 类以及使用预处理器特性来重用代码,减少重复劳动,并确保样式的一致性和可维护性。

性能优化

优化 CSS 性能对于提高网页加载速度和用户体验至关重要。以下是两个示例,展示了如何通过具体的策略来优化 CSS 性能。

示例 1: 减少重排(Reflow)和重绘(Repaint)

频繁的 DOM 操作和样式变化会触发浏览器重新计算布局(重排)和重新绘制页面(重绘),这可能会导致性能瓶颈。为了减少这些操作,应该尽量避免在运行时频繁修改样式,并将多个样式变更合并为一次执行。

优化前
/* 不推荐:每个属性单独设置 */
.box {margin-top: 10px;margin-right: 20px;margin-bottom: 10px;margin-left: 20px;
}/* 动态添加类或内联样式 */
<script>document.querySelector('.box').style.width = '200px';document.querySelector('.box').style.height = '200px';
</script>
优化后
/* 推荐:使用简写属性 */
.box {margin: 10px 20px; /* 简化后的写法 */
}/* 使用类切换而不是直接修改样式 */
<style>.box--expanded {width: 200px;height: 200px;}
</style><script>// 合并所有样式变更到一个类中,然后一次性应用document.querySelector('.box').classList.add('box--expanded');
</script>

说明:

  • 使用简写属性:CSS 提供了多种简写属性(如 marginpaddingborder 等),可以减少代码量并降低解析负担。
  • 批量更新样式:通过定义好状态变化所需的全部样式,并以类的形式应用,可以减少对 DOM 的多次操作,从而降低重排和重绘的频率。

示例 2: 使用 Will-Change 属性和硬件加速

will-change 属性可以告诉浏览器哪些元素即将发生变化,使浏览器提前进行必要的优化准备。此外,某些 CSS 属性(如 transformopacity)可以通过 GPU 加速渲染,从而提高动画性能。

优化前
.element {transition: transform 0.5s, opacity 0.5s;
}.element:hover {transform: rotate(360deg);opacity: 0.5;
}
优化后
/* 提示浏览器提前准备好元素的变化 */
.element {will-change: transform, opacity;transition: transform 0.5s, opacity 0.5s;backface-visibility: hidden; /* 强制硬件加速 */
}.element:hover {transform: rotate(360deg);opacity: 0.5;
}

说明:

  • will-change 属性:告知浏览器元素可能发生的改变,允许它提前做出优化。注意不要滥用此属性,因为过度使用可能导致不必要的资源消耗。
  • 硬件加速:通过设置 backface-visibility: hidden 或者使用 translateZ(0) 等技巧,可以强制浏览器使用 GPU 来处理特定的动画效果,提升性能。

这两个示例展示了如何通过减少重排和重绘的操作次数以及利用硬件加速来优化 CSS 性能。遵循这些最佳实践可以帮助你构建更快、更流畅的网页应用。

语义化命名

语义化命名是 CSS 编码中的一个重要原则,它强调通过有意义的名称来描述样式的作用和用途,而不是基于样式的表现形式。这种方式有助于提高代码的可读性和可维护性,并且让其他开发者更容易理解代码的意图。

以下是两个使用语义化命名的例子:

示例 1: 使用语义化的类名来定义导航栏

HTML
<nav class="main-navigation"><ul><li><a href="#home" class="nav-link">Home</a></li><li><a href="#services" class="nav-link">Services</a></li><li><a href="#about" class="nav-link">About</a></li><li><a href="#contact" class="nav-link">Contact</a></li></ul>
</nav>
CSS
.main-navigation {background-color: #333;
}.main-navigation ul {list-style-type: none;margin: 0;padding: 0;display: flex;
}.nav-link {color: white;text-decoration: none;padding: 14px 16px;display: block;
}.nav-link:hover {background-color: #ddd;color: black;
}

说明:

  • main-navigation: 这个类名清晰地表示了这是一个主要的导航组件。
  • nav-link: 表示这些链接是导航的一部分,而不仅仅是普通的链接。这使得它们与页面上的其他链接区分开来。

示例 2: 使用语义化的类名来构建一个消息框

HTML
<article class="message-box message-box--success"><h1 class="message-title">Success!</h1><p class="message-text">Your changes have been saved.</p>
</article><article class="message-box message-box--error"><h1 class="message-title">Error!</h1><p class="message-text">There was a problem with your request.</p>
</article>
CSS
.message-box {border: 1px solid #ccc;border-radius: 5px;padding: 16px;margin-bottom: 10px;
}.message-box--success {border-color: #28a745;background-color: #d4edda;
}.message-box--error {border-color: #dc3545;background-color: #f8d7da;
}.message-title {margin-top: 0;font-size: 1.2em;
}.message-text {margin: 0;
}

说明:

  • message-box: 类名直接反映了这个组件的功能——它是一个用来显示消息的盒子。
  • message-box--successmessage-box--error: 这些修饰符清楚地表达了不同状态的消息框(成功或错误),并且可以很容易地添加更多状态(如警告、信息等)。
  • message-titlemessage-text: 这些类名明确了元素在消息框内的角色,即标题和正文内容,而不是依赖于视觉表现(如颜色或大小)来命名。

这两个例子展示了如何利用语义化命名来编写更清晰、更具描述性的 CSS。这样的做法不仅使代码更容易被其他开发者理解,而且也有助于保持样式的一致性和适应未来的设计变更。如果你有更多问题或需要进一步的帮助,请随时提问!

代码注释

良好的代码注释是确保CSS代码可读性和可维护性的关键。适当的注释可以帮助开发者快速理解样式的目的和作用,尤其是在团队协作或代码需要长期维护的情况下。以下是两个示例,展示了如何在CSS中添加有效的注释。

示例 1: 使用注释解释复杂的样式规则

当编写涉及复杂逻辑或特定浏览器兼容性的样式时,清晰的注释可以大大提升代码的可读性。下面是一个关于响应式设计的例子:

CSS
/* 响应式布局:根据屏幕宽度调整主内容区域和侧边栏的比例。主要适用于桌面和移动设备之间的转换。
*//* 桌面视图 */
@media (min-width: 768px) {.main-content {/* 主内容区占据75%的宽度 */flex: 3;}.sidebar {/* 侧边栏占据25%的宽度 */flex: 1;}
}/* 移动视图 */
@media (max-width: 767px) {.main-content, .sidebar {/* 在较小屏幕上,主内容区和侧边栏都占据整个宽度 */flex: 1 100%;}
}

说明:

  • 整体注释:在 @media 查询之前添加了一段描述,解释了接下来的样式将如何影响页面布局。
  • 局部注释:为每个具体的样式规则提供了简短的注释,说明它们的作用和预期效果。

示例 2: 使用注释组织代码结构和模块化

对于大型项目,通过注释来划分不同的样式模块可以显著提高代码的结构性和易读性。以下是如何使用注释来组织一个包含多个组件的样式文件的例子:

SCSS 文件 (styles.scss)
// === 全局变量 ===
$primary-color: #007bff;
$secondary-color: #6c757d;
$base-font-size: 16px;// === 混合(Mixins) ===
@mixin flex-center {display: flex;justify-content: center;align-items: center;
}// === 组件:按钮 ===
.button {padding: 0.5em 1em;font-size: $base-font-size;border: none;border-radius: 4px;cursor: pointer;transition: background-color 0.3s ease;&--primary {@include button-style($primary-color);}&--secondary {@include button-style($secondary-color);}
}// === 组件:卡片 ===
.card {border: 1px solid #ddd;border-radius: 4px;overflow: hidden;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);&__image {width: 100%;display: block;}&__content {padding: 1em;}
}// === 工具函数 ===
@function button-style($color) {@return (background-color: $color,color: white,&:hover {background-color: darken($color, 10%);});
}

说明:

  • 分隔线注释:使用 === 分隔符将不同部分的代码区分开来,如全局变量、混合、组件等。这有助于快速定位和浏览代码的不同模块。
  • 组件注释:为每个组件添加简短的标题注释,使读者能够迅速识别出各个部分的功能。
  • 内联注释:对于一些不那么直观的样式规则(如混合中的 flex-center),提供额外的解释以帮助理解其功能。

这两个示例展示了如何通过详细的注释来增强CSS代码的可读性和可维护性。遵循这些最佳实践可以帮助你创建更加清晰、易于理解和维护的样式表。

相关文章:

第10章:CSS最佳实践 --[CSS零基础入门]

代码组织 在CSS开发中&#xff0c;良好的代码组织和最佳实践对于项目的可维护性和扩展性至关重要。以下是两个示例&#xff0c;展示了如何遵循CSS最佳实践来组织代码。 示例 1: 使用 BEM&#xff08;Block Element Modifier&#xff09;命名法 BEM 是一种用于提高 CSS 可读性…...

备战美赛!2025美赛数学建模C题模拟预测!用于大家练手模拟!

完整的思路代码模型见文末 2025 美赛数学建模 C 题 模拟题&#xff1a;城市交通拥堵指数的预测与管理策略 背景 随着全球城市化进程的加快&#xff0c;交通拥堵问题成为城市发展的重要挑战之一。交通拥堵不仅影响居民出行效率&#xff0c;还增加了能源消耗和碳排放。近年来&…...

ESP8266 Ubuntu 安装

文章参考&#xff1a;https://blog.csdn.net/AUST_129/article/details/119406722文章浏览阅读1.8k次&#xff0c;点赞4次&#xff0c;收藏19次。参考&#xff1a;https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/linux-setup.htmlhttp://aicloud…...

tryhackme-Pre Security-Defensive Security Intro(防御安全简介)

任务一&#xff1a;Introduction to Defensive Security防御安全简介 此room的两个要点&#xff1a; Preventing intrusions from occurring 防止入侵发生Detecting intrusions when they occur and responding properly 检测发生的入侵并正确响应 防御安全还有更多内容。 除上…...

单片机:实现倒计时(附带源码)

使用单片机实现倒计时功能是一个常见的嵌入式应用&#xff0c;它能帮助你更好地理解如何进行时间控制和如何通过定时器实现精确的倒计时。通过该项目&#xff0c;你将学习如何使用单片机的定时器来进行时间计算&#xff0c;并通过LED或LCD显示倒计时的结果。 1. 项目概述 倒计…...

安全防御之可信计算技术

可信计算技术是一种计算机安全体系结构&#xff0c;旨在提高计算机系统在面临各种攻击和威胁时的安全性和保密性。它通过包括硬件加密、受限访问以及计算机系统本身的完整性验证等技术手段&#xff0c;确保计算机系统在各种攻击和威胁下保持高度安全和保密性。 一、可信计算基…...

视频生成缩略图

文章目录 视频生成缩略图使用ffmpeg 视频生成缩略图 最近有个需求&#xff0c;视频上传之后在列表和详情页需要展示缩略图 使用ffmpeg 首先引入jar包 <dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><vers…...

PySide6程序框架设计

pyside6有一个优点自动适配高分辨ui pyqt5需要自己写这部分逻辑 1、主程序代码 DINGSHI01Main.py # -*- coding: utf-8 -*- import sys,time,copy from PySide6.QtWidgets import QWidget,QApplication from PySide6.QtCore import Qt from PySide6 import QtCore, QtGui, Q…...

WebSocket入门与结合redis

WebSocket是什么 WebSocket 是一种用于在客户端和服务器之间建立双向通信的协议&#xff0c;它能实现实时、持久的连接。与传统的 HTTP 请求响应模式不同&#xff0c;WebSocket 在建立连接后允许客户端和服务器之间相互发送消息&#xff0c;直到连接关闭。由于 WebSocket 具有…...

锂电池SOH预测 | 基于BiGRU双向门控循环单元的锂电池SOH预测,附锂电池最新文章汇集

锂电池SOH预测 | 基于BiGRU双向门控循环单元的锂电池SOH预测&#xff0c;附锂电池最新文章汇集 目录 锂电池SOH预测 | 基于BiGRU双向门控循环单元的锂电池SOH预测&#xff0c;附锂电池最新文章汇集预测效果基本描述程序设计参考资料 预测效果 基本描述 锂电池SOH预测 | 基于Bi…...

C# 结构体和类

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、类&#xff08;Class&#xff09;二、结构体&#xff08;Struct&#xff09;示例代码&#xff08;定义类和结构体&#xff09;类的继承代码示例&#xff08…...

C语言中的内存管理:理解指针、动态内存分配与内存泄漏

在C语言中&#xff0c;内存管理是一个至关重要的主题。与许多高级语言不同&#xff0c;C语言要求程序员显式地管理内存的分配与释放。虽然这种做法提供了更高的灵活性和控制权&#xff0c;但也容易导致内存泄漏、越界访问等问题。正确地管理内存对于编写高效、稳定的C程序至关重…...

web:pc端企业微信登录-vue版

官方文档&#xff1a;developer.work.weixin.qq.com/document/pa… 不需要调用ww.register&#xff0c;直接调用ww.createWWLoginPanel即可创建企业微信登录面板 - 文档 - 企业微信开发者中心 (qq.com) 引入 //通过 npm 引入 npm install wecom/jssdk import * as ww from we…...

GC.2015.四年级

GC.2015.四年级.01.奖励 题目描述 晨晨班主任想奖励班里面的每个学生一只圆珠笔和铅笔&#xff0c;已知每只圆珠笔和铅笔的价格&#xff0c;以及班里面的学生人数n&#xff0c;你能帮助老师算出总价吗&#xff1f; 输入格式 第一行&#xff1a;一个整数n&#xff0c;代表班里…...

一篇文章掌握WebService服务、工作原理、核心组件、主流框架

目录 1、WebService定义 解决问题&#xff1a; 2、WebService的工作原理 2.1 实现一个完整的Web服务包括以下步骤 2.2 调用方式 3、Web Service的核心组件 3.1 XML 3.2 SOAP 3.3 WSDL 3.4 UDDI 4、主流框架 4.1 AXIS(已淘汰) 4.2 XFire 4.3 CXF 5、Soap协议详解…...

中软高科身份证云解码金融(银行)解决方案介绍

多年来&#xff0c;中软高科一直深耕身份证云解码领域&#xff0c;对身份证云解码应用于金融&#xff08;银行&#xff09;&#xff0c;进行了大量且深入的研究。从长期调研来看&#xff0c;金融&#xff08;银行&#xff09;的痛点需求主要有&#xff1a; 传统身份证解码设备…...

Linux NVIDIA GPU linpack 测试

前言 多节点多GPU测试有点坑,这篇文章有解决方法。 环境 操作系统信息 lsb_release -aNo LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammycpu 信息 lscpuArchitecture: x86_64CPU op-mod…...

LiteFlow决策系统的策略模式,顺序、最坏、投票、权重

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 想必大家都有听过或做过职业和性格测试吧&#xff0c;尤其是现在的毕业生&#xff0c;在投了简历之后经…...

“AI换脸”骗过人脸识别?黑产攻击新手段应如何防御?

在著名美剧《权力的游戏》中&#xff0c;有一个神秘的刺客组织叫“无面者”&#xff0c;这个组织中的人可以通过某种神秘手段切换无数种不同的面孔&#xff0c;实现“一人千面”。 电视剧毕竟魔幻。但如今&#xff0c;基于人工智能的深度合成伪造技术正在让“一人千面”成为现…...

面试题整理6----什么是进程最大数、最大线程数、进程打开的文件数,怎么调整

什么是进程最大数、最大线程数、进程打开的文件数&#xff0c;怎么调整 1. 进程最大数1.1 调整方法&#xff1a; 2. 最大线程数2.1 调整方法&#xff1a; 3. 注意事项 #linux 1. 进程最大数 进程最大数是指操作系统允许同时运行的进程数量上限。这个限制通常由内核参数 ulimi…...

android RadioButton + ViewPager+fragment

RadioGroup viewpage fragment 组合显示导航栏 1、首先主界面的布局控件就是RadioGroup viewpage <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools…...

Zabbix6.0升级为6.4

为了体验一些新的功能&#xff0c;比如 Webhook 和问题抑制等&#xff0c;升级个小版本。 一、环境信息 1. 版本要求 一定要事先查看官方文档&#xff0c;确认组件要求的版本&#xff0c;否则版本过高或者过低都会出现问题。 2. 升级前后信息 环境升级前升级后操作系统CentOS…...

Unity 根据文本宽度自动移动图像位置

游戏中有时候需要变动的显示一个物品的数量&#xff0c;变化的文本宽度不停的变化&#xff0c;这时候需要将物品的icon随着文本的长度而改变位置。 实现思路&#xff1a;使用Content Size Fitter来动态改变内容的大小。 首先建立一个文本组件&#xff0c;添加Content Size Fi…...

spring @Mapper Converter转换泛型异常

spring Mapper Converter转换泛型异常 需要在每个list类型转换上面加Named 注解&#xff0c;否则会影响page生成的类型转换 比如&#xff1a; import org.mapstruct.Mapper; import org.mapstruct.Named;import com.baomidou.mybatisplus.core.metadata.IPage; import com.b…...

如何设计一个秒杀系统

开局一张图 结局要说清 对于设计一个秒杀系统&#xff0c;结合图片分层结构&#xff0c;根据每一层从访问层&#xff0c;负载层&#xff0c;服务层&#xff0c;业务层&#xff0c;支撑层&#xff0c;数据层&#xff0c;详细说明每一层应该怎么设计。 应该注意那些事项。比如访…...

SPL06 基于stm32F103 HAL库驱动(软件模拟IIC)

talk is cheap, show you my code SPL06.c #include "SPL06.h"//*************全局变量*************// Factor_List* b_list; //存储过采样率对应的系数KP&#xff0c;KT COEF_ValueStruct Coefficient { 0 }; //存储校准系数…...

arcgisPro将面要素转成CAD多段线

1、说明&#xff1a;正常使用【导出为CAD】工具&#xff0c;则导出的是CAD三维多线段&#xff0c;无法进行编辑操作、读取面积等。这是因为要素面中包含Z值&#xff0c;导出则为三维多线段数据。需要利用【复制要素】工具禁用M值和Z值&#xff0c;再导出为CAD&#xff0c;则得到…...

Cocos Creator 试玩广告开发

之前主要是使用Unity,这次刚好项目是试玩游戏的开发&#xff0c;所以临时学了Cocos来开发。所以这篇文章&#xff0c;更加关注从Unity转到Cocos开发的经历以及试玩的基本开发。 首先&#xff0c;我是没有使用过Cocos的&#xff0c;也没有接触过Ts语言&#xff0c;对于Ts的开发开…...

【Linux】解锁文件描述符奥秘,高效缓存区的实战技巧

fd和缓冲区 1. 文件描述符fd1.1. 概念与本质1.2. 打开文件的管理1.3. 一切皆文件的理解1.4. 分配规则1.5. 重定向的本质1.5.1. dup2 2. FILE中的缓冲区2.1. 概念2.2. 存在的原因2.3. 类型(刷新方案)2.4. 存放的位置2.4.1. 代码证明、现象解释 2.5. 模拟C标准库中的方法 1. 文件…...

MySQL基础笔记(五)

在此特别感谢尚硅谷-康师傅的MySQL精品教程 获取更好的阅读体验请前往我的博客主站! 如果本文对你的学习有帮助&#xff0c;请多多点赞、评论、收藏&#xff0c;你们的反馈是我更新最大的动力&#xff01; 约束 1. 约束(constraint)概述 1.1 为什么需要约束 数据完整性&…...

夯实数字技术,培育创新人才:数据科学与大数据技术专业人才培养实践

近年来&#xff0c;得益于全球各国家和地区对大数据产业的政策扶持以及数字经济的蓬勃发展&#xff0c;大数据市场在全球范围内展现出了迅猛的增长态势。国家层面相继出台了诸如《“数据要素 ” 三年行动计划&#xff08;2024—2026 年&#xff09;》《数字中国建设整体布局规划…...

Java爬虫大冒险:如何征服1688商品搜索之巅

在这个信息爆炸的时代&#xff0c;数据就是力量。对于电商平台而言&#xff0c;数据更是金矿。今天&#xff0c;我们要踏上一场Java爬虫的冒险之旅&#xff0c;目标是征服1688这个B2B电商巨头&#xff0c;获取按关键字搜索的商品信息。这不仅是技术的挑战&#xff0c;更是智慧的…...

IEC 101/104 中为什么我们需要单点和双点信号

REDISANT 提供互联网与物联网开发测试套件 # 互联网与中间件&#xff1a; Redis AssistantZooKeeper AssistantKafka AssistantRocketMQ AssistantRabbitMQ AssistantPulsar AssistantHBase AssistantNoSql AssistantEtcd AssistantGarnet Assistant 工业与物联网&#xff1…...

01、NodeJS学习笔记,第一节:Node.js初识与内置模块

一、初识Node.js与内置模块 ##网址 https://nodejs.org##npm包 https://www.npmjs.com/ &#xff08;搜索&#xff09;https://registry.npmjs.org/ &#xff08;下载&#xff09;1、初识Node.js ##思考&#xff1a;为什么JavaScript可以在浏览器中被执行因为浏览器…...

ElasticSearch 自动补全

1、前言 当用户在搜索框输入字符时&#xff0c;我们应该提示出与该字符有关的搜索项&#xff0c;根据用户输入的字母&#xff0c;提示完整词条的功能&#xff0c;就是自动补全。 2、安装拼音分词器 Github地址&#xff1a;https://github.com/infinilabs/analysis-pinyin 插件…...

整点(枚举)

Hello&#xff01;大家好&#xff01;我是学霸小羊&#xff0c;今天分享一道c枚举题&#xff1a; 题目描述 在二维坐标系, 有一个圆&#xff0c;圆心在(0,0)&#xff0c;圆的半径是r。问圆内有多少个整点(所谓的整点就是横坐标和纵坐标都是整数的点)。若点P的横坐标是整数a&a…...

【WRF安装】WRF编译错误:problems building executables look for error in the build log

WRF编译错误 错误内容&#xff1a;problems building executables, look for error in the build log原因1&#xff1a;gcc版本过低安装高版本gcc 原因2&#xff1a;netcdf版本和配置有误原因3&#xff1a;库冲突原因4&#xff1a;export NETCDF_classic1终极手段&#xff1a;重…...

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程 产品介绍 仿东郊到家约玩系统是一种新兴的线上预约&#xff0c;线下社交、陪伴、助娱、助攻、分享、解答、指导等服务模式&#xff0c;范围涉及电竞、运动、音乐…...

社区版 IDEA 开发webapp 配置tomcat

1.安装tomcat 参考Tomcat配置_tomcat怎么配置成功-CSDN博客 2.构建webapp项目结构 新建一个普通项目 然后添加webapp的目录结构&#xff1a; main目录下新建 webapp 文件夹 webapp文件夹下新建WEB_INF文件夹 *WEB_INF目录下新建web.xml wenapp文件夹下再新建index.html …...

IDEA中解决Edit Configurations中没有tomcat Server选项的问题

今天使用IDEA2024专业版的时候,发现Edit Configurations里面没有tomcat Server,最终找到解决方案。 一、解决办法 1、打开Settings 2、搜索tomcat插件 搜索tomcat插件之后,找到tomcat 发现tomcat插件处于未勾选状态,然后我们将其勾选保存即可。 二、结果展示 最后,再次编…...

【Python】主成分分析PCA - 算法、问题与Python实现

【Python】主成分分析PCA - 算法、问题与Python实现 一、PCA 算法简介&#xff08;一&#xff09;概念及作用&#xff08;二&#xff09;基本原理&#xff08;三&#xff09;算法步骤1.数据预处理2.计算协方差矩阵3.进行特征值分解4.选择主成分5.完成数据降维 二、PCA 常见问题…...

Go怎么做性能优化工具篇之pprof

工欲善其事、必先利其器。这次我们来看看Go的性能优化工具有哪些吧 Go性能优化的工具 一、pprof 工具 pprof 是 Go 语言自带的性能分析工具&#xff0c;可以帮助开发者分析程序的 CPU 使用情况、内存使用情况、goroutine 调度情况等&#xff0c;从而定位性能瓶颈。通过 pprof…...

DataOps驱动数据集成创新:Apache DolphinScheduler SeaTunnel on Amazon Web Services

引言 在数字化转型的浪潮中&#xff0c;数据已成为企业最宝贵的资产之一。DataOps作为一种文化、流程和实践的集合&#xff0c;旨在提高数据管道的质量和效率&#xff0c;从而加速数据从源头到消费的过程。白鲸开源科技&#xff0c;作为DataOps领域的领先开源原生公司&#xf…...

递归读取指定目录下的文件

序言 需要读取sftp服务器上符合指定的文件名正则的文件列表&#xff0c;目前想到的最好的办法就是递归。 我这里引入的依赖是&#xff1a; <!-- jsch-sftp连接 --><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artif…...

代码随想录算法训练营day46|动态规划part12

今天就结束动态规划章节了&#xff0c;以后还要多加练习。 今天的两道题都很有难度&#xff0c;647回文子串的思路非常巧妙&#xff0c;因为用一维dp数组比较难表示子串的起点和终点&#xff0c;所以需要用二维dp数组表示&#xff0c;dp[i][j]表示以i为起点&#xff0c;j为终点…...

ubuntu 24.04.1安装FTP流程

1、安装vsftpd&#xff1a; sudo apt update sudo apt install vsftpd 2、安装后重启查看vsftpd状态 sudo systemctl status vsftpd 输出如下所示&#xff0c;表明vsftpd服务处于活动状态并正在运行&#xff1a; * vsftpd.service - vsftpd FTP server Loaded: loaded (/…...

【Linux】UDP通信

udp使用的是数据报传输。可以一对一&#xff0c;一对多进行传输&#xff0c;用于快速&#xff0c;实时性高的场景 服务器端&#xff1a; 使用步骤&#xff1a; 1.创建socket 2.bind绑定可接收的客户端 3.while{ recv接收数据 send发送数据 } #include <stdio.h> #inclu…...

日期格式、JSR303校验

日期格式 public class Monster() {DateTimeFormat(pattern "yyyy-MM-dd")private Date birthday; } 输入&#xff1a;2024-11-12&#xff0c; 输出&#xff1a;Monster{birthdaySun Nov 12 00:00:00 CST 2024} public class Monster {JsonFormat(pattern &…...

ELK系列-(六)Redis也能作为消息队列?(上)

一、前文回顾 &#x1f50d; 在前面的ELK系列中&#xff0c;我们已经搭建了ELK的核心组件&#xff0c;包括&#xff1a; ELK系列-&#xff08;一&#xff09;Docker部署ELK核心组件ELK系列-&#xff08;二&#xff09;LogStash数据处理的瑞士军刀ELK系列-&#xff08;三&…...

点击展示大图预览

原文链接在table表格里能够实现&#xff0c;点击里面的图片实现大图预览的效果&#xff1b; 一、先安装viewer — 使用npm安装 npm install v-viewer --save二、在main.js中引入 import Viewer from v-viewer //点击图片大图预览 import viewerjs/dist/viewer.css Vue.use(…...