当前位置: 首页 > 知识库问答 >
问题:

如何在前端项目中简单优雅的使用 svg 图标并且适应排版?

佟高澹
2024-01-24

如何在前端项目中简单优雅的使用 svg 图标并且适应排版?

我 clone 了一个项目改改改 https://github.com/zauberzeug/nicegui

图片.png

原版项目右上角是一个 github 的图标:https://github.com/zauberzeug/nicegui/blob/main/website/static/github.svg

因为我的项目是 gitlab 的,所以我想把 github.svg 改成 gitlab.svg

所以我去 aliyun 的 icon 站点找了一个 gitlab 图标:https://www.iconfont.cn/search/index?searchType=icon&q=gitlab%20 并且复制了它的 svg 代码

图片.png

<svg t="1706022839926" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4231" width="200" height="200"><path d="M932.317184 567.76704L885.10464 422.46144l-93.57312-287.997952c-4.8128-14.81728-25.776128-14.81728-30.590976 0L667.36128 422.459392H356.62848L263.051264 134.46144c-4.8128-14.81728-25.776128-14.81728-30.593024 0l-93.57312 287.997952-47.210496 145.309696a32.165888 32.165888 0 0 0 11.68384 35.96288l408.6272 296.890368L920.61696 603.734016c11.272192-8.192 15.990784-22.71232 11.68384-35.964928" fill="#FC6D26" p-id="4232"></path><path d="M512.002048 900.62848l155.365376-478.171136H356.634624z" fill="#E24329" p-id="4233"></path><path d="M512.004096 900.62848L356.63872 422.47168H138.901504z" fill="#FC6D26" p-id="4234"></path><path d="M138.891264 422.465536l-47.214592 145.309696a32.16384 32.16384 0 0 0 11.685888 35.96288L511.991808 900.62848z" fill="#FCA326" p-id="4235"></path><path d="M138.893312 422.459392h217.737216L263.053312 134.46144c-4.8128-14.819328-25.778176-14.819328-30.590976 0z" fill="#E24329" p-id="4236"></path><path d="M512.002048 900.62848l155.365376-478.154752H885.10464z" fill="#FC6D26" p-id="4237"></path><path d="M885.11488 422.465536l47.214592 145.309696a32.16384 32.16384 0 0 1-11.685888 35.96288L512.014336 900.62848z" fill="#FCA326" p-id="4238"></path><path d="M885.096448 422.459392H667.36128l93.577216-287.997952c4.814848-14.819328 25.778176-14.819328 30.590976 0z" fill="#E24329" p-id="4239"></path></svg>

然后复制到我的项目中使用,但是这个 svg 图标变得非常的大!!!

图片.png

我只想简单优雅的使用,最好可以无脑自适应,要怎么做呢?

共有5个答案

鞠安民
2024-01-24

看下旁边其他几个icon图标有没有使用类什么的,代码中有没有设置样式,给.icon-font{font-size:24px}之类的,或者下载的时候选择下大小

段干靖
2024-01-24

直接设置大小就好了。比较常用的方法一般是给这个 svg 设置一个 width: 1em; height: 1em; 然后结合 font-size 去改变大小。

岳茂
2024-01-24

阿里云导出是可以指定大小的,把200改成24就可以了

淳于星宇
2024-01-24

不考虑一下 iconify 吗?

赵嘉赐
2024-01-24

SVG 图标在前端项目中自适应排版的关键在于利用其原始尺寸和 CSS 的特性。在大多数情况下,将 SVG 作为背景图像或内联元素时,都需要通过特定的 CSS 规则来确保其自适应。

