nuxt常用组件库html-validator应用剖析

打印 上一主题 下一主题

主题 829|帖子 829|积分 2487

html-validator


主要用于主动验证nuxt服务器呈现的HTML(SSR和SSG),以检测可能导致水合错误的HTML常见题目,有助于淘汰水合错误,检测常见的可访问性错误。

安装

  1. npx nuxi@latest module add html-validator
复制代码

设置


若主动更新nuxt.config.ts设置文件失败,可手动添加下面代码:

nuxt3
  1. defineNuxtConfig({
  2.    modules: [
  3.                 '@nuxtjs/html-validator',
  4.                 //其他配置项
  5.             ]
  6. })
复制代码

nuxt2.9+
  1. export default {
  2.    buildModules: ['@nuxtjs/html-validator']
  3. }
复制代码

nuxt2
  1. export default {
  2.    // Install @nuxtjs/html-validator as dependency instead of devDependency
  3.    modules: ['@nuxtjs/html-validator']
  4. }
复制代码

使用


html-validator有四个选项

1.usePrettier允许更美观地打印源代码,以便在上下文中显示错误。 

如果使用的是TailwindCSS,请考虑不要启用此功能,由于在开发模式下,prettier将难以处置惩罚剖析HTML的大小。


2.logLevel设置详细信息为verbose、warning或error。在dev中默以为verbose,在生成时为warning。 

您可以使用此设置选项来关闭控制台日志记录的No HTML validation errors found for…消息。


3.如果生成的页面有任何验证错误,failOnError将在运行nuxt generate后抛出一个错误。
 
在持续集成中很有用。


4.Options允许您传入html-validate选项,这些选项将与默认设置归并 

更多关于设置 html- validate 的信息,可以参考 官方文档。


默认设置

  1. {
  2.   htmlValidator: {
  3.     usePrettier: false,
  4.     logLevel: 'verbose',
  5.     failOnError: false,
  6.     /** A list of routes to ignore (that is, not check validity for). */
  7.     ignore: [/\.(xml|rss|json)$/],
  8.     options: {
  9.       extends: [
  10.         'html-validate:document',
  11.         'html-validate:recommended',
  12.         'html-validate:standard'
  13.       ],
  14.       rules: {
  15.         'svg-focusable': 'off',
  16.         'no-unknown-elements': 'error',
  17.         // Conflicts or not needed as we use prettier formatting
  18.         'void-style': 'off',
  19.         'no-trailing-whitespace': 'off',
  20.         // Conflict with Nuxt defaults
  21.         'require-sri': 'off',
  22.         'attribute-boolean-style': 'off',
  23.         'doctype-style': 'off',
  24.         // Unreasonable rule
  25.         'no-inline-style': 'off'
  26.       }
  27.     }
  28.   }
  29. }
复制代码



规则参考


html语法和概念


与HTML语法和概念相干的规则。

attr-delimiter克制属性键和值之间有空格
attr-spacing要求属性之间用空格分隔
close-attr克制结束标记具有属性
close-order要求元素按正确顺序关闭
element-name克制使用无效的元素名称
form-dup-name要求表单控件具有唯一的名称
map-dup-name要求‘ <map name> ’是唯一的
map-id-name要求name和id在<map>元素上匹配
no-dup-attr克制重复属性
no-dup-class克制重复的类
no-raw-characters克制使用未转义的特殊字符
no-redundant-for克制对属性使用冗余标签
script-type要求‘ <script> ’元素的有效范例
unrecognized-char-ref克制无法辨认的字符引用
valid-autocomplete要求主动完成属性有效
valid-id要求‘ id ’是一个有效的标识符



内容模型


attribute-allowed-values验证允许的属性值
attribute-misuse要求属性在正确的上下文中使用
element-permitted-content验证允许的内容
element-permitted-occurrences验证允许的元素出现次数
element-permitted-order验证所需的元素顺序
element-permitted-parent验证允许的元素父元素
element-required-ancestor验证所需的元素祖级
element-required-attributes确保设置了所需的属性
element-required-content确保必须的元素存在
input-attributes验证输入属性的使用
no-multiple-main禁用多个“<main>”
script-element为‘ <script> ’要求结束标签
void-content克制包含内容的void元素




弃用规则 
 



与已弃用或过期功能的使用相干的规则。

deprecated克制使用废弃的元素
deprecated-rule克制使用不推荐的规则
no-conditional-comment克制使用条件注释
no-deprecated-attr克制使用弃用的属性




可行性


