ASP .NET - Criando Master Pages usando definições CSS


Usando Master Pages podemos compartilhar conteúdo dentre diversas páginas;podemos também usar as Master Pages para criar um leiaute comum. Dessa forma nosso website fica mais fácil de manter , estender e modificar.

A figura abaixo representa o processo que ocorre durante a execução da página que usa uma master page: as duas páginas são mescladas para exibir o conteúdo.

fonte: http://www.asp.net/web-forms/tutorials/master-pages/creating-a-site-wide-layout-using-master-pages-cs

Neste artigo veremos como combinar leiautes CSS e Master Page para definir leiautes de páginas em um website.

Vou usar o Visual Web Developer 2010 Express Edition nos exemplos mostrado neste artigo.

Abra o Visual Web Developer 2010 Express Edition e crie um novo projeto do tipo ASP .NET Web Application com o nome MasterPage_CSS;

Ao clicar no botão OK será criado um projeto ASP .NET contendo uma estrutura já pronto para ser utilizada conforme mostrada na janela Solution Explorer:

Na estrutura criada vemos uma pasta chamada Styles e no seu interior o arquivo Site.css que é o arquivo de estilos usado;

Este arquivo irá aplicar estilos nas páginas do site;

Vemos também o arquivo Site.Master, onde a extensão .Master indica que este arquivo é uma master page.

O arquivo de estilo Site.css esta sendo usado pela Master Page para definir o leiaute da página.

 

Se abrirmos o arquivo Site.Master iremos notar que existe uma referência ao arquivo Site.css que esta na pasta definida entre as tags <head> conforme abaixo:

Além de referenciar o arquivo de estilo conforme mostrada acima podemos também definir os estilos diretamente na Master Page, o que não é muito recomendado, mas é possível de ser feito.

Se executarmos o projeto veremos na figura abaixo o leiaute atual definido pela Master Page e pelo arquivo de estilo Site.css:

Vamos alterar o leiaute da página de apresentação definindo outro arquivo de estilo e alterando a nossa master page.

Para nos ajudar a criar um arquivo de estilo podemos usar os recursos do próprio Visual Web Developer (e do Visual Studio). Clicando duas vezes sobre o arquivo Site.css o mesmo será aberto no editor e através do menu Styles podemos incluir uma rega de estilo (Add Style Rule) ou criar um estilo (Build Style):

Vamos criar um novo arquivo de estilo chamado Macoratti.css; Clique com o botão direito sobre a pasta Styles e selecione Add New Item;

A seguir escolha o template Style Sheet e informe o nome Macoratti.css e clique Add;

A seguir defina o seguinte código no arquivo de estilo Macoratti.css:

Observe que no arquivo de estilo definimos, além do body, 3 divs :

  1. headercontent
  2. leftcontent
  3. rightcontent

Vamos aproveitar e criar uma nova pasta no interior da pasta Styles com o nome Images. Clique com o botão direito do mouse sobre a pasta Styles e selecione Add New Folder informando a seguir o nome Images;

Após isso vamos incluir uma imagem na pasta Images recém criada. Clique com o botão direito do mouse sobre a pasta Images e selecione Add Existing Item e selecione uma imagem de sua preferência. Eu inclui a imagem maco10.jpg.

A seguir repita o procedimento acima e inclua uma outra imagem a seu gosto com o nome cdasp.gif

Agora criar uma nova master page chamada Mac.Master no projeto via menu Project, opção Add New Item;

Selecionando a opção Master Page, informando Mac.Master e clicando no botão Add;

Agora que temos a nossa master page criada vamos definir o seu código da seguinte forma:

<%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Mac.master.vb" Inherits="MasterPage_CSS.Mac" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Master Page com CSS</title>
    <link href="~/Styles/Macoratti.css" rel="stylesheet" type="text/css" />
   
 <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>

</head>
<body>
    <form id="form1" runat="server">

 
  <div id="headercontent">
        <asp:Image ID="Image1" ImageUrl="~/Styles/Images/maco10.jpg" runat="server" />
    </div>


  
 <div id="leftcontent" >
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        </asp:ContentPlaceHolder>
    </div>


  
 <div id="rightcontent">
       <a href="pagina1.aspx">Pagina 1</a><br />
       <a href="pagina2.aspx">Pagina 2</a><br />
       <a href="pagina3.aspx">Pagina 3</a><br />
       <a href="pagina4.aspx">Pagina 4</a><br />
       <a href="pagina5.aspx">Pagina 5</a><br />
    </div>


    </form>
