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





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







4















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





























    4















    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

























      4












      4








      4


      1






      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 '18 at 15:22









      EduardoEduardo

      383




      383
























          1 Answer
          1






          active

          oldest

          votes


















          3














          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',
            autoActivateHeartbeat: false,
            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









            3














            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




























              3














              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


























                3












                3








                3







                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 '18 at 5:35









                Cliff KohCliff Koh

                461




                461
































                    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.




                    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

                    Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

                    ComboBox Display Member on multiple fields

                    Is it possible to collect Nectar points via Trainline?