area-alt要求‘ <area> ’元素上的替代文本
aria-hidden-body克制在“<body>”上设置“aria-hidden”
aria-label-misuse克制误用“aria-label”
empty-heading要求标题头有笔墨内容
empty-title要求标题有笔墨内容
hidden-focusable在可聚焦的元素上禁用“aria-hidden”
input-missing-label要求输入有标签
meta-refresh要求元革新具有0秒延迟
multiple-labeled-controls克制与多个控件关联的标签
no-abstract-role克制使用抽象的WAI-ARIA脚色
no-autoplay克制主动播放媒体元素
no-implicit-button-type克制隐式按钮范例
no-redundant-aria-label克制arial -label和label具有相同的文本内容
no-redundant-role克制使用冗余脚色
prefer-native-element更倾向使用原生HTML元素而不是脚色
svg-focusable要求<svg>具有可聚焦属性
tel-non-breaking要求在电话号码中使用不中断字符
text-content要求元素具有有效的文本内容
unique-landmark要求地标有唯一的名称
wcag/h30WCAG H30:提供链接文本
wcag/h32WCAG H32:提供提交按钮
wcag/h36WCAG H36:要求在图片上使用全部文本作为提交按钮
wcag/h37WCAG H37:在img元素上使用alt属性
wcag/h63WCAG H63:使用scope属性来关联标题单元格和数据单元格
wcag/h67WCAG H67:在img元素上使用空alt文本和没有标题属性
wcag/h71WCAG H71:为表单控件组提供形貌





验证


require-csp-nonce需要CSP的资源
require-sri要求资源的SRI




SEO


long-title要求标题不要有太长的笔墨




模式


attr-case要求属性名使用特定的大小写
attr-pattern要求属性匹配已设置的模式
attr-quotesRequire attribute quoting
attribute-boolean-style要求属性引用
attribute-empty-style为空属性要求特定的样式
class-pattern要求类匹配特定的模式
doctype-style需要DOCTYPE的特定案例
element-case要求元素名称使用特定的大小写
id-pattern要求id匹配特定的模式
name-pattern要求表单控件名称匹配特定的模式
no-implicit-close要求带有可选结束标签的元素显式关闭
no-implicit-input-type克制隐式输入范例
no-inline-style克制内联样式
no-self-closing克制自闭元素
no-style-tag克制使用<style>标记
no-trailing-whitespace克制尾随空格
prefer-button对于按钮,更喜好使用<button>而不是<input>
prefer-tbody更喜好把<tr>包装在<tbody>内里
void-style需要一个特定的样式来关闭void元素





文档


这些规则适用于完备的单据。

allowed-links禁用链接范例
doctype-html要求使用“html”文档范例
heading-level要求标题从h1开始并递增1
missing-doctype要求文档具有doctype
no-dup-id不允许重复的id
no-missing-references要求全部元素引用都存在
no-utf8-bom克制文档具有UTF-8 BOM





未知元素


no-unknown-elements克制使用未知元素
no-unused-disable禁用未使用的禁用指令



预设设置


HTML-validate带有一些预定义的预设。

示例 .htmlvalidate.json
  1. {
  2.   "extends": ["html-validate:PRESET"]
  3. }
复制代码

示例 .htmlvalidate.cjs
  1. const { defineConfig } = require("html-validate");
  2. module.exports = defineConfig({
  3.   extends: ["html-validate:PRESET"],
  4. });
复制代码

示例 .htmlvalidate.mjs
  1. import { defineConfig } from "html-validate";
  2. export default defineConfig({
  3.   extends: ["html-validate:PRESET"],
  4. });
复制代码

可以设置多个预设,并将按照它们出现在“extends”中的顺序启用。



预设范例


html-validate:recommended

这是默认的预设,支持大多数规则,包括标准验证、WCAG和最佳实践。它是其他预设的超集。


html-validate:standard

启用与根据WHATWG HTML标准(生活标准)举行验证相干的规则。
如果您想要类似于Nu Html查抄器和类似工具的验证,请使用此预设。


html-validate:prettier

自:v7.18.0 
如果您正在使用Prettier来格式化HTML标记,则可以使用此预设来禁用诸如void-style之类的抵牾规则。 
 
这个预设应该与另一个预设(如html-validate:)结合使用,由于它只禁用规则。


html-validate:a11y

启用与可访问性相干的规则。大多数规则(但不是全部已启用的规则)都与WCAG服从性有关。它本身不会验证文档/模板本身是否有效,而只会在发现可访问性题目时举行验证。 
 