</body>
</html>

Vejamos o que temos neste código:

1- Declarações

a- A declaração <form id="form1" runat="server"> pois todas as páginas ASP.NET normalmente têm um formulário Web, e, porque a master page pode incluir controles Web que devem aparecer dentro de um formulário Web. Não se esqueça de adicionar o formulário Web à sua master page.

b- A declaração <asp:ContentPlaceHolder ID="head" runat="server"></asp:ContentPlaceHolder> - Indica um controle ContentPlaceHolder chamado head - este controle ContentPlaceHolder aparece dentro do controle de servidor <head> e pode ser usado para declarativamente adicionar conteúdo ao elemento <head>.

c-) A declaração <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> - Indica um controle ContentPlaceHolder chamado ContentPlaceHolder1 - esse controle ContentPlaceHolder aparece dentro do formulário Web e serve como a região para a interface da página de conteúdo do usuário.

2- A diretiva @Master:

A diretiva @Master é similar à diretiva @Page que aparece em páginas ASP.NET. Ela define a linguagem server-side (C#/VB) usada e as informações sobre a localização e a herança da classe code-behind master page.

3- A definição do link para o arquivo de estilo Macoratti.css presente na pasta Styles entre as tags <head> :

<link href="~/Styles/Macoratti.css" rel="stylesheet" type="text/css" />

4- A definição de 3 divs : headercontente, leftcontent e rightcontent conforme abaixo:

1- na div headercontent incluímos um controle Image e atribuímos a imagem maco10.jpg a propriedade ImageUrl:

<div id="headercontent">
<asp:Image ID="Image1" ImageUrl="~/Styles/Images/maco10.jpg" runat="server" />
</div>

2- Na div leftcontent incluímos o ContentPlaceHolder :

<div id="leftcontent" >
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>

3- Na div rightcontent incluímos alguns links:

<div id="rightcontent">
<a href="pagina1.aspx">Pagina 1</a><br />
<a href="pagina2.aspx">Pagina 2</a><br />
<a href="pagina3.aspx">Pagina 3</a><br />
<a href="pagina4.aspx">Pagina 4</a><br />
<a href="pagina5.aspx">Pagina 5</a><br />
</div>

Veja como ficou o leiaute da master page Mac.Master :

Vamos incluir um novo web form no projeto via menu Project -> Add New Item escolhendo o template Web Form using Master Page e informando o nome Macoratti.aspx e clicando em Add;

A seguir selecione a master page Mac.Master e clique em OK;

Executando o projeto (clique com o botão direito sobre a página Macoratti.aspx e escolha a opção Set As Start Page no menu suspenso) iremos obter:

Vamos agora criar uma nova master page para definir um leiaute com 3 colunas.

Inclua uma nova master page com o nome Mac1.Master no projeto e defina o seu código conforme abaixo:

<%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Mac1.master.vb" Inherits="MasterPage_CSS.Mac1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Master Page com CSS 2</title>
    <link href="~/Styles/Macoratti1.css" rel="stylesheet" type="text/css" />
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>

<body>
<form id="form1" runat="server">

    <div id="body_area">
      
 <div id="left">
              <div class="InnerText">
                  <div id="logo">
                     <asp:Image ID="Image1" ImageUrl="~/Styles/Images/maco10.jpg" runat="server" Height="26px" Width="165px" />
                  </div>
                  <div class="Nav">
                        <ul class="Nav">
                              <li><a href="">Link1</a></li>
                              <li><a href="">Link2</a></li>
                              <li><a href="">Link3</a></li>
                              <li><a href="">Link3</a></li>
                         </ul>
                  </div>

              </div>
         </div>


         <div id="mid">
              <div id="banner">
                  <asp:Image ID="Image2" ImageUrl="~/Styles/Images/cdasp.gif" runat="server" />
              </div>
 
             <div class="InnerText">
                      <asp:contentplaceholder id="Content1" runat="server"> </asp:contentplaceholder>
               </div>
 
       </div>

  
      <div id="right">
           <div class="InnerText">
                Direito
            </div>
         </div>

  
   
    <div id="footer">
          <div class="InnerText">
              Copyright ©  2010 Macoratti.net - Todos os direitos reservados.
          </div>
       </div>

  </div>

</form>
</body>

</html>

Observe que no código definido para esta master page temos as seguintes divs e referências:

1- Referência ao arquivo de estilo Macoratti1.css que iremos criar a seguir

2- Declaração das seguintes divs:

Precisamos agora criar um novo arquivo de estilo chamado Macoratti1.css contendo o seguinte código:

body
{
    margin:0;
     padding-top:0px;
    padding-right:0;
    padding-bottom:0;
     padding-left:0;
     font-family:Arial, Helvetica, sans-serif;
    background-color:#D5CDAC;
}
div, h1, h2, h3, h4, p, form, label, input, textarea, img, span{

      margin:0; padding:0;
}

ul{
     margin:0; 
     padding:0; 
     list-style-type:none;
     font-size:12px;
     line-height:150%;
}

.spacer{
      clear:both; 
      font-size:0; 
      line-height:0;
}

/*-------------------body_area--------------------*/
#body_area{

      width:1004px;
      margin-top:10px;
      margin-right:auto;
       margin-bottom:0;
      margin-left:auto;
      font-family:Tahoma;
      font-size: 12px;
      font-style:normal;
      line-height:normal;
      font-weight:bold;
      font-variant:normal;
      text-transform:none;
      text-decoration:none;
      padding: 0px;
      float: none;
 }
