# Building a custom Google Sign-In button

> [!WARNING]
> **Warning:** The Google Sign-In library optionally uses FedCM APIs, and their use will become a requirement. [Conduct an impact assessment](https://developers.google.com/identity/sign-in/web/gsi-with-fedcm) to confirm that user sign-in continues to function as expected.   
>
> Support for the Google Sign-In library is deprecated, see the [Deprecation and Sunset](https://developers.google.com/identity/sign-in/web/deprecation-and-sunset) guide for more.

## Customizing the automatically rendered sign-in button (recommended)

To create a Google Sign-In button with custom settings, add
an element to contain the sign-in button to your sign-in page, write a function
that calls
[`signin2.render()`](https://developers.google.com/identity/sign-in/web/reference#gapisignin2renderid_options)
with your style and scope settings,
and include the `https://apis.google.com/js/platform.js` script
with the query string `onload=YOUR_RENDER_FUNCTION`.

The following is an example of a Google Sign-In button that specifies
custom style parameters:
<iframe src="https://developers.devsite.google/frame/identity/sign-in/web/demos/signin_contextual_custom.jshtml" style="width: 500px;
height: 66px;"></iframe>

The following HTML, JavaScript, and CSS code produces the button above:

```
<html>
<head>
  <meta name="google-signin-client_id" content="YOUR_CLIENT_ID.apps.googleusercontent.com">
</head>
<body>
  <div id="my-signin2"></div>
  <script>
    function onSuccess(googleUser) {
      console.log('Logged in as: ' + googleUser.getBasicProfile().getName());
    }
    function onFailure(error) {
      console.log(error);
    }
    function renderButton() {
      gapi.signin2.render('my-signin2', {
        'scope': 'profile email',
        'width': 240,
        'height': 50,
        'longtitle': true,
        'theme': 'dark',
        'onsuccess': onSuccess,
        'onfailure': onFailure
      });
    }
  </script>

  <script src="https://apis.google.com/js/platform.js?onload=renderButton" async defer></script>
</body>
</html>
```

You can also specify settings for a custom Google Sign-In button by defining
`data-` attributes to a `div` element with the class `g-signin2`. For example:

    <div class="g-signin2" data-width="300" data-height="200" data-longtitle="true">

## Building a button with a custom graphic

You can build a Google Sign-In button to fit your site's design.
You must follow the [branding guidelines](https://developers.google.com/identity/branding-guidelines) and use
the appropriate colors and icons in your button. The branding guidelines also
provide icon assets that you can use to design your button. You must also
ensure that your button is as prominent as other third-party login options.

The following is an example of a Google Sign-In button built with a custom
graphic:
<iframe src="https://developers.devsite.google/frame/identity/sign-in/web/demos/signin_custom.jshtml" style="width: 500px;
height: 80px;"></iframe>

The following HTML, JavaScript, and CSS code produces the button above:

```
<html>
<head>
  <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet" type="text/css">
  <script src="https://apis.google.com/js/api:client.js"></script>
  <script>
  var googleUser = {};
  var startApp = function() {
    gapi.load('auth2', function(){
      // Retrieve the singleton for the GoogleAuth library and set up the client.
      auth2 = gapi.auth2.init({
        client_id: 'YOUR_CLIENT_ID.apps.googleusercontent.com',
        cookiepolicy: 'single_host_origin',
        // Request scopes in addition to 'profile' and 'email'
        //scope: 'additional_scope'
      });
      attachSignin(document.getElementById('customBtn'));
    });
  };

  function attachSignin(element) {
    console.log(element.id);
    auth2.attachClickHandler(element, {},
        function(googleUser) {
          document.getElementById('name').innerText = "Signed in: " +
              googleUser.getBasicProfile().getName();
        }, function(error) {
          alert(JSON.stringify(error, undefined, 2));
        });
  }
  </script>
  <style type="text/css">
    #customBtn {
      display: inline-block;
      background: white;
      color: #444;
      width: 190px;
      border-radius: 5px;
      border: thin solid #888;
      box-shadow: 1px 1px 1px grey;
      white-space: nowrap;
    }
    #customBtn:hover {
      cursor: pointer;
    }
    span.label {
      font-family: serif;
      font-weight: normal;
    }
    span.icon {
      background: url('/identity/sign-in/g-normal.png') transparent 5px 50% no-repeat;
      display: inline-block;
      vertical-align: middle;
      width: 42px;
      height: 42px;
    }
    span.buttonText {
      display: inline-block;
      vertical-align: middle;
      padding-left: 42px;
      padding-right: 42px;
      font-size: 14px;
      font-weight: bold;
      /* Use the Roboto font that is loaded in the <head> */
      font-family: 'Roboto', sans-serif;
    }
  </style>
  </head>
  <body>
  <!-- In the callback, you would hide the gSignInWrapper element on a
  successful sign in -->
  <div id="gSignInWrapper">
    <span class="label">Sign in with:</span>
    <div id="customBtn" class="customGPlusSignIn">
      <span class="icon"></span>
      <span class="buttonText">Google</span>
    </div>
  </div>
  <div id="name"></div>
  <script>startApp();</script>
</body>
</html>
```