这个预设应该与html-validate:standard一起使用,以确保文档结构是有效的(WCAG的要求),如果可能的话,还应该与html-validate:document(确保引用是有效的,等等)一起使用。


html-validate:browser

自:8.24.0 
如果要从浏览器中获取源代码,请使用此预设来禁用受浏览器规范化影响的规则,比方属性布尔样式。这些规则大多只是表面上的。 
 
这个预设应该与另一个预设(如html-validate:)结合使用,由于它只禁用规则。


html-validate:document

启用需要验证完备文档的规则,即不需要验证部门模板。示例包括缺少文档范例和无效引用。 
 
将此预设与其他预设一起使用以实现全覆盖。这个预设是由cypress-html-validate和protractor-html-validate等插件启用的。



2.@nuxtjs/i18n


安装


  1. npx nuxi@latest module add i18n
复制代码

设置


  1. {
  2.   modules: [
  3.     '@nuxtjs/i18n',
  4.   ],
  5.   i18n: {
  6.     locales: [
  7.       { code: 'en', language: 'en-US' },
  8.       { code: 'fr', language: 'fr-FR' }
  9.     ],
  10.     defaultLocale: 'en',
  11.   }
  12. }
复制代码

实战示例


  1. import process from 'node:process'
  2. const isDev = process.env.NODE_ENV === 'development'
  3. // const apiBaseUrl = 'http://localhost:3001'
  4. const apiBaseUrl = 'https://movies-proxy.vercel.app'
  5. export default defineNuxtConfig({
  6.   modules: [
  7.     '@vueuse/nuxt',
  8.     '@unocss/nuxt',
  9.     '@nuxt/image',
  10.     '@nuxtjs/i18n',
  11.     '@nuxtjs/html-validator',
  12.   ],
  13.   experimental: {
  14.     inlineSSRStyles: false,
  15.     viewTransition: true,
  16.     renderJsonPayloads: true,
  17.   },
  18.   routeRules: {
  19.     '/**': isDev ? {} : { cache: { swr: true, maxAge: 120, staleMaxAge: 60, headersOnly: true } },
  20.   },
  21.   runtimeConfig: {
  22.     public: {
  23.       apiBaseUrl,
  24.     },
  25.   },
  26.   devtools: {
  27.     enabled: true,
  28.   },
  29.   image: {
  30.     provider: 'proxy',
  31.     providers: {
  32.       proxy: {
  33.         provider: 'ipx',
  34.         options: {
  35.           baseURL: `${apiBaseUrl}/ipx`,
  36.         },
  37.       },
  38.     },
  39.   },
  40.   nitro: {
  41.     routeRules: {
  42.       '/**': { isr: false },
  43.     },
  44.   },
  45.   i18n: {
  46.     detectBrowserLanguage: {
  47.       useCookie: true,
  48.       fallbackLocale: 'en',
  49.     },
  50.     strategy: 'no_prefix',
  51.     locales: [
  52.       {
  53.         code: 'en',
  54.         name: 'English',
  55.         file: 'en.json',
  56.       },
  57.       {
  58.         code: 'fa-IR',
  59.         name: 'فارسی',
  60.         file: 'fa-IR.json',
  61.       },
  62.       {
  63.         code: 'de-DE',
  64.         name: 'Deutsch',
  65.         file: 'de-DE.json',
  66.       },
  67.       {
  68.         code: 'es-ES',
  69.         name: 'Español',
  70.         file: 'es-ES.json',
  71.       },
  72.       {
  73.         code: 'it',
  74.         name: 'Italiano',
  75.         file: 'it.json',
  76.       },
  77.       {
  78.         code: 'ja',
  79.         name: '日本語',
  80.         file: 'ja.json',
  81.       },
  82.       {
  83.         code: 'zh-CN',
  84.         name: '简体中文',
  85.         file: 'zh-CN.json',
  86.       },
  87.       {
  88.         code: 'pt-PT',
  89.         name: 'Português',
  90.         file: 'pt-PT.json',
  91.       },
  92.       {
  93.         code: 'pt-BR',
  94.         name: 'Português do Brasil',
  95.         file: 'pt-BR.json',
  96.       },
  97.       {
  98.         code: 'ru-RU',
  99.         name: 'Русский',
  100.         file: 'ru-RU.json',
  101.       },
  102.       {
  103.         code: 'fr-FR',
  104.         name: 'Français',
  105.         file: 'fr-FR.json',
  106.       },
  107.       {
  108.         code: 'uk-UA',
  109.         name: 'Українська',
  110.         file: 'uk-UA.json',
  111.       },
  112.       {
  113.         code: 'vi',
  114.         name: 'Tiếng Việt',
  115.         file: 'vi.json',
  116.       },
  117.     ],
  118.     lazy: true,
  119.     langDir: 'internationalization',
  120.     defaultLocale: 'en',
  121.   },
  122.   htmlValidator: {
  123.     usePrettier: false,
  124.     logLevel: 'verbose',
  125.     failOnError: false,
  126.     /** A list of routes to ignore (that is, not check validity for). */
  127.     ignore: [/\.(xml|rss|json)$/],
  128.     options: {
  129.       extends: [
  130.         'html-validate:document',
  131.         'html-validate:recommended',
  132.         'html-validate:standard'
  133.       ],
  134.       rules: {
  135.         'svg-focusable': 'off',
  136.         'no-unknown-elements': 'error',
  137.         // Conflicts or not needed as we use prettier formatting
  138.         'void-style': 'off',
  139.         'no-trailing-whitespace': 'off',
  140.         // Conflict with Nuxt defaults
  141.         'require-sri': 'off',
  142.         'attribute-boolean-style': 'off',
  143.         'doctype-style': 'off',
  144.         // Unreasonable rule
  145.         'no-inline-style': 'off'
  146.       }
  147.     }
  148.   },
  149. })
