LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

你应该知道的 22 个 CSS 技巧,提升你的 UI 设计

admin
2025年6月11日 9:52 本文热度 152


CSS是引人入胜且用户界面友好的强大网站开发工具之一。在本文中,我将分享 22 个 CSS 技巧,帮助你增强文本样式、创建流畅的交互并优化你的 UI 设计。

在开始之前,别忘了关注我的公众号平台【web前端开发】,从而可以获取最新的编程技巧、开发工具和学习资源,提升您的 Web 开发技能。

那现在,就让我们开始吧!

01、为文本创建阴影效果

我们可以使用 text-shadow 属性为文本创建阴影效果,从而营造深度并使文本更具视觉吸引力。

text-shadow: h-shadow v-shadow blur-radius color;

  • h-shadow:水平阴影位置(必需)。

  • v-shadow:垂直阴影位置(必需)。

  • blur-radius:可选。定义模糊距离。值越大,阴影越模糊。

  • color:可选。指定阴影的颜色。

示例:

<!DOCTYPE html><html lang="en">  <head>     <meta charset="UTF-8" />      <meta name="viewport" content="width=device-width, initial-scale=1.0" />         <title>Text-Shadow Property</title>           <style>               h1 {        text-shadow2px 2px 5px #585858;      }              </style>             </head>              <body>                 <h1>Text-Shadow</h1>                 </body>               </html>

02、更改文本首字母的颜色

我们可以使用 ::first-letter 伪元素更改文本首字母的颜色。

这允许我们仅定位和设置任何文本块的首字母的样式,从而轻松地为其应用不同的颜色、字体样式或大小。

示例:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />     <meta name="viewport" content="width=device-width, initial-scale=1.0" />     <title>::first-letter Pseudo-Element</title>       <style>           p {        font-size1em;              font-weight500;             }            p::first-letter {                  color#4763ff;                   font-size2em;                      font-weight: bold;                       }                         </style>                        </head>                        <body>                           <p>                             This is an example paragraph. The first letter will be colored      differently.                             </p>                              </body>                            </html>

03、为文本添加描边

要在 CSS 中为文本添加描边,我们可以使用 -webkit-text-stroke 属性。

此属性受基于 WebKit 的浏览器(例如 Chrome、Safari 和 Edge)支持。它允许我们为文本应用描边效果,使其呈现轮廓外观。

语法:

text-stroke: <stroke-width> <stroke-color>;

  • stroke-width:定义描边(轮廓)的宽度。

  • stroke-color:定义描边的颜色。

示例:

<!DOCTYPE html><html lang="en">  <head>     <meta charset="UTF-8" />     <meta name="viewport" content="width=device-width, initial-scale=1.0" />       <title>Text-Stroke</title>        <style>             h1 {                colorrgb(148206240);                  -webkit-text-stroke: 2px rgb(77147187);                 }                 </style>                 </head>                   <body>    <h1>Text-Stroke</h1>   </body> </html>

04、控制文本与其下划线之间的垂直距离

我们可以使用 text-underline-offset 属性来控制文本与其下划线之间的垂直距离。

语法:

text-underline-offset: <length>;

<length>:指定下划线偏移的距离。该值可以采用像素 (px)、em (em)、rem (rem) 等单位。

05、控制文本对齐

当 text-align 属性设置为 justify 时,我们可以使用 text-justify 属性来控制文本的对齐方式。

此属性提供了多种方法来调整字符或单词之间的间距,以确保文本在容器的整个宽度上均匀对齐。

语法:

text-justify: <value>;

  • auto:默认对齐方式。它根据字体和上下文确定文本的对齐方式。

  • inter-word:在单词之间添加空格以使文本对齐,使单词之间的间距更大。

  • inter-character:在各个字符之间添加空格以使文本对齐。这可能会导致间距不均匀,尤其是在文本包含长单词的情况下。

  • none:禁用任何对齐方式,并保持单词或字符之间的默认间距。

  • initial:将值重置为默认设置。

  • inherit:从父元素继承对齐方式。

示例:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Text-Justify</title>    <style>      h1 {        text-align: justify;        text-justify: inter-character;      }    </style>  </head>  <body>    <h1>This is an example text.</h1>  </body></html>

06、更改文本选择颜色

我们可以使用 CSS 中的 ::selection 伪元素更改网页上文本选择的默认颜色。这允许我们更改网页上选定文本的背景颜色和文本颜色,并替换浏览器的默认样式,使其与网站主题保持一致。

示例:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Changing the Text Selection Color</title>    <style>      ::selection {        background#cf624e;        color#ffffff;       }     </style>     </head>  <body>    <h1>This is an example text.</h1>  </body></html>

07、跨浏览器兼容性

为了更好地支持某些浏览器的旧版本,请添加 Firefox 的 ::-moz-selection 伪元素:

::selection {    background#cf624e;    color#ffffff;}::-moz-selection {  background#cf624e;   color#ffffff; }

::selection 只能设置背景和颜色属性的样式。其他属性(例如字体大小、文本装饰等)不受支持。

08、平滑滚动

您无需使用任何 JavaScript,只需一行 CSS 代码即可实现网页的平滑滚动。

html {  scroll-behavior: smooth;}

向 HTML 元素添加 scroll-behavior: Smooth; 可确保所有锚链接或其他页内导航(如 #section)顺利滚动到目标部分。

09、创建流畅且引人入胜的效果

CSS 过渡效果可让您在网页上创建流畅且引人入胜的效果。

这些过渡效果通过动画效果而非即时变化来提升用户体验。

当指定属性在定义的持续时间内发生变化时,就会发生 CSS 过渡。我们可以为颜色、尺寸、不透明度等属性定义过渡效果。

语法:

element {  transition: property duration timing-function delay;}

  • property:要设置动画的 CSS 属性(例如,颜色、宽度、不透明度)。

  • duration:过渡所需的时长(例如,2 秒、500 毫秒)。

  • timing-function(可选):定义过渡的速度(例如,ease、linear、ease-in-out)。

  • delay(可选):开始过渡前的等待时间(例如,1 秒)。

10、更改文本光标的颜色

我们可以使用 caret-color 属性更改 <input> 或 <textarea> 元素的文本光标颜色,使其与您的网页配色方案相匹配。

示例:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Changing the Color of Text Cursor</title>    <style>      input {        caret-color: tomato;      }    </style>  </head>  <body>    <input type="text" placeholder="Type something here..." />  </body></html>

11、浏览器支持

caret-color 属性在 Chrome、Firefox、Safari 和 Edge 等现代浏览器中均受支持,但在较旧的版本中可能不受支持。

12、控制用户文本选择权限

user-select 属性可用于控制用户选择元素内文本的权限。

语法:

element {  user-selectvalue;}

  • value:此属性有以下值。

  • auto:默认行为(允许文本选择)。

  • none:禁用文本选择。

  • text:允许选择文本,但这是包含文本的元素的默认设置。

  • contain:阻止用户选择元素内的文本,但允许选择其子元素中的文本。

示例:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Controlling Text Selection</title>    <style>      div {        width: max-content;        border3px solid purple;        user-select: none; /* Prevents text selection within the div */      }    </style>  </head>  <body>    <div>      <p>You can't select this text.</p>    </div>    <p>You can select this text.</p>  </body></html>

用例

某些网站可能会使用 user-select: none; 来保护内容不被轻易复制(尽管这并非万无一失的方法)。

浏览器支持

user-select 属性在现代浏览器中得到广泛支持。然而,旧版本的 Internet Explorer 不支持该属性。

13、自定义列表点

要在 CSS 中自定义列表点,我们可以使用 ::marker 伪元素。

示例:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta http-equiv="X-UA-Compatible" content="IE=edge" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Customize List Points</title>    <style>      ul li::marker {        content"★";        color: gold;        font-size20px;      }    </style>  </head>  <body>    <ul>      <li>Item 1</li>      <li>Item 2</li>      <li>Item 3</li>    </ul>  </body></html>

14、控制溢出文本

CSS 中的 text-overflow 属性用于控制当文本超出容器宽度时如何处理溢出文本。

当文本空间有限,并且想要添加省略号 (...) 或其他效果来指示文本过长而无法完全显示时,该属性尤其有用。

示例:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta http-equiv="X-UA-Compatible" content="IE=edge" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Text-overflow</title>    <style>      div {        width150px;        border1px solid black;      }      p {        white-space: nowrap; /* Prevent text from wrapping onto multiple lines */        overflow: hidden; /* Hide the overflowed text */        text-overflow: ellipsis; /* Add ellipsis (...) when the text overflows */      }    </style>  </head>  <body>    <div>      <p>This is an example of CSS text-overflow property.</p>    </div>  </body></html>

文本溢出的用例

  • 导航栏:在文本可能溢出的小型导航链接中,您可以使用它来保持界面整洁。

  • UI 中的文本截断:当您需要截断较长的标题、描述或其他内容,同时仍显示有更多信息时。

  • 响应式设计:在容器大小发生变化的设计中(例如调整浏览器大小时),文本溢出可确保文本适合容器大小,从而保持可读性。

15、控制文本的方向和流向

CSS 中的 writing-mode 属性允许我们控制元素中文本的方向和流向。

writing-mode 的值

示例 1:horizontal-tb(默认)

它使文本从左到右、从上到下水平排列。

<!DOCTYPE html><html lang="en">    <head>    <meta charset="UTF-8" />    <meta http-equiv="X-UA-Compatible" content="IE=edge" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Writing Mode</title>    <style>       div {         display: flex;         border1px solid black;       }        h1 {          colorrgb(11950119);          writing-mode: horizontal-tb;        }      </style>     </head>     <body>       <div>         <h1>Heading</h1>           <p>                Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium        recusandae reiciendis assumenda quidem ea ducimus doloremque        necessitatibus exercitationem. Quod commodi alias optio placeat        explicabo. Omnis facere officiis facilis distinctio veritatis iusto,        praesentium, incidunt ullam quam earum fugiat? Harum libero officiis        minima? Itaque ipsam nostrum reiciendis iste nulla. Dicta, voluptatem        ab?               </p>              </div>              </body>             </html>

示例 2:sideways-rl

此值将文本逆时针旋转 90 度,并使其从右向左排列。

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta http-equiv="X-UA-Compatible" content="IE=edge" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Writing Mode</title>    <style>      div {        display: flex;        border1px solid black;      }      h1 {        colorrgb(11950119);         writing-mode: sideways-rl;      }     </style>   </head>   <body>     <div>       <h1>Heading</h1>       <p>        Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium        recusandae reiciendis assumenda quidem ea ducimus doloremque        necessitatibus exercitationem. Quod commodi alias optio placeat        explicabo. Omnis facere officiis facilis distinctio veritatis iusto,        praesentium, incidunt ullam quam earum fugiat? Harum libero officiis        minima? Itaque ipsam nostrum reiciendis iste nulla. Dicta, voluptatem        ab?       </p>       </div>        </body>       </html>

示例 3:sideways-lr

此值将文本顺时针旋转 90 度,并使其从左向右排列。

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta http-equiv="X-UA-Compatible" content="IE=edge" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Writing Mode</title>    <style>      div {        display: flex;        border1px solid black;      }      h1 {        colorrgb(11950119);        writing-mode: sideways-lr;      }    </style>   </head>    <body>       <div>          <h1>Heading</h1>           <p>               Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium        recusandae reiciendis assumenda quidem ea ducimus doloremque        necessitatibus exercitationem. Quod commodi alias optio placeat        explicabo. Omnis facere officiis facilis distinctio veritatis iusto,        praesentium, incidunt ullam quam earum fugiat? Harum libero officiis        minima? Itaque ipsam nostrum reiciendis iste nulla. Dicta, voluptatem        ab?             </p>            </div>           </body>         </html>

示例 4:vertical-rl

此值使文本从上到下垂直排列,行距从右到左。

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta http-equiv="X-UA-Compatible" content="IE=edge" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Writing Mode</title>    <style>       div {         display: flex;         border1px solid black;      }        h1 {           colorrgb(11950119);           writing-mode: vertical-rl;      }         </style>        </head>         <body>            <div>               <h1>Heading</h1>                  <p>                        Lorem ipsum dolor sit amet                 consectetur adipisicing elit. Praesentium                        recusandae reiciendis assumenda quidem ea ducimus doloremque                        necessitatibus exercitationem. Quod commodi alias optio placeat        explicabo. Omnis facere officiis facilis distinctio veritatis iusto,        praesentium, incidunt ullam quam earum fugiat? Harum libero officiis        minima? Itaque ipsam nostrum reiciendis iste nulla. Dicta, voluptatem        ab?      </p>    </div>  </body> </html>

​示例 5:vertical-lr

此值使文本从上到下垂直排列,但行从左到右排列。

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta http-equiv="X-UA-Compatible" content="IE=edge" />      <meta name="viewport" content="width=device-width, initial-scale=1.0" />       <title>Writing Mode</title>        <style>            div {                display: flex;                 border1px solid black;                 }                 h1 {                     colorrgb(11950119);                       writing-mode: vertical-lr;                      }                      </style>                     </head>                      <body>                         <div>                              <h1>Heading</h1>                                  <p>                                      Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium        recusandae reiciendis assumenda quidem ea ducimus doloremque        necessitatibus exercitationem. Quod commodi alias optio placeat        explicabo. Omnis facere officiis facilis distinctio veritatis iusto,        praesentium, incidunt ullam quam earum fugiat? Harum libero officiis        minima? Itaque ipsam nostrum reiciendis iste nulla. Dicta, voluptatem        ab?      </p>    </div>   </body> </html>

用例

亚洲语言:许多亚洲语言(例如日语、中文和韩语)在某些特定情况下传统上使用垂直文本流,尤其是在分栏书写时。

设计效果:您可以使用书写模式创建独特的文本效果,例如垂直旋转的文本或按栏排列的文本。

16、限制文本块的行数

我们可以使用 -webkit-line-clamp 属性轻松限制文本块的行数。

当我们想在不依赖 JavaScript 的情况下将文本限制在固定行数内时,此功能尤其有用。

此属性仅在 display 属性设置为 -webkit-box 或 -webkit-inline-box 且 -webkit-box-orient 属性设置为 Vertical 时有效。

浏览器兼容性

  • 此属性并非官方 CSS 规范的一部分,但在基于 WebKit 的浏览器中得到广泛支持,包括 Chrome、Edge、Safari 和一些移动浏览器。

  • 对于不支持 -webkit-line-clamp 的浏览器,请考虑使用 JavaScript 回退功能进行多行截断。

17、控制用户调整元素大小的能力

我们可以使用 CSS 的 resize 属性来控制用户调整元素大小的能力。要使 resize 属性生效,元素必须具有 overflow 值。

resize 属性最常用于 <textarea> 等元素或 <div> 等包含可滚动内容的容器。

语法:

element {  resize: none | both | horizontal | vertical;}

resize 属性的值

  • none:用户无法调整元素大小。调整大小手柄被隐藏。

  • vertical:用户只能在垂直方向上调整元素大小。

  • horizontal:用户只能在水平方向上调整元素大小。

  • both:用户可以在水平和垂直方向上调整元素大小。

18、存储值并复用

CSS 变量允许我们将值存储在一个位置,并在整个样式表中复用它们。这有助于保持一致性,并使我们的 CSS 代码更易于管理和更新。

语法:

你可以使用 -- 前缀定义 CSS 变量。

例如:

:root {  --primary-color#3498db --secondary-color#2ecc71;   --font-size16px; }

  • :root: :root 选择器用于定义全局变量。它充当变量的全局作用域,使它们在整个样式表中均可访问。

  • --primary-color, --secondary-color: 这些是 CSS 变量名称。这些值会被存储,并可在样式表的任何需要的地方重复使用。

然后,我们可以在整个 CSS 中使用这些变量:

body {  font-sizevar(--font-size);  colorvar(--primary-color);}h1 {  colorvar(--secondary-color);}

  • var(–primary-color):这是在其他 CSS 属性中使用 CSS 变量的方法。

19、使用 CSS 变量的优势

  • 可重用性:变量一旦定义,即可在样式中多次重复使用,从而避免重复。

  • 可维护性:如果我们需要更改某个值(例如主色),只需在 :root 选择器中更新它,所有使用该变量的样式都会自动更新。

  • 灵活性:我们可以使用 JavaScript 动态更新 CSS 变量,或将其与媒体查询结合使用,根据屏幕尺寸或主题等条件调整样式。

20、更改输入框的默认颜色

我们可以使用 accent-color 属性更改复选框和单选按钮等输入框的默认颜色。

这有助于我们将样式与网站设计相匹配。

示例:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta http-equiv="X-UA-Compatible" content="IE=edge" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Default Color of Inputs</title>    <style>      input[type="checkbox"] {        accent-color#ff6347;        }         </style>       </head>       <body>           <label> <input type="checkbox" /> Option 1 </label>             <label> <input type="checkbox" /> Option 2 </label>            </body>          </html>

这对于在表单输入(如复选框、单选按钮和范围滑块)中保持一致的配色方案特别有用,以匹配我们网站的品牌,从而提供无缝的用户体验。

^= 属性选择器

我们可以使用 ^= 属性选择器来选择指定属性值以特定字符串开头的元素。此选择器在处理具有动态或部分属性值的元素时尤其有用。

~= 属性选择器

我们可以使用 ~= 属性选择器来选择指定属性包含完整单词的元素。这对于匹配属性值以空格分隔的元素(例如类或自定义属性)尤其有用。

~= 选择器匹配以空格分隔的列表中的精确单词。部分匹配(例如子字符串)不起作用。

现在,我们可能想知道 ~= 选择器和直接使用类名 .special 选择元素之间有什么区别。

我们可以直接使用类名选择元素,但当您想要选择具有 class 或 id 以外属性的元素时,此选择器非常有用。

例如,假设您有多个 <div> 元素,每个 <div> 都有一个 data-role 属性,该属性可以包含多个角色。

现在,我们想要选择所有 data-role 属性中包含单词 admin 的元素,那么 ~= 属性选择器可以方便地实现这一点。

<div data-role="admin editor">Admin and Editor</div><div data-role="admin viewer">Admin and Viewer</div><div data-role="viewer">Only Viewer</div>
div[data-role~="admin"] {  background-color: yellow;}

仅前两个 <div> 元素将被设置样式,因为它们的 data-role 属性包含“admin”一词。

21、:not() CSS 选择器

我们可以使用 :not() CSS 选择器来选择与指定选择器不匹配的元素。

它提供了一种从一组选定元素中排除特定元素的方法。

语法:

selector:not(specific-selector) {  /* Styles */}

  • selector:规则适用的通用选择器。

  • specific-selector:要排除的选择器。

示例:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>:not() CSS Selector</title>    <style>      div:not(.unique) {        background-color: lightblue;      }    </style>  </head>  <body>    <div>This will be light blue.</div>    <div class="unique">This will not be styled.</div>    <div>Another light blue div.</div>  </body> </html>

我们不能在 :not() 选择器内嵌套复杂的选择器,例如,组合器(> 或 +)。

:empty 伪类

我们可以使用 :empty 伪类来选择不包含任何子元素或文本内容的元素。这包括空格,因为即使元素内部有一个空格或换行符,也会导致其不再匹配 :empty。

语法:

selector:empty {  /* Styles */}

选择器:我们要定位的元素。

示例:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>:empty Pseudo-Class</title>    <style>       div:empty {         background-color: lightgray;         border1px solid black;      }     </style>  </head>   <body>      <div>   </div> <!-- Will be styled -->       <div>Not empty</div>     <!-- Will not be styled -->         <div>       </div>      <!-- Will not be styled due to whitespace -->        </body>      </html>

:has() 伪类

我们可以使用 :has() 选择器选择包含特定子元素的元素,然后对其应用样式。

这允许我们根据父元素的子元素有条件地为其添加样式。

语法:

selector:has(child-selector) {  /* Styles */}

  • selector:要设置样式的父元素。

  • child-selector:父元素必须包含才能被选中的子元素或后代元素。

示例 1:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />     <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>:has() Pseudo-Class</title>    <style>      .card:has(img) {        padding10px;        border2px solid blue;      }    </style>  </head>  <body>    <div class="card">      <p>No image here.</p>    </div>    <div class="card">      <img src="cat.jpg" alt="Cat Image" />    </div>      </body>     </html>

第二个 <div> 将被设置样式,因为它包含一个 <img> 元素。

示例 2:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />     <title>  :has() Pseudo-Class  </title>      <style>        ul:has(li.special) {        background-color: tomato;      }      </style>      </head>       <body>          <ul>              <li>Item 1</li>                <li>Item 2</li>              </ul>                <ul>                    <li class="special">Special Item</li>                   </ul>                   </body>                 </html>

第二个 <ul> 将被设置样式,因为它包含一个带有 special 类的 <li>。

浏览器支持

目前,Chrome、Edge 和 Safari 等现代浏览器支持 :has(),但旧版本或某些浏览器可能不完全支持。

性能

由于 :has() 允许基于子元素设置父元素的样式,因此对于大型 DOM 树来说,它的计算量可能很大。为了保持网站快速加载,请仅在真正需要时使用 :has()。

今天就到这里!希望这篇文章能对你有所帮助。


阅读原文:https://mp.weixin.qq.com/s/PSP_W1jhFGdtsJc1FEgZJA


该文章在 2025/6/11 9:52:49 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved