SPFx Web 部件的 CSS 适用于它但不适用于页面的其余部分?

Posted

技术标签:

【中文标题】SPFx Web 部件的 CSS 适用于它但不适用于页面的其余部分?【英文标题】:SPFx web part's CSS applies to it but not to rest of page? 【发布时间】:2021-09-13 11:19:56 【问题描述】:

(SharePoint 在线、SPFx、现代网站)

我的最终目标是:

我想自定义 SharePoint 页面的一些视觉方面(标题、左侧导航栏、字体等) 我希望它只发生在一页上

我为此选择的解决方案是创建一个 SPFx Web 部件,而不是一个扩展,我相信它会应用于整个 em>网站。我只是将 Web 部件放在那一页上并完成它。

我的问题是:

CSS 被正确应用到代表我的 Web 部件的 DOM 部分 CSS 似乎(根本没有)应用于页面中的任何其他内容。

例如,我没有看到这个生效,甚至根本没有出现在渲染页面中:

  #spLeftNav 
    color: red !important;
  

但是,这按预期工作:

.myWebPartFooBar 
     .container 
        color:red !important;
     

问题:我是否缺少某种卫生机制? SharePoint 是否会拦截该 CSS 并阻止它应用于我的 Web 部件之外的任何内容?我在网络文学中没有看到任何此类保护系统的痕迹,但也许这是常识。

【问题讨论】:

【参考方案1】:

我有类似的问题。问题是,如果您使用的是 scss,编译器会将这些 css 标签 #spLeftNav 转换为自定义 webpart only 标签,以防止整个网站上的 css 不匹配。

要覆盖它,请将那些全局 css 标记放在全局变量中(这将阻止编译器更改它)。

我的“全局 css”示例:

:global 
#O365_MainLink_Help 
    display:none;
    visibility:hidden;

.InfoPane-section.InfoPaneSection--properties 
    display: none;

.o365cs-nav-bposLogo .o365cs-nav-brandingText 
    display: none;

.o365cs-base.o365cs-topnavBGColor-2 
    background-color: #17375e !important;

.o365cs-base .o365cs-nav-rightMenus 
    background-color: #17375e !important;

#spPageChromeAppDiv,
.ms-Nav

    background-color: #eeece1 !important;

.ms-FocusZone .ms-Nav 
    top: 0px !important;

#O365_NavHeader button#O365_MainLink_NavMenu,
#O365_NavHeader button#O365_MainLink_NavMenu_Responsive,
.o365button .o365cs-nav-brandingText,
.ms-searchux-searchbox 
    display: none !important;

.CanvasZone:not(.CanvasZone--fullWidth) .ControlZone 
    padding: 0px !important;

input:not([type]), input[type=email], input[type=file], input[type=password], input[type=text], select, textarea 
    background-color: #eeece1 !important;
    border-color: #c8c8c8 !important;
    color: #17375e !important;

.ms-CommandBarItem-link[disabled] i,
.ms-CommandBarItem-link[disabled] span 

    color: unset !important;

.ms-compositeHeader-mainLayout 
    height: 77px;

div[class^='commentsWrapper_'] 
    display: none;

span.ms-siteHeader-siteName 
    white-space: normal !important;

.ControlZone 
    margin-top: 0px !important;

.ControlZone-control,
.ms-SearchBox,
.ms-BasePicker,
.ms-SearchBox-field 
    background-color: #eeece1 !important;

.commandBarWrapper .ms-CommandBar 
    display: none;

.ms-compositeHeader 
    padding: 0 32px 0px;

【讨论】:

以上是关于SPFx Web 部件的 CSS 适用于它但不适用于页面的其余部分?的主要内容,如果未能解决你的问题,请参考以下文章

SPFX - 长时间间隔后刷新 Web 部件

在 SPFx Web 部件内显示库视图

更新文档库元数据 SPFx Web 部件时出现 InvalidClientQueryException

iOS 和 Android Flutter 小部件是不是也适用于 Flutter Web(PWA)

适用于显示静态 html 页面的 C++ 小部件

如何在单个 spfx 解决方案中创建两个 webpart?