复制代码



3.@nuxt/image


为nuxt优化的图像,具有渐进式处置惩罚,延迟加载,支持图像CDN,实时调整大小和提供者支持。

安装


  1. npx nuxi@latest module add image
复制代码

nuxt2 可参考 v0文档

其他相干命令


启用corepack enable
  1. corepack enable
复制代码

安装依靠项
  1. pnpm install
复制代码

生成范例存根
  1. pnpm dev:prepare
复制代码

开发模式
  1. pnpm dev
复制代码

测试添加到test/目录中
  1. pnpm test
复制代码

查抄代码风格
  1. pnpm lint
复制代码

在创建PR之前
  1. pnpm build
复制代码
确保构建并没有报错

开发模式启动文档
  1. pnpm docs:dev
复制代码

打开http://localhost:3000在浏览器中查看。

更新docs/content/目录下的文档内容。


设置


在nuxt.config.ts添加模块支持
  1. export default defineNuxtConfig({
  2.   modules: [
  3.     '@nuxt/image',
  4.   ]
  5. })
复制代码


边缘通道更新


在package.json 添加如下


删除lockfile  (package-lock.json, yarn.lock, or pnpm-lock.yaml) 并重新安装依靠项。


退出边缘通道




删除lockfile  (package-lock.json, yarn.lock, or pnpm-lock.yaml) 并重新安装依靠项。


升级最新版本

  1. pnpm up @nuxt/image
复制代码

重新创建锁文件

  1. npx nuxt@latest upgrade --force
复制代码

要设置image模块并自定义它的运动,你可以使用next .config中的image属性:

设置参数


示例
  1. export default defineNuxtConfig({
  2.   image: {
  3.     // Options
  4.   }
  5. })
复制代码

详细参数可参考上文实战示例,下文详细表明参数信息:

inject


默认情况下,nuxt Image v1接纳可组合的方法。如果不使用这些组件,就不会向包中添加额外的代码。但是,如果您盼望全局初始化将在整个应用程序中可用的 $img 帮助,则可以这样做。

示例

  1. export default defineNuxtConfig({
  2.   image: {
  3.     inject: true
  4.   }
  5. })
复制代码



quality


生成图像的质量。 
 
您还可以在组件级别使用质量属性覆盖此选项。

示例

  1. export default defineNuxtConfig({
  2.   image: {
  3.     quality: 80,
  4.   }
  5. })
复制代码



format


Default: ['webp']

您可以使用该选项为<NuxtPicture>使用的图像设置默认格式。支持的格式有webp、avif、jpeg、jpg、png和gif。

格式的顺序很重要,由于浏览器支持的第一种格式将被使用。您可以通报多个值,如['avif', 'webp']。

还可以通过使用format prop在组件级别重写此选项。

示例
  1. export default defineNuxtConfig({
  2.   image: {
  3.     format: ['webp']
  4.   }
  5. })
复制代码



screens


预定义屏幕尺寸的列表。 

 
这些大小将用于生成图像的调整大小和优化版本(比方,使用大小修改器)。