以下是实现 SVG 图标自适应排版的一种常见方法:

  1. 设置图标大小:
    你需要明确设置 SVG 的尺寸,可以通过 CSS 来完成。widthheight 属性决定了图标的大小。如果图标的大小没有设置,它可能会变得非常大或非常小。

    .gitlab-icon {    width: 1em;  /* 或其他适当的值 */    height: 1em; /* 或其他适当的值 */}
  2. 使用视图单位:
    使用相对单位如 emrem 可以使图标大小相对于其父元素或根元素变化,从而实现自适应排版。你也可以使用 vwvh 单位,它们分别表示视口宽度和视口高度的百分比。
  3. 内联 SVG:
    将 SVG 直接嵌入 HTML 文档中,而不是作为外部图像资源。这样可以方便地通过 CSS 控制其样式,包括尺寸、颜色等。
  4. 使用 object-fit 属性:
    如果你将 SVG 作为背景图像或内联元素,可以使用 object-fit 属性来控制如何适应其容器的大小。例如,你可以设置 object-fit: contain; 以保持图标的原始纵横比并完全适应其容器,无论容器的尺寸如何变化。
  5. SVG Viewbox 和 preserveAspectRatio:
    通过设置 SVG 的 viewBox 属性并使用 preserveAspectRatio 来控制图标的缩放和对齐方式。这样可以在保持图标原始比例的同时适应不同的大小和容器。
  6. 调整颜色和填充:
    如果你需要调整图标颜色,可以通过 CSS 的 fill 属性来实现。如果图标是一个路径,你可能需要设置 fill 属性为颜色值;如果图标是形状,可能需要设置形状元素的 fill 属性。同样地,可以调整 stroke 属性来改变边框颜色。
  7. 使用图标字体:
    另一种方法是使用图标字体,如 Font Awesome、Material Icons 等。这些字体允许你通过简单的字符引用(如 <i class="fas fa-gitlab"></i>)来使用图标,并利用字体属性来实现自适应排版。这种方法相对简单且易于集成。

示例 CSS 设置:

.gitlab-icon {   width: 1em;   height: 1em;   fill: currentColor; /* 设置颜色 */}

示例 HTML 使用:

<svg class="gitlab-icon" viewBox="0 0 1024 1024"> <!-- viewBox 根据图标实际尺寸设置 -->   <!-- 使用路径定义图标 -->   <path d="..." /></svg>
 类似资料:
  • info Lavas Basic 模板并不包含此功能 在项目中有两种使用图标的方式,可以同时使用: 使用 material 字体文件 引入自定义的 SVG 文件 字体文件 material 图标能够满足大部分应用场景: 我们已经引入了 material 字体文件和所需样式表,直接使用 vuetify 中 Icons 组件即可,基本方法如下: <v-icon>home</v-icon> 更多使用方

  • 问题内容: 我已经看到了很多用于svg on react的库,但是没有一个给我如何在react组件中导入.svg的代码,我已经看到了谈论将svg代码带入反应而不是使用.svg图标作为图像进行显示的代码。在用户界面中。 请告诉我是否有嵌入图标的方法。 问题答案: 如果图像是远程托管的,则可以直接将扩展名与标记一起使用。 这是小提琴:http : //codepen.io/srinivasdamam-

  • 问题内容: 我正在使用sqlite4java启动一个简单的Java测试项目,并使用Java进行构建。 我可以轻松地下载核心sqlite4java库,但是我不确定哪种最好的方式(任意!)来获取下载本地库并将它们放在正确位置的好处。 这是我的build.gradle文件: 但是,当我运行一个简单的测试时,我得到: (我是从IntelliJ内部构建的,但是我正在使用gradle构建选项-因此,我认为运行

  • 如何优雅地覆盖antdesign的样式? 我想要把将这个button的border去掉(只是这个button,不影响其他button的样式)。 className or style都不行,Button组件没有提供这两个prop。倒是有一个classNames不知道是干什么的。 在index.css中添加以下规则,倒是可以去除Button上的border但是会影响所有的Button样式。 通过Con

  • 本文向大家介绍在 React、Vue项目中使用SVG的方法,包括了在 React、Vue项目中使用SVG的方法的使用技巧和注意事项,需要的朋友参考一下 在一些现代的扁平化设计网站,特别是移动端网站,经常会包含许多简单而清晰的小图标,例如网站图标、用户的默认头像、移动端网页首页底部固定的切换栏等,这些小图标一般都是由美工做好,可能会放到精灵图上,前端再进行裁切展示。 而实际上,这些简单的小图标完全没

  • 如何优雅地使用react做一个wordle小游戏? wordle游戏wiki 在线wordle游戏 我用reat + tailwindcss实现了该游戏,但是比较纠结什么什么时候该使用React.useCallback,自定义的hooks是否合理? 我写了一个自定义的hook,用来实现数据持久化(刷新之后仍可以保持刷新之前的游戏状态) 这里的name,initial永远都不会变化。 初始状态先从l