Documentation
Feedback
Guides
Learning Center

Learning Center
Learning Center
Layout de abas
View in English
This content was migrated from the VTEX Learning Center and is no longer being actively maintained. For the most accurate and up-to-date information, please check the official documentation.

Introdução

O Tab Layout é um paradigma de estruturação de layouts criado no Store Framework para permitir a construção de layouts com abas ou guias.

Neste paradigma, temos dois containers: o tab-list e o tab-content. Em cada um destes containers, temos os itens que os compõem. Dentro do tab-list, temos os tab-list.item. Já no tab-content, temos os tab-content.item.

Abaixo, veremos um exemplo de implementação de um tab layout.

Primeiro, é necessário declarar o block tab-layout no template desejado:


_10
{
_10
"store.home": {
_10
"blocks": [..."tab-layout"]
_10
}
_10
}

Depois, é necessário declarar um tab-list e um tab-content como children do tab-layout:


_10
...
_10
"tab-layout": {
_10
"children": [
_10
"tab-list",
_10
"tab-content"
_10
]
_10
}

Com isso, temos esses dois containers como componentes do nosso tab-layout. O próximo passo é declarar os tab-list.item e tab-content.item como children do tab-list e do tab-content, respectivamente:


_10
...
_10
"tab-list": {
_10
"children": [
_10
"tab-list.item#1",
_10
"tab-list.item#2"
_10
]
_10
}


_10
...
_10
"tab-content": {
_10
"children": [
_10
"tab-content.item#1",
_10
"tab-content.item#2"
_10
]
_10
}

Na próxima etapa, temos que declarar as propriedades dos tab-list.item. O código abaixo gera uma interface de tabs como a desta imagem:

{"base64":"  ","img":{"width":1860,"height":418,"type":"png","mime":"image/png","wUnits":"px","hUnits":"px","length":45507,"url":"https://user-images.githubusercontent.com/18701182/90059099-076f0c00-dcb9-11ea-918d-664761c34f3a.png"}}

A propriedade tabId é muito importante, pois ela é a chave que conecta o botão de um tab-list.item com um tab-content.item.


_14
...
_14
"tab-list.item#1": {
_14
"props": {
_14
"tabId": "majorAppliances",
_14
"label": "Major Appliances",
_14
"defaultActiveTab": true
_14
}
_14
},
_14
"tab-list.item#2": {
_14
"props": {
_14
"tabId": "electronics",
_14
"label": "Electronics"
_14
}
_14
}

A seguir, vamos declarar as children e as props dos tab-content.item.

No array de children, é possível incluir diversos blocos como rich-text, info-card, image, flex-layout e etc.

Na prop tabId, é necessário incluir os mesmos identificadores (ids) declarados nos tab-list.item para que o link entre a aba e o conteúdo funcione.


_17
...
_17
"tab-content.item#1": {
_17
"children": [
_17
"rich-text#1"
_17
],
_17
"props": {
_17
"tabId": "majorAppliances"
_17
}
_17
},
_17
"tab-content.item#2": {
_17
"children": [
_17
"rich-text#2"
_17
],
_17
"props": {
_17
"tabId": "electronics"
_17
}
_17
}

Por fim, você deve declarar as propriedades do seu conteúdo. No nosso exemplo, colocamos apenas um rich-text em cada tab-content.item:


_14
"rich-text#1": {
_14
"props": {
_14
"text": "Texto para Major Appliances",
_14
"textPosition": "CENTER",
_14
"font": "t-heading-3"
_14
}
_14
},
_14
"rich-text#2": {
_14
"props": {
_14
"text": "Texto para Electronics",
_14
"textPosition": "CENTER",
_14
"font": "t-heading-3"
_14
}
_14
}

Atividade

Nesta atividade, vamos criar a estrutura simples de um tab layout, conforme imagem abaixo. Mais tarde, vamos incluir algum conteúdo para estilizar nossa página customizada.