示例
  1. export default defineNuxtConfig({
  2.   image: {
  3.     // The screen sizes predefined by `@nuxt/image`:
  4.     screens: {
  5.       'xs': 320,
  6.       'sm': 640,
  7.       'md': 768,
  8.       'lg': 1024,
  9.       'xl': 1280,
  10.       'xxl': 1536,
  11.       '2xl': 1536
  12.     },
  13.   }
  14. })
复制代码

与Tailwind CSS共享相同的命名和大小,只是增长了xs和xxl(为了向后兼容)。



domains


为了在外部网站上启用图像优化,可以指定允许优化的域。此选项将用于检测是否应该优化远程映像。这是确保外部url不会被滥用所必须的。

示例
  1. export default defineNuxtConfig({
  2.   image: {
  3.     domains: ['nuxtjs.org']
  4.   }
  5. })
复制代码



presets


预设是项目标预定义设置聚集。预设将帮助您统一整个项目中的图像。

示例 nuxt.config.ts
  1. export default defineNuxtConfig({
  2.   image: {
  3.     presets: {
  4.       avatar: {
  5.         modifiers: {
  6.           format: 'jpg',
  7.           width: 50,
  8.           height: 50
  9.         }
  10.       }
  11.     }
  12.   }
  13. })
复制代码

示例 index.vue
  1. <template>
  2.   <NuxtImg preset="avatar" src="/nuxt-icon.png" />
  3. </template>
复制代码



providers


为了创建和使用自定义提供程序,您需要使用providers选项并定义自定义提供程序。

示例 nuxt.config.ts
  1. export default defineNuxtConfig({
  2.   image: {
  3.     providers: {
  4.       random: {
  5.         provider: '~/providers/random',
  6.         options: {}
  7.       }
  8.     }
  9.   }
  10. })
复制代码

示例 index.vue
  1. <template>
  2.   <NuxtImg provider="random" src="main.png" width="300" height="169" />
  3. </template>
复制代码



provider


默认值:ipx(或ipxStatic,如果与静态nitro预设一起使用,比方运行nuxt generate) 
 
我们可以指定在组件中没有指定或调用$img时使用的默认提供商。

示例 nuxt.config.ts
  1. export default defineNuxtConfig({
  2.   image: {
  3.     provider: 'twicpics',
  4.     twicpics: {
  5.       baseURL: 'https://nuxt-demo.twic.pics'
  6.     }
  7.   }
  8. })
复制代码


modifiers


您可以为所选的提供程序设置默认修饰符。

示例
  1. export default defineNuxtConfig({
  2.   image: {
  3.     provider: 'cloudinary',
  4.     cloudinary: {
  5.       baseURL: 'https://res.cloudinary.com/<company>/image/fetch/',
  6.       modifiers: {
  7.         effect: 'sharpen:100',
  8.         quality: 'auto:best',
  9.       }
  10.     }
  11.   }
  12. })
复制代码



densities


Default: [1, 2]

指定一个值来处置惩罚devicePixelRatio > 1(这些是带有视网膜显示和其他的装备)。您必须指定要为哪个devicePixelRatio值调整图像。 
 
你可以在MDN上阅读更多关于devicePixelRatio的信息。

示例 nuxt.config.ts
  1. export default defineNuxtConfig({
  2.   image: {
  3.     densities: [1, 2, 3],
  4.   }
  5. })
复制代码



dir


Default: public

这个选项允许您在使用ipx或ipxStatic提供程序时指定源映像的位置。 
 
比方,你可能盼望源图像在assets/images目录中,而不是默认的公共目录中,这样源图像就不会被复制到dist中并被部署:

示例 nuxt.config.ts
  1. export default defineNuxtConfig({
  2.   image: {
  3.     dir: 'assets/images'
  4.   }
  5. })
复制代码

   注: 
 
对于ipxStatic提供程序,如果在生成过程中没有抓取图像(不可访问的模式、页面或动态运行时大小),将dir从public更改将导致404错误。 
  
对于ipx提供程序,也要确保部署自定义的目录。 
  
对于某些提供程序(如vercel),不支持使用public/以外的目录作为资产,由于调整大小发生在运行时(而不是构建/生成时),并且从public/目录(部署URL)获取源代码。
  


alias


这个选项允许你为src指定别名。 
 
当使用默认的ipx提供程序时,URL别名会在服务器端收缩。这对于优化外部url而不将它们包含在HTML中特别有用。 
 
当使用其他提供程序时,别名将在运行时剖析并包含在HTML中。(只是用法简化了)

