protected function renderItems()
    {
        $elements = [];
        $items = $this->items;

        foreach ($items as $item) {
            if (isset($item['visible']) && !$item['visible']) {
                continue;
            }

            if (is_string($item)) {
                $elements[] = $item;
                continue;
            }

            if (!array_key_exists('label', $item)) {
                throw new InvalidConfigException("The 'label' option is required.");
            }

            $encodeLabel = isset($item['encodeLabel']) ? $item['encodeLabel'] : $this->encodeLabels;
            $label = $encodeLabel ? Html::encode($item['label']) : $item['label'];

            $itemOptions = ArrayHelper::getValue($item, 'options', []);
            $linkOptions = ArrayHelper::getValue($item, 'linkOptions', []);
            Html::addCssClass($linkOptions, ['link' => 'btn-floating']);

            $url = array_key_exists('url', $item) ? $item['url'] : '#';
            $content = Html::a($label, $url, $linkOptions);

            $elements[] = Html::tag('li', $content, $itemOptions);
        }

        return Html::tag('ul', implode("\n", $elements), $this->itemsContainerOptions);
    }