static getSize(element, includeMargins = false) {
    // Store the styles so that they can be used by others without asking for it again.
    const styles = window.getComputedStyle(element, null);
    let width = getNumberStyle(element, 'width', styles);
    let height = getNumberStyle(element, 'height', styles);

    if (includeMargins) {
      const marginLeft = getNumberStyle(element, 'marginLeft', styles);
      const marginRight = getNumberStyle(element, 'marginRight', styles);
      const marginTop = getNumberStyle(element, 'marginTop', styles);
      const marginBottom = getNumberStyle(element, 'marginBottom', styles);
      width += marginLeft + marginRight;
      height += marginTop + marginBottom;
    }

    return {
      width,
      height,
    };
  }
Returns the outer width of an element, optionally including its margins.

There are a few different methods for getting the width of an element, none of
which work perfectly for all Shuffle's use cases.

1. getBoundingClientRect() `left` and `right` properties.
  - Accounts for transform scaled elements, making it useless for Shuffle
  elements which have shrunk.
2. The `offsetWidth` property.
  - This value stays the same regardless of the elements transform property,
  however, it does not return subpixel values.
3. getComputedStyle()
  - This works great Chrome, Firefox, Safari, but IE<=11 does not include
  padding and border when box-sizing: border-box is set, requiring a feature
  test and extra work to add the padding back for IE and other browsers which
  follow the W3C spec here.

@param {Element} element The element.
@param {boolean} [includeMargins=false] Whether to include margins.
@return {{width: number, height: number}} The width and height.