示例 nuxt.config.ts
  1. export default defineNuxtConfig({
  2.   image: {
  3.     domains: [
  4.       'images.unsplash.com'
  5.     ],
  6.     alias: {
  7.       unsplash: 'https://images.unsplash.com'
  8.     }
  9.   }
  10. })
复制代码

示例 使用别名之前
  1. <NuxtImg src="https://images.unsplash.com/<id>" />
复制代码

生成
  1. <img src="/_ipx/https://images.unsplash.com/<id>">
复制代码

示例 在使用别名之后
  1. <NuxtImg src="/unsplash/<id>" />
复制代码

生成
  1. <img src="/_ipx/unsplash/<id>" />
复制代码



Providers


nuxt Image支持多个提供程序以实现高性能。

简介 


 
提供者是next Image和第三方图像转换服务之间的集成。每个提供者负责为该图像转换服务生成正确的url。 

 
next Image可以设置为使用任何外部图像转换服务。签出侧栏以获取预设置的提供程序列表。 

 
如果您正在探求不受支持的特定提供程序,您可以创建本身的提供程序。 

 
next Image将主动优化<NuxtImg>或<NuxtPicture>源,并继承指定目标的全部选项,除了特定于其他提供程序的修饰符。




默认提供者 


 
nuxt Image的默认优化器和提供程序是ipx。任何一个选项都可以在没有任何设置的情况下使用。

当地图片 


 
图像应该存储在项目标public/目录中。 
 
比方,当使用 <NuxtImg src="/nuxt-icon.png" />
时,它应该放在public/文件夹下的 public/nuxt-icon.png 路径下。 
 
 
注意:存储在assets/目录中的图像不会被nuxt Image处置惩罚,由于这些图像是由您的打包器(如Vite或webpack)管理的。



远程图像 


 
使用默认提供程序,您还可以优化外部url。为此,您需要将它们添加到 domains 选项中。 
 

还可以通过将 NUXT_IMAGE_DOMAINS 环境变量设置为逗号分隔的域列表来为远程映像添加域。

示例 
  1. NUXT_IMAGE_DOMAINS="example.com,yourdomain.com"
复制代码



环境检测 


 
您可以使用 NUXT_IMAGE_PROVIDER 环境变量设置默认提供程序。 
 
主动检测到的提供者:

Vercel - 优化图像在Vercel的边缘网络,下文单独介绍



自定义服务提供方程序 


 
可以定义本身的提供程序,详细相识如何创建自定义提供程序。

下文单独介绍



 NuxtImg


相识如何使用和设置next Image组件。

简介


<NuxtImg>是本机<img>标记的临时替代品。 
   
 
使用内置提供程序来优化当地和远程映像 
  
将src转换为提供程序优化的url 
  
根据宽度和高度主动调整图像大小 
  
提供大小选项时生成响应大小 
  
支持本机延迟加载以及其他<img>属性
  


用法 


 
<NuxtImg>直接输出原生img标记(没有任何包装器)。像使用<img>标签一样使用它:

示例 
  1. <NuxtImg src="/nuxt-icon.png" />
复制代码

输出
  1. <img src="/nuxt-icon.png" />
复制代码

使用默认的提供程序,您应该将 /nuxt-icon.png 放在 public/ 目录中,以便让上面的示例工作。



元素


custom


自定义道具决定了<NuxtImg>应该作为一个简朴的<img>元素呈现照旧仅仅作为自定义呈现的提供者。当设置为true时,它禁用默认呈现运动,允许完全控制图像的显示方式。这对于实现自定义功能(如占位符)非常有用。 
 
当使用自定义道具时,<NuxtImg>将必要的数据和属性通报给其默认槽。你可以通过v-slot指令访问以下值: 
 
imgAttrs: <img>元素的属性(比方,alt, width, height, srcset, sizes)。 

src:计算图像源URL。 

isLoaded:一个布尔值,指示图像是否已加载。 

示例使用
  1. <nuxt-img
  2.   src="/images/nuxt.png"
  3.   alt="image"
  4.   width="400"
  5.   height="400"
  6.   :custom="true"
  7.   v-slot="{ src, isLoaded, imgAttrs }"
  8. >
  9.   <!-- Show the actual image when loaded -->
  10.   <img
  11.     v-if="isLoaded"
  12.     v-bind="imgAttrs"
  13.     :src="src"
  14.   />
  15.   <!-- Show a placeholder while loading -->
  16.   <img
  17.     v-else
  18.     src="https://placehold.co/400x400"
  19.     alt="placeholder"
  20.   />
  21. </nuxt-img>
复制代码

