Angular 组件的自定义 CSS 属性

2023-12-27

我有一个封装图片轮播的 Angular 组件。如果使用 :host 选择器使自己成为一个 Flexbox,并使用 ngFor 为通过 @Input 属性传递给它的图片数组中的每个图片重复一个 img 标签。

我有两个相关的问题。

1)我想让图片的样式设置为固定的高度或宽度。 2)我想在imgs上设置margin-right和margin-bottom以允许图片间隔。

棘手的部分是,我希望这些设置在主机模板中确定,而不是在轮播模板中确定,以便它们可以根据特定页面的需求而变化。

我已经使用自定义 css 属性让它工作了,如下所示:

图像列表CSS:

:host {
    display: flex;
    flex-flow: row wrap;
    justify-content: flex-start;
    align-items: flex-start;
}

img {
    height: var(--pictureMaxHeight,-1);    
    margin-right: var(--pictureSpacing,0);
    margin-bottom: var(--pictureSpacing,0);
}

调用模板CSS:

image-list {
   --pictureMaxHeight: 300px;
   --pictureSpacing: 0.5em;
   justify-content: center;
}

我收到以下警告:

忽略自定义属性:范围不限于顶级 :root 元素 (image-list { ... --pictureMaxHeight: ... })

全文:

警告 ./src/app/pages/image-list-test/image-list-test.component.css(已发出 值而不是错误的实例)postcss-custom-properties: /home/用户名/wwwroot/src/app/pages/image-list-test/image-list-test.component.css:2:5: 忽略自定义属性:范围不限于顶级 :root 元素 (图像列表 { ... --pictureMaxHeight: ... }) NonErrorEmissedError: (发出值而不是错误实例) postcss 自定义属性: /home/用户名/wwwroot/src/app/pages/image-list-test/image-list-test.component.css:2:5: 忽略自定义属性:范围不限于顶级 :root 元素 (图像列表 { ... --pictureMaxHeight: ... }) 在 Object.emitWarning (/home/username/wwwroot/node_modules/webpack/lib/NormalModule.js:117:16) 在 result.warnings.forEach (/home/username/wwwroot/node_modules/postcss-loader/lib/index.js:149:49) at Array.forEach(本机) 在 postcss.process.then (/home/username/wwwroot/node_modules/postcss-loader/lib/index.js:149:27) @ ./src/app/pages/image-list-test/image-list-test.component.ts 48:21-62 @ ./src/app/app.module.ts @ ./src/main.ts @ 多 webpack-dev-服务器/客户端?http://0.0.0.0:0 http://0.0.0.0:0./src/main.ts

我尝试在 app.component.css 文件中声明变量,但这对收到的错误没有影响。

此外,为项目中的每个组件声明自定义属性将完全破坏封装。

有趣的是,即使有警告,它仍然有效。

我知道我可以声明一个自定义 html 属性,但由于这与组件的结构无关并且纯粹是视觉样式,所以对我来说这似乎很臭。

我在这里错过了什么或者有更好的方法来满足这个要求吗?


Angular(或你)正在使用postcss 自定义属性 https://github.com/postcss/postcss-custom-properties插件(如您在消息中看到的),用于需要您声明的自定义属性@custom-properties to the :root每个组件的选择器。你可以禁用警告 https://github.com/postcss/postcss-custom-properties#warnings通过传递选项。

我建议你,如果可以的话,使用postcss-css-变量 https://github.com/MadLittleMods/postcss-css-variables遵循 css 规范。因此,从您的代码片段开始,您可以得到这个,这是更好并且解耦的:

:host {
  --pictureMaxHeight: var(--public-var);
  --pictureSpacing: var(--public-var);

  display: flex;
  flex-flow: row wrap;
  justify-content: flex-start;
  align-items: flex-start;
}