#logo
{
  width:170px;
  height:100px;

}

#left {
      margin: 0px;
      float: left;  
      width: 185px;
       height: 500px;
      padding-top:4px;
      padding-right:0px;
      padding-bottom:0px;
      padding-left:0px;
      background-color:#EDE8D3;
      margin-bottom:12px;
}

#left div.InnerText
{
      padding-left:12px;
}

div.Nav
{
    width:140px;
    margin-right:auto;
    margin-left:auto;
    background-color:#E3DCBD;
    padding-bottom:20px;

}

ul.Nav
{
      padding: 8px 0px 0 22px;
      background-color:#E3DCBD;
      color:#000;
      margin:0 0 0 2px;
}
   
ul.Nav li
{
   background:url('images/nav_div2.gif') repeat-x left bottom;
   font-size:0;
   line-height:0
}

ul.Nav li a
{
      background-position: inherit 6px;
    display:block;
      color:#787159;
      text-decoration:none;
      font-weight:bolder; font-style:normal; font-variant:normal;
      line-height:17px; 
      font-size:11px; font-family:Arial, Helvetica, sans-serif;
      padding-left:8px; padding-right:0; padding-top:0; padding-bottom:0;
      background-color:inherit;
    background-image: url('images/arrow.gif');
    background-repeat: no-repeat;
    background-attachment: inherit;
}

ul.Nav li a:hover{
      color:#A73F00;
      background-color:#EFECC8;
}

#banner
{
      width:620px;
      height:100px;
      margin-left:auto;
      margin-right:auto;
      text-align:center ;
      background-color:Gray ;
}

#mid {
      margin: 0px;
      padding: 0px;
      float: left;
      width: 628px;
      color:black;
      line-height:150%;
      font-weight:normal ;
      font-size:12px;
      background-color:#E3DCBD;
      padding-bottom:20px;
      margin-bottom:12px;
}

#mid div.InnerText
{
      margin-left:12px;
      margin-right:12px;
      margin-top:20px;
      padding:0;
      color:black;     
}

#mid a
{
      color:#A73F00;
      text-decoration:none;
      font-weight:bolder ;    
}

#right{

      margin: 0px;
      float: right;
      width: 185px;
      padding-top:2px;
      padding-right:0px;
      padding-bottom:0px;
      padding-left:0px;
      margin-bottom:12px;
}

#right div.InnerText
{
            padding-left:10px;
}

/*-----------------------rodapé--------------------*/

#footer
{
  clear:both;
  border:solid 1px black;
}

#footer div.InnerText
{
        padding:10px;
}

Finalmente vamos criar um web form chamado Macoratti1.aspx usando o template Web Form using Master Page.

Após criar a página clique com o botão direito sobre a página Macoratti.aspx e escolha a opção Set As Start Page no menu suspenso.

Executando o projeto a página Macoratti1.aspx exibirá o seguinte leiaute:

Vimos assim como definir o leiaute de páginas ASP .NET usando Master page e arquivos de estilo (CSS) com dois exemplos bem simples. Existem exemplos mais complexos que incluem master pages aninhadas que veremos em outro artigo.

Pegue o projeto completo aqui: MasterPage_CSS.zip

1Pedro 1:16 porquanto está escrito: Sereis santos, porque eu sou santo.

Referências:

José Carlos Macoratti