Office UI Fabric - How to apply css styles to existing components











up vote
1
down vote

favorite












I'm using the provided components and every time I need to change a component style I wonder what's the proper way to do it.



Lets say I need to change the IconButton background color when it's disabled.
https://codepen.io/elsl/pen/KrQQdV



If I provide a theme, how am I supposed to know which palette/semanticColor is used by that component?






const iconsTheme = Fabric.createTheme({
semanticColors: {
disabledBackground: "#ff9933"
}
});


<Fabric.IconButton
iconProps={{iconName:'ChevronRight'}}
disabled
theme={iconsTheme}
/>





If I provide an IButtonStyles, how am I supposed to know that the property name is "rootDisabled.backgroundColor"?






const iconButtonStyles: IButtonStyles = {
rootDisabled: {
backgroundColor: "#ff0000",
}
};

<Fabric.IconButton
iconProps={{iconName:'CalculatorEqualTo'}}
disabled
styles={iconButtonStyles}
/>





For both these options, I had to dig into the component's source code on github to find out.



Is this the expected/correct way?
If so, between creating a Theme or an IStyle which would be the ideal/best practice?










share|improve this question


























    up vote
    1
    down vote

    favorite












    I'm using the provided components and every time I need to change a component style I wonder what's the proper way to do it.



    Lets say I need to change the IconButton background color when it's disabled.
    https://codepen.io/elsl/pen/KrQQdV



    If I provide a theme, how am I supposed to know which palette/semanticColor is used by that component?






    const iconsTheme = Fabric.createTheme({
    semanticColors: {
    disabledBackground: "#ff9933"
    }
    });


    <Fabric.IconButton
    iconProps={{iconName:'ChevronRight'}}
    disabled
    theme={iconsTheme}
    />





    If I provide an IButtonStyles, how am I supposed to know that the property name is "rootDisabled.backgroundColor"?






    const iconButtonStyles: IButtonStyles = {
    rootDisabled: {
    backgroundColor: "#ff0000",
    }
    };

    <Fabric.IconButton
    iconProps={{iconName:'CalculatorEqualTo'}}
    disabled
    styles={iconButtonStyles}
    />





    For both these options, I had to dig into the component's source code on github to find out.



    Is this the expected/correct way?
    If so, between creating a Theme or an IStyle which would be the ideal/best practice?










    share|improve this question
























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      I'm using the provided components and every time I need to change a component style I wonder what's the proper way to do it.



      Lets say I need to change the IconButton background color when it's disabled.
      https://codepen.io/elsl/pen/KrQQdV



      If I provide a theme, how am I supposed to know which palette/semanticColor is used by that component?






      const iconsTheme = Fabric.createTheme({
      semanticColors: {
      disabledBackground: "#ff9933"
      }
      });


      <Fabric.IconButton
      iconProps={{iconName:'ChevronRight'}}
      disabled
      theme={iconsTheme}
      />





      If I provide an IButtonStyles, how am I supposed to know that the property name is "rootDisabled.backgroundColor"?






      const iconButtonStyles: IButtonStyles = {
      rootDisabled: {
      backgroundColor: "#ff0000",
      }
      };

      <Fabric.IconButton
      iconProps={{iconName:'CalculatorEqualTo'}}
      disabled
      styles={iconButtonStyles}
      />





      For both these options, I had to dig into the component's source code on github to find out.



      Is this the expected/correct way?
      If so, between creating a Theme or an IStyle which would be the ideal/best practice?










      share|improve this question













      I'm using the provided components and every time I need to change a component style I wonder what's the proper way to do it.



      Lets say I need to change the IconButton background color when it's disabled.
      https://codepen.io/elsl/pen/KrQQdV



      If I provide a theme, how am I supposed to know which palette/semanticColor is used by that component?






      const iconsTheme = Fabric.createTheme({
      semanticColors: {
      disabledBackground: "#ff9933"
      }
      });


      <Fabric.IconButton
      iconProps={{iconName:'ChevronRight'}}
      disabled
      theme={iconsTheme}
      />





      If I provide an IButtonStyles, how am I supposed to know that the property name is "rootDisabled.backgroundColor"?






      const iconButtonStyles: IButtonStyles = {
      rootDisabled: {
      backgroundColor: "#ff0000",
      }
      };

      <Fabric.IconButton
      iconProps={{iconName:'CalculatorEqualTo'}}
      disabled
      styles={iconButtonStyles}
      />





      For both these options, I had to dig into the component's source code on github to find out.



      Is this the expected/correct way?
      If so, between creating a Theme or an IStyle which would be the ideal/best practice?






      const iconsTheme = Fabric.createTheme({
      semanticColors: {
      disabledBackground: "#ff9933"
      }
      });


      <Fabric.IconButton
      iconProps={{iconName:'ChevronRight'}}
      disabled
      theme={iconsTheme}
      />





      const iconsTheme = Fabric.createTheme({
      semanticColors: {
      disabledBackground: "#ff9933"
      }
      });


      <Fabric.IconButton
      iconProps={{iconName:'ChevronRight'}}
      disabled
      theme={iconsTheme}
      />





      const iconButtonStyles: IButtonStyles = {
      rootDisabled: {
      backgroundColor: "#ff0000",
      }
      };

      <Fabric.IconButton
      iconProps={{iconName:'CalculatorEqualTo'}}
      disabled
      styles={iconButtonStyles}
      />





      const iconButtonStyles: IButtonStyles = {
      rootDisabled: {
      backgroundColor: "#ff0000",
      }
      };

      <Fabric.IconButton
      iconProps={{iconName:'CalculatorEqualTo'}}
      disabled
      styles={iconButtonStyles}
      />






      reactjs office-ui-fabric office-fabric






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 22 at 15:22









      Eduardo

      233




      233
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          1
          down vote



          accepted










          Theme vs IStyles



          I would say, use a Theme if you want all Fabric components to have the same customization.



          Use the styles property if you just want to customize that specific component (or that one specific instance of the component).



          How to discover the styling hooks if using IStyles



          There are four ways that comes to mind.




          1. Look at the documentation (e.g. https://developer.microsoft.com/en-us/fabric#/components/dropdown, look at the IDropdownStyles interface)
            (screenshot)

          2. Utilize IntelliSense if you're using an editor like Visual Studio Code, which automatically enumerates the IComponentStyles and provides documentation if any.

          3. Inspecting the DOM often provides hints (the hook areas usually look like {area}-{number} so root-33 for instance where the "area" name is root.

          4. Read the source code.


          Unfortunately for option 1 and option 2, Fabric React isn't super consistent with the IComponentStyles documentation so not all components have equally descriptive comments and in those cases, you may need to fallback to option 3 and option 4.






          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53434038%2foffice-ui-fabric-how-to-apply-css-styles-to-existing-components%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            1
            down vote



            accepted










            Theme vs IStyles



            I would say, use a Theme if you want all Fabric components to have the same customization.



            Use the styles property if you just want to customize that specific component (or that one specific instance of the component).



            How to discover the styling hooks if using IStyles



            There are four ways that comes to mind.




            1. Look at the documentation (e.g. https://developer.microsoft.com/en-us/fabric#/components/dropdown, look at the IDropdownStyles interface)
              (screenshot)

            2. Utilize IntelliSense if you're using an editor like Visual Studio Code, which automatically enumerates the IComponentStyles and provides documentation if any.

            3. Inspecting the DOM often provides hints (the hook areas usually look like {area}-{number} so root-33 for instance where the "area" name is root.

            4. Read the source code.


            Unfortunately for option 1 and option 2, Fabric React isn't super consistent with the IComponentStyles documentation so not all components have equally descriptive comments and in those cases, you may need to fallback to option 3 and option 4.






            share|improve this answer

























              up vote
              1
              down vote



              accepted










              Theme vs IStyles



              I would say, use a Theme if you want all Fabric components to have the same customization.



              Use the styles property if you just want to customize that specific component (or that one specific instance of the component).



              How to discover the styling hooks if using IStyles



              There are four ways that comes to mind.




              1. Look at the documentation (e.g. https://developer.microsoft.com/en-us/fabric#/components/dropdown, look at the IDropdownStyles interface)
                (screenshot)

              2. Utilize IntelliSense if you're using an editor like Visual Studio Code, which automatically enumerates the IComponentStyles and provides documentation if any.

              3. Inspecting the DOM often provides hints (the hook areas usually look like {area}-{number} so root-33 for instance where the "area" name is root.

              4. Read the source code.


              Unfortunately for option 1 and option 2, Fabric React isn't super consistent with the IComponentStyles documentation so not all components have equally descriptive comments and in those cases, you may need to fallback to option 3 and option 4.






              share|improve this answer























                up vote
                1
                down vote



                accepted







                up vote
                1
                down vote



                accepted






                Theme vs IStyles



                I would say, use a Theme if you want all Fabric components to have the same customization.



                Use the styles property if you just want to customize that specific component (or that one specific instance of the component).



                How to discover the styling hooks if using IStyles



                There are four ways that comes to mind.




                1. Look at the documentation (e.g. https://developer.microsoft.com/en-us/fabric#/components/dropdown, look at the IDropdownStyles interface)
                  (screenshot)

                2. Utilize IntelliSense if you're using an editor like Visual Studio Code, which automatically enumerates the IComponentStyles and provides documentation if any.

                3. Inspecting the DOM often provides hints (the hook areas usually look like {area}-{number} so root-33 for instance where the "area" name is root.

                4. Read the source code.


                Unfortunately for option 1 and option 2, Fabric React isn't super consistent with the IComponentStyles documentation so not all components have equally descriptive comments and in those cases, you may need to fallback to option 3 and option 4.






                share|improve this answer












                Theme vs IStyles



                I would say, use a Theme if you want all Fabric components to have the same customization.



                Use the styles property if you just want to customize that specific component (or that one specific instance of the component).



                How to discover the styling hooks if using IStyles



                There are four ways that comes to mind.




                1. Look at the documentation (e.g. https://developer.microsoft.com/en-us/fabric#/components/dropdown, look at the IDropdownStyles interface)
                  (screenshot)

                2. Utilize IntelliSense if you're using an editor like Visual Studio Code, which automatically enumerates the IComponentStyles and provides documentation if any.

                3. Inspecting the DOM often provides hints (the hook areas usually look like {area}-{number} so root-33 for instance where the "area" name is root.

                4. Read the source code.


                Unfortunately for option 1 and option 2, Fabric React isn't super consistent with the IComponentStyles documentation so not all components have equally descriptive comments and in those cases, you may need to fallback to option 3 and option 4.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 27 at 5:35









                Cliff Koh

                261




                261






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53434038%2foffice-ui-fabric-how-to-apply-css-styles-to-existing-components%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    What visual should I use to simply compare current year value vs last year in Power BI desktop

                    How to ignore python UserWarning in pytest?

                    Alexandru Averescu