shouldCreateAnonymousBlockBoxForInlineElements method

bool shouldCreateAnonymousBlockBoxForInlineElements()

Check if anonymous block boxes should be created for inline elements. According to CSS spec, anonymous block boxes are needed when:

  1. A block-level element is a child of an inline element
  2. Inline content needs to be wrapped to maintain proper formatting context

This function helps determine when the layout engine should generate anonymous block boxes to properly handle mixed inline/block content.

Example usage:

if (renderStyle.shouldCreateAnonymousBlockBoxForInlineElements()) {
  // Create anonymous block boxes to wrap inline content
  // before and after the block-level children
}

Returns true if anonymous block boxes are needed, false otherwise.

Implementation

bool shouldCreateAnonymousBlockBoxForInlineElements() {
  // Only check for inline elements
  if (display != CSSDisplay.inline) {
    return false;
  }

  // Check if this inline element contains any block-level children
  final element = target;
  bool hasBlockLevelChild = false;

  for (var child in element.childNodes) {
    if (child is Element) {
      final childDisplay = child.renderStyle.display;
      final childPosition = child.renderStyle.position;

      // Skip positioned elements (they're out of flow)
      if (childPosition == CSSPositionType.absolute || childPosition == CSSPositionType.fixed) {
        continue;
      }

      // Check if child is block-level
      if (childDisplay == CSSDisplay.block || childDisplay == CSSDisplay.flex) {
        hasBlockLevelChild = true;
        break;
      }
    }
  }

  // Anonymous block boxes are needed when inline elements contain block-level children
  return hasBlockLevelChild;
}