How can I change css directly(without variable) in Blazor?

£可爱£侵袭症+ 提交于 2020-12-31 01:27:53

问题


I am using the server-side of Blazor.

I want to change the CSS of the body.

In Jquery I can write the code like this easily:

$("body").css("overflow-y","hidden");

However, with this tutorial(Blazor Change Validation default css class names) said, it seems I can only change the CSS by changing the class name.

It is so complex while crossing the component, especially the body is at the top of all the components.

I wonder whether there is a way can changes CSS directly in Blazor. Thank you.


回答1:


Well, Blazor does not support direct css modification yet, since Web Assembly doesn't. Anyway heads up, it is on the road-map for Web Assembly/Blazor.

Therefor your best bet is, changing the class name with variables. At least for now.




回答2:


There are several ways of getting out of the "blazor way" of doing things and accomplishing css modification of an element.

Simplest: Just like you can use the class attribute, use the style attribute

<element style=@myStyle></element>

@code {
  string myStyle;

  void MyMethod() {
     myStyle="overflow-y: hidden;"
  }
}

Advanced: Use JS interop

a. In the main view (index.html or Pages/_Host.cshtml depending on project type), create a js endpoint for your component

<script>
   window.applyStyleForElement = function(styleOp) {
       document.getElementById(styleOp.id).style[styleOp.attrib] = styleOp.value;
   }
</script>

b. In razor file:

@Inject IJRRuntime JSRuntime
<element id=@myId></element>

@code {
  string myId = Guid.NewGuid().ToString("n");

  async Task MyMethod() {
     await JSRuntime.InvokeAsync("applyStyleForElement", 
      new { id = myId,  attrib = "overflowY", value = "hidden" });
  }
}

Finally, applying to your special case with body element ("advanced" method above).

a. In the main view (index.html or Pages/_Host.cshtml depending on project type), create a js endpoint

<script>
   window.applyStyleForBody = function(style) {
       document.body.style[style.attrib] = style.value;
   }
</script>

b. In razor file:

@Inject IJRRuntime JSRuntime
(...)

@code {

  async Task MyMethod() {
     await JSRuntime.InvokeAsync("applyStyleForBody", 
       new { attrib = "overflowY", value = "hidden" });
  }
}


来源:https://stackoverflow.com/questions/58280795/how-can-i-change-css-directlywithout-variable-in-blazor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!