img {
  height: var(--pictureMaxHeight,-1);    
  margin-right: var(--pictureSpacing,0);
  margin-bottom: var(--pictureSpacing,0);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 组件的自定义 CSS 属性 的相关文章

  • CSS 定位在 div 内

    我使用的 div 内部有 2 个元素 我想将第一个元素垂直对齐到 div 的顶部 将第二个元素垂直对齐 div 是页面的右侧部分 等于主要内容的高度 right float right width 19 background FF3300
  • 带有 Angular2+ 的 dc.js 图表

    有人将 dc js 与 Angular2 应用程序一起使用过吗 任何帮助或指示将不胜感激 我能够使我的应用程序在正常的 html java 脚本上运行 现在我需要在 Angular 2 应用程序中实现相同的功能 Edit 几周后 我有了更好
  • 更改内置颜色

    我只是想问如何更改 Angular 2 材质中的这些内置颜色 它在 ng2 material 文档中指定 color primary accent warn 如何更改这些调色板中的颜色 或者甚至如何改变文本的蓝色 我已经尝试过这个但行不通
  • 使轮子在IE中旋转

    我有以下使用 JS 和 CSS 旋转轮子的代码 var prefix function if document body style MozTransform undefined return MozTransform else if do
  • 如何转发元组的类型以专门化其他模板?

    目前我正在研究一种动态容器结构 它表示一个 pod 值或具有相同容器类型的指针向量 容器有一个接口optional
  • 跳过在 Chrome 中不起作用的链接

    首先 我看过上一个问题 https stackoverflow com questions 3572843 skip navigation link not working in google chrome但遗憾的是它似乎没有提供任何解决方
  • 将文本置于圆形按钮上居中

    我想创建一个按钮圆形链接 其中包含文本 但我在将文本置于圆形按钮内居中时遇到问题 行高太大 对这个问题有什么建议吗 这是代码 https jsfiddle net hma443rL https jsfiddle net hma443rL b
  • IE6 CSS 显示:表格修复?

    我正在开发一个网络应用程序 不幸的是它必须与有史以来最糟糕的软件一起工作 是的 即 ie6 我真的很喜欢CSSdisplay table and display table cell属性 但当然它在 ie 中不起作用 有没有人找到解决这个问
  • 使用 javascript 更改整个 CSS 类的样式

    有没有办法使用 javascript 更改 CSS 类的属性 p class fool p
  • 在 Angular 中,如何动态地将某些单词包装在另一个 html 元素中?

    我有这个简单的角度组件 Component selector my component template p someString p export class MyComponent Input someString string som
  • 将 DIV 扩展到父列表项之外

    我有一个有序列表 它实际上是页面上产品的显示 在每个列表项中 li 有一些内容 后面跟着一个div在关闭列表项之前包含更多内容 我需要每个列表项中的 div 扩展 其宽度 超出其父列表项 并实际填充有序列表的宽度 ol 每个 div 还需要
  • 标签转换问题

    我是 html css 新手 当用户在输入框中输入无效输入时出现错误 然后特定输入字段的标签会下降 但是当用户输入时 输入正确则工作正常
  • 为具有可变内容的内联块元素提供相同的高度?

    我有 4 个宽度固定但内容可变的内联块元素 并且我希望所有这些元素具有相同的高度 最大元素的高度 请参见这个jsfiddle http jsfiddle net kKZXj 我应该如何实现这个目标 如果仅使用 css 无法做到这一点 那么使
  • 如何使用固定位置 div/ 的浮动、清除和溢出元素并排对齐两个 div/

    所以我一直在尝试将两个 div 并排对齐而不重叠 我有一个 div 将被固定为侧边栏 而右侧的 div 将被固定为内容 希望有人可以帮助我 body background color 444 margin top 0 margin bott
  • 如何在移动设备上垂直堆叠 div 而在网页版本上保持水平放置?

    我添加了一些 div 标签以在 WordPress 帖子中创建两列 这是我使用的代码 container width 100 one width 50 float left two width 50 float right 我将上面的代码添
  • Angular 6. 是否可以按条件注入服务?

    在我的角度应用程序 带有角度材料 中 我有一个过滤器面板 除了选择之外 我还希望能够自动完成 用户输入值并将其发送到后端 通过 regexp 查询我们在 MongoDB 集合中找到匹配项 但要做到这一点 我需要手动将服务注入过滤器组件 我没
  • HTML5 拖放 - 没有透明度?

    当我将一个元素拖放到页面上时 该元素会变成 幻影 基本上它获得了一些透明度值 有什么办法可以做到吗opacity 1 看来是做不到了 拖动的元素被放入具有自己的不透明度 低于 1 的容器中 这意味着虽然您可以降低拖动元素的不透明度 但您无法
  • Typeahead.js 干扰 Bootstrap 输入组

    如何防止 Typeahead js 拆分我的 Twitter Bootstrap 3 输入组 每当我将 Typeahead javascript 指向属于输入组一部分的文本区域时 连接的文本区域和提交按钮就会停止连接 这只是 Typeahe
  • 显示带有 jQ​​uery-ui 自动完成功能的微调器

    我一直在到处搜索 但没有看到有人这样做 是否有可能拥有某种带有 jQ uery UI 自动完成功能的旋转器 加载器 1 8 获取数据时 我的解决方案是使用 ui autocomplete loading CSS 类 该类在 ajax GET
  • 底部带有三角形的蒙版图像

    我正在尝试找出如何最好地掩盖具有像这样的角度形状的 div 如果在这种情况下顶部 div 将是背景图像 并且两个 div 都是 100 宽度 我看过很多关于如何用圆形遮罩图像的教程 但没有关于如何遮罩红色区域等 div 边框的教程 我知道一

随机推荐