Skip to content
On this page

Nested example


vue
<script setup lang="ts">
import { SplitWrapper, SplitItem } from '../components'
</script>

<template>
  <div class="vue-split-container">
    <SplitWrapper :sizes="[25, 75]" :minSize="0" class="vue-split horizontal">
      <SplitItem class="vue-split-item">
        <SplitWrapper :sizes="[40, 60]" :minSize="0" class="vue-split horizontal">
          <SplitItem class="vue-split-item">
            <div class="vue-split-content nested-content-1">
            </div>
          </SplitItem>
          <SplitItem class="vue-split-item">
            <div class="vue-split-content nested-content-2">
            </div>
          </SplitItem>
        </SplitWrapper>
      </SplitItem>
      <SplitItem class="vue-split-item">
        <SplitWrapper :sizes="[70, 30]" :minSize="0" direction="vertical" class="vue-split vertical">
          <SplitItem class="vue-split-item">
            <div class="vue-split-content nested-content-1">
            </div>
          </SplitItem>
          <SplitItem class="vue-split-item">
            <SplitWrapper :sizes="[50, 50]" :minSize="0" class="vue-split horizontal">
              <SplitItem class="vue-split-item">
                <div class="vue-split-content nested-content-1">
                </div>
              </SplitItem>
              <SplitItem class="vue-split-item">
                <div class="vue-split-content nested-content-2">
                </div>
              </SplitItem>
            </SplitWrapper>
          </SplitItem>
        </SplitWrapper>
      </SplitItem>
    </SplitWrapper>
  </div>
</template>



<style>
.vue-split-container {
  height: 256px;
  border: 4px dashed rgba(229, 231, 235, 0.4);
  border-radius: 0.5rem;
}

.vue-split {
  height: 100%;
}

.vue-split.horizontal {
  display: flex;
  flex-direction: row;
}

.vue-split.horizontal .vue-split-content {
  height: 100%;
}

.gutter {
  background-color: #eee;
  background-repeat: no-repeat;
  background-position: 50%;
}

.gutter.gutter-horizontal {
  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');
  cursor: col-resize;
}

.gutter.gutter-vertical {
  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII=');
  cursor: row-resize;
}

.vue-split-item {
  height: 100%;
  overflow: hidden;
}

.vue-split-content {
  padding: 16px;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

.nested-content-1 {
  background: rgba(0, 256, 0, .5);
}

.nested-content-2 {
  background: rgba(0, 0, 256, .5);
}
</style>

More

Check out the official SplitJS website for the full list of examples.