docs: function () {
              // aligning non added elements is expensive
              if (!this.added) {
                  this.alignOnAdd = true;
                  return;
              }
  
              var wrapper = this,
                renderer = wrapper.renderer,
                elem = wrapper.element,
                translateX = wrapper.translateX || 0,
                translateY = wrapper.translateY || 0,
                x = wrapper.x || 0,
                y = wrapper.y || 0,
                align = wrapper.textAlign || 'left',
                alignCorrection = { left: 0, center: 0.5, right: 1 }[align],
                shadows = wrapper.shadows;
  
              // apply translate
              css(elem, {
                  marginLeft: translateX,
                  marginTop: translateY
              });
              if (shadows) { // used in labels/tooltip
                  each(shadows, function (shadow) {
                      css(shadow, {
                          marginLeft: translateX + 1,
                          marginTop: translateY + 1
                      });
                  });
              }
  
              // apply inversion
              if (wrapper.inverted) { // wrapper is a group
                  each(elem.childNodes, function (child) {
                      renderer.invertChild(child, elem);
                  });
              }
  
              if (elem.tagName === 'SPAN') {
  
                  var width,
                    rotation = wrapper.rotation,
                    baseline,
                    textWidth = pInt(wrapper.textWidth),
                    currentTextTransform = [rotation, align, elem.innerHTML, wrapper.textWidth].join(',');
  
                  if (currentTextTransform !== wrapper.cTT) { // do the calculations and DOM access only if properties changed
  
  
                      baseline = renderer.fontMetrics(elem.style.fontSize).b;
  
                      // Renderer specific handling of span rotation
                      if (defined(rotation)) {
                          wrapper.setSpanRotation(rotation, alignCorrection, baseline);
                      }
  
                      width = pick(wrapper.elemWidth, elem.offsetWidth);
  
                      // Update textWidth
                      if (width > textWidth && /[ \-]/.test(elem.textContent || elem.innerText)) { // #983, #1254
                          css(elem, {
                              width: textWidth + PX,
                              display: 'block',
                              whiteSpace: 'normal'
                          });
                          width = textWidth;
                      }
  
                      wrapper.getSpanCorrection(width, baseline, alignCorrection, rotation, align);
                  }
  
                  // apply position with correction
                  css(elem, {
                      left: (x + (wrapper.xCorr || 0)) + PX,
                      top: (y + (wrapper.yCorr || 0)) + PX
                  });
  
                  // force reflow in webkit to apply the left and top on useHTML element (#1249)
                  if (isWebKit) {
                      baseline = elem.offsetHeight; // assigned to baseline for JSLint purpose
                  }
  
                  // record current text transform
                  wrapper.cTT = currentTextTransform;
              }
          }