Problema com alinhar JSF com CSS [resolvido]

11 respostas
delki8

Pessoal estou apanhando um bocado aqui tentando alinhar esses dois rich:panel de acordo com meu arquivo CSS:

(Não coloquei direto no post porque a imagem é grande)
http://img37.imageshack.us/img37/72/seleo006.png

Esse é o meu JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%>
<%@ taglib prefix="rich" uri="http://richfaces.org/rich"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel=stylesheet href="css/estilo.css" type="text/css" />
<title>Cadastrar pagamentos</title>
</head>
<body>
	<f:view>
		<%@include file="cabecalho.jsp"%>
		<a4j:loadScript src="scripts/jquery.maskMoney.js"></a4j:loadScript>
			<h:panelGrid columns="3" styleClass="richPanelGrande">
				<rich:panel styleClass="richPanel">
				<f:facet name="header">
					<h:outputText value="Cadastro de Pagamentos" />
				</f:facet>
					<%@include file="part/cadastrarPagamento.jsp"%>
				</rich:panel>

				<rich:panel styleClass="richPanelCentro">
					<%@include file="part/graficoInicio.jsp"%>
					<%@include file="part/tabelaPagamentos.jsp" %>
				</rich:panel>

				<rich:panel styleClass="richPanel">
				<f:facet name="header">
					<h:outputText value="Filtro para pagamentos" />
				</f:facet>
					<%@include file="part/filtro.jsp"%>
				</rich:panel>
		</h:panelGrid>
	</f:view>
</body>
</html>

E aqui é o meu CSS:

@CHARSET "UTF-8";
.richPanel {
	height: 590;
	width: 357;
}

.richPanelCentro {
	height: 100%;
	width: 600;
}
.richPanelGrande{
	top: 0%;
	vertical-align: top;
}

.outputTextPadrao{
	font-size: 8pt;
}

11 Respostas

A

Cara, provavelmente isso que eu vou falar n vai adiantar mta coisa, nem vi o seu codigo direito para ser sincero, mas sei que e uma tabrla e que o componente central esta na 2 coluna ditando o tamanho. Tente colocar float para seus 2 componentes na lateral.

#painelEsquerdo{
float: left;
}

#painelDireito{
float: right;
}

Ajuste o posicionamento do seu layout para relative e veja se traz resultados melhores.

rock

delki8,

para alguém poder ajudar, posta o código HTML gerado, ou melhor, salva a página, zipa e posta ai :!:

delki8

Poxa ta bem canceira de ler o HTML gerado mas se vocês animarem… Ai vai:
http://textuploader.com/?p=6&id=gJXh
To começando agora com JSF e ainda apanho um pouco sobre as regras possíveis de serem aplicadas com CSS

rock

delki8, o html nao veio completo.

para ficar mais fácil , utilize a opção ‘salvar como…’ do seu navegador. Vai salvar uma página html e um diretório com imagens , css, etc da página. Zipa e manda ai!
Assim poderemos reproduzir o problema e ajudar :!:

delki8

Mas é pra já:
http://www.megaupload.com/?d=EMR0W84U

E valeu a prestatividade viu pessoal?

rock

tente adicionar o código abaixo no seu estilo.css:

.richPanelGrande tr td:first-child, .richPanelGrande td+td+td {
	vertical-align: top;
}
delki8

Achei a estrutura do CSS um pouco estranha depois dessa recomendação rock mas deu absolutamente certo da forma como eu queria, valeu cara.

Só queria pedir que você explicasse essas alterações no CSS porque eu fiz mas não entendi, ai quando eu precisar de novo acho que ficarei um pouco confuso. Pode explicar?

rock

Claro,

é o seguinte:

seu <h:panelGrid columns=“3” styleClass=“richPanelGrande”> vai gerar uma tabela com 3 colunas (3 tds).
Para ficar da forma que vc queria, precisava alinhar no topo (vertical-align: top) a primeira e a terceira coluna (ou poderia ser todas também).

“.richPanelGrande tr td:first-child” é o seletor para pegar a primeira coluna (first child)
“.richPanelGrande td+td+td” é o seletor para pegar um td precedido por 2 tds, portanto, é o seletor para pegar a terceira coluna

Sobre os seletores podes olhar aqui: http://www.w3.org/TR/CSS2/selector.html

Porque nao fiz assim?

.richPanelGrande td { vertical-align: top; }
Porque iria pegar todos os td que estão dentro do seu panelGrid, inclusive os td da tabela logo abaixo do gráfico.


Não lembro se com o <h:panelGrid> vc consegue definir a classe das TDs, mas se conseguir, fica mais fácil e mais compreensível.
ficaria algo do tipo:

jsf:
<h:panelGrid columnClasses="alinhaTopo" columns="3">

html gerado:
<table><tr><td class="alinhaTopo">...</td><td class="alinhaTopo">...</td><td class="alinhaTopo">...</td></tr></table>

css:
 .alinhaTopo { vertical-align: top; }

dúvidas?

delki8

Sem mais dúvidas, fiz com o .richPanelGrande td{} e deu certinho, fora que eu também entendi o que ta acontecendo. Muitíssimo obrigado cara e tenha uma ótima noite.

rock

:slight_smile: valeu :!: igualmente :!:

delki8

Podia muito rolar um ranking pra quem resolvesse os problemas da gente né? Acho que dava um status legal pros usuários.

Criado 25 de agosto de 2011
Ultima resposta 25 de ago. de 2011
Respostas 11
Participantes 3