这种方法确保了自定义呈现场景的机动性,而<NuxtImg>继承在幕后处置惩罚图像优化和数据供应。



src 
 



镜像文件路径 
 
SRC应该是公共/目录中静态图像的绝对路径的形式。否则,提供程序期望的以/或URL开头的路径。

示例
  1. <NuxtImg src="/nuxt.png" />
复制代码

为了在src中使用外部url举行图像优化,我们需要使用domains选项将它们列入白名单。



width / height


指定图像的宽度/高度。 
 
使用所需的宽度/高度的静态大小的图像,如图标或头像 

响应式图像使用原始图像的宽度/高度(当使用大小时)



alt


尽管next Image没有应用任何特殊处置惩罚,但值得一提的是alt属性。它是一个当地全局属性,如果不能显示图像,则为图像指定替代文本。 

 
它应该总是被提供。 
   
 
如果图像包含信息,则文本应该形貌图像 
  
如果图像位于<a>元素中,文本应该表明链接的位置 
  
如果图像仅用于装饰,则使用alt=“”
  
  
eg
  1. <NuxtImg src="/nuxt.png" alt="My image file description" />
复制代码



sizes


指定响应大小。 
 
这是一个以空格分隔的屏幕大小/宽度对列表。在上文nuxt.config.ts文件默认设置可以参看默认大小。 
 
默认情况下,next生成响应优先大小。 
 
如果你省略了屏幕尺寸前缀(比如sm:),那么这个尺寸就是图像的“默认”尺寸。否则,next将选择最小的大小作为图像的默认大小。 

这个默认大小一直使用到下一个指定的屏幕宽度,依此类推。每个指定的尺寸对都适用-以是md:400px意味着图像将在md屏幕上的大小为400px。 

例子:
  1. <NuxtImg
  2.   src="/logos/nuxt.png"
  3.   sizes="100vw sm:50vw md:400px"
  4. />
复制代码



densities


为增长像素密度的屏幕生成特殊版本的图像。 
 
例子:
  1. <NuxtImg
  2.   src="/logos/nuxt.png"
  3.   height="50"
  4.   densities="x1 x2"
  5. />
  6. <!--
  7. <img
  8.   src="/_ipx/w_50/logos/nuxt.png"
  9.   srcset="/_ipx/w_100/logos/nuxt.png x2"
  10. />
  11. -->
复制代码



placeholder


在实际图像完全加载之前显示占位符图像。 

 
您还可以使用自定义道具制作任何您想要的占位符。 

 
占位符道具可以是字符串、布尔值、数字或数组。每种情况的用法如下所示。

  1. <!-- 自动生成一个基于原始图像的占位符 -->
  2. <NuxtImg src="/nuxt.png" placeholder />
  3. <!-- 为自动生成的占位符 设置宽度、高度  -->
  4. <NuxtImg src="/nuxt.png" :placeholder="[50, 25]" />
  5. <!-- 为自动生成的占位符 设置宽度、高度、质量和模糊  -->
  6. <NuxtImg src="/nuxt.png" :placeholder="[50, 25, 75, 5]" />
  7. <!-- 设置自动生成占位符的宽度和高度,图像将是一个正方形 -->
  8. <NuxtImg src="/nuxt.png" :placeholder="15" />
  9. <!-- 提供你自己的图片 -->
  10. <NuxtImg src="/nuxt.png" placeholder="./placeholder.png" />
复制代码

你也可以利用useImage()来生成一个基于原始图像的占位符图像,如果源是SVG或者你想更好地控制修饰符,这是有用的:

  1. <script setup>
  2. const img = useImage()
  3. </script>
  4. <template>
  5.   <NuxtImg :placeholder="img(`/nuxt.svg`, { h: 10, f: 'png', blur: 2, q: 50 })" src="/nuxt.svg`" />
  6. </template>
复制代码



placeholder-class


在使用占位符时,可以使用占位符类将类应用于原始的底层<img>元素(在呈现占位符时)。

  1. <!-- 对原始图像应用静态类 -->
  2. <NuxtImg src="/nuxt.png" placeholder placeholder-class="custom" />
  3. <!-- 对原始图像应用动态类 -->
  4. <NuxtImg src="/nuxt.png" placeholder :placeholder-class="custom" />
复制代码

如果你只需要对加载的图像应用一些CSS,你可以这样做:
  1. img:not(.my-placeholder-class) {
  2.   /* styles here */
  3. }
复制代码



provider


使用其他提供商,而不是在nuxt .config中指定的默认提供商选项 

 
示例 nuxt.config.ts
  1. export default defineNuxtConfig({
  2.   image: {
  3.     cloudinary: {
  4.       baseURL: 'https://res.cloudinary.com/nuxt/image/upload/',
  5.     },
  6.   },
  7. })
复制代码

index.vue
  1. <template>
  2.   <NuxtImg
  3.     provider="cloudinary"
  4.     src="/remote/nuxt-org/blog/going-full-static/main.png"
  5.     width="300"
  6.     height="169"
  7.   />
  8. </template>
复制代码



preset


预设是预定义的图像修改器集,可用于在项目中创建统一形式的图像。

我们可以使用next .config中的预置选项来定义预置

示例 nuxt.config.ts
  1. export default defineNuxtConfig({
  2.   image: {
  3.     presets: {
  4.       cover: {
  5.         modifiers: {
  6.           fit: 'cover',
  7.           format: 'jpg',
  8.           width: 300,
  9.           height: 300,
  10.         },
  11.       },
  12.     },
  13.   },
  14. })
复制代码

index.vue
  1. <template>
  2.   <NuxtImg preset="cover" src="/nuxt-icon.png" />
  3. </template>
复制代码



format


如果您想以特定格式提供图像,请使用此道具。

示例
  1. <NuxtImg format="webp" src="/nuxt-icon.png" ... />
复制代码

可用的格式是webp, avif, jpeg, jpg, png, gif和svg。如果没有指定格式,它将依照默认的图像格式。



quality


生成图像的质量。

  1. <NuxtImg src="/nuxt.jpg" quality="80" width="200" height="100" />
复制代码



fit


fit属性指定图像的大小。此属性可以使用五个标准值。

   cover: (默认)保存宽高比,确保图像覆盖两个提供的尺寸裁剪/剪辑以适应。
  
contain:保存长宽比,在必要时使用“letterboxing”包含在两个提供的维度中。
  
fill: 忽略输入的宽高比,并拉伸到两个提供的尺寸。
  
inside: 保存宽高比,将图像调整为尽可能大,同时确保其尺寸小于或即是指定的两个。
  
outside: 保存宽高比,将图像调整为尽可能小,同时确保其尺寸大于或即是指定的尺寸。
  
示例
  1. <NuxtImg fit="cover" src="/nuxt-icon.png" width="200" height="100" />
复制代码

一些提供程序支持其他值。



modifiers


除了标准修饰符之外,每个提供程序可能还有本身的附加修饰符。由于这些修饰符依靠于提供程序,因此请参阅其文档以相识可以使用哪些修饰符。 
 
使用modifiers道具可以使用这些转换中的任何一种。

示例
  1. <NuxtImg
  2.   provider="cloudinary"
  3.   src="/remote/nuxt-org/blog/going-full-static/main.png"
  4.   width="300"
  5.   height="169"
  6.   :modifiers="{ roundCorner: '0:100' }"
  7. />
复制代码



preload


如果您想预加载图像,请使用此道具。这将在页面头部放置一个相应的 link 链接标记。

  1. <NuxtImg preload src="/nuxt-icon.png" />
复制代码



loading


这是一个原生属性,它向浏览器提供了一个提示,告诉浏览器如那里理视图外的图像加载。自2022年3月起,全部主流浏览器的最新版本都支持它。 
 
设置loading="lazy"来延迟图像的加载,直到它出现在视窗中。

示例
  1. <NuxtImg src="/nuxt-icon.png" loading="lazy" />
复制代码



nonce


这是一个当地全局属性,它定义了一个加密nonce(一次使用的数字),内容安全策略可以使用它来确定是否允许对给定元素举行给定的获取。提供nonce允许您克制使用CSP不安全的内联指令,该指令将允许列出全部内联脚本或样式。

示例
  1. <NuxtImg src="/nuxt-icon.png" :nonce="nonce" />
  2. <script lang="ts" setup>
  3. // useNonce不是由next /image提供的,但可能是
  4. // 由另一个模块提供,例如nuxt-security
  5. const nonce = useNonce()
  6. </script>
复制代码



Events


由<NuxtImg>和<NuxtPicture>组件包含的<img>元素发出的当地事件被重新发出,并且可以被监听。 
 
示例:监听来自<NuxtImg>的本机onLoad事件

  1. <NuxtImg
  2.   src="/images/colors.jpg"
  3.   width="500"
  4.   height="500"
  5.   @load="doSomethingOnLoad"
  6. />
复制代码


晚点再更新



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表