{"base64":"  ","img":{"width":1276,"height":243,"type":"png","mime":"image/png","wUnits":"px","hUnits":"px","length":9700,"url":"https://appliancetheme.vteximg.com.br/arquivos/tarefa-tab-layout.png"}}

  1. No arquivo home.jsonc criado anteriormente, adicione um tab-layout#home;

  2. Declare o bloco tab-layout#home e adicione como seus filhos um tab-list#home e um tab-content#home;

  3. Declare um tab-list#home e adicione como seus filhos um tab-list.item#home1 e um tab-list.item#home2;

  4. Declare as props do tab-list.item#home1 de maneira que a interface exiba o texto "Major Appliances". (Dica: não se esqueça que incluir nas props um tabId = "majorAppliances" e a propriedade defaultActiveTab = true);

  5. Declare as props do tab-list.item#home2 de maneira que a interface exiba o texto "Electronics". (Dica: não se esqueça que incluir nas props um tabId = "electronics");

  6. Agora, vamos para a parte o conteúdo. Declare um tab-content#home no seu tema e adicione os filhos tab-content.item#home1 e tab-content.item#home2;

  7. Em cada tab-content.item, declare apenas um rich-text como filho (por exemplo, rich-text#home1 e rich-text#home2);

  8. Depois, inclua uma prop tabId em cada tab-content.item de maneira que aconteça o link entre o tab-list criado anteriormente e tab-content;

  9. Por fim, adicione os rich-text e declare suas props conforme o código abaixo:


    _14
    "rich-text#home1": {
    _14
    "props": {
    _14
    "text": "Área do conteúdo da tab-list.item com tabId = majorAppliances",
    _14
    "textPosition": "CENTER",
    _14
    "font": "t-heading-3"
    _14
    }
    _14
    },
    _14
    "rich-text#home2": {
    _14
    "props": {
    _14
    "text": "Área do conteúdo da tab-list.item com tabId = electronics",
    _14
    "textPosition": "CENTER",
    _14
    "font": "t-heading-3"
    _14
    }
    _14
    }

Note: Lembre-se de acessar a documentação Tab Layout e do Rich Text caso tenha alguma dúvida durante a atividade.

Answer sheet

See answer sheet for home.jsonc
home.jsonc

_53
{
_53
"store.home": {
_53
"blocks": ["tab-layout#home"]
_53
},
_53
"tab-layout#home": {
_53
"children": ["tab-list#home", "tab-content#home"]
_53
},
_53
"tab-list#home": {
_53
"children": ["tab-list.item#home1", "tab-list.item#home2"]
_53
},
_53
"tab-list.item#home1": {
_53
"props": {
_53
"tabId": "majorAppliances",
_53
"label": "Major Appliances",
_53
"defaultActiveTab": true
_53
}
_53
},
_53
"tab-list.item#home2": {
_53
"props": {
_53
"label": "Electronics",
_53
"tabId": "electronics"
_53
}
_53
},
_53
"tab-content#home": {
_53
"children": ["tab-content.item#home1", "tab-content.item#home2"]
_53
},
_53
"tab-content.item#home1": {
_53
"children": ["rich-text#home1"],
_53
"props": {
_53
"tabId": "majorAppliances"
_53
}
_53
},
_53
"tab-content.item#home2": {
_53
"children": ["rich-text#home2"],
_53
"props": {
_53
"tabId": "electronics"
_53
}
_53
},
_53
"rich-text#home1": {
_53
"props": {
_53
"text": "Área do conteúdo da tab-list.item com tabId = majorAppliances",
_53
"textPosition": "CENTER",
_53
"font": "t-heading-3"
_53
}
_53
},
_53
"rich-text#home2": {
_53
"props": {
_53
"text": "Área do conteúdo da tab-list.item com tabId = electronics",
_53
"textPosition": "CENTER",
_53
"font": "t-heading-3"
_53
}
_53
}
_53
}

On this page