Duvidas em styles e bootstrap

Olá pessoal!

Aqui onde trabalho o pessoal tem interesse em utilizar o bootstrap.
Gostei bastante da lib e realmente é bacana.
Só que estou receoso porque não tenho muito conhecimento sobre bootstrap e pelo pouco que vi, os styles já estão definidos internamente à lib, o que me obriga a utilizar apenas os oferecidos por ela.
A aplicação que estamos trabalhando é grandinha e já possuem styles definidos.
O que eu gostaria de saber é como eu poderia aplicar estes styles sem alterar os que já foram definidos (tag por tag).
Gostaria de saber como é possível desacoplar, completamente, a lib de forma que caso eu deseje alterar por outros styles ou libs sem precisar sair alterando os fontes?

Minha idéia no momento pra contornar isso seria aplicar os styles dinamicamente utilizando javascript.
Seria um algoritmo que poderia ser inserido na “master page” e que aplicaria os styles tag por tag no load da pagina utilizando o className. Exemplo:

<head>
    <style>
        .red {
            color: red;
        }

        .green {
            color: green;
        }
    </style>
    <script type="text/javascript">
        function ChangeClass () {
            var parag = document.getElementById ("myP");
            // mudaria esta propriedade tag por tag filtrando pelos classNames
            parag.className = (parag.className == "red")? "green" : "red";
        }
    </script>
</head>
<body>
    <p  >
        The contents of the paragraph
    </p>

    &lt;button onclick="ChangeClass ();"&gt;Change className!&lt;/button&gt;
&lt;/body&gt;

Existe alguma forma melhor pra se fazer isso?

Obrigado pela atenção pessoal.

Uma forma é você criar um arquivo CSS, onde sob seu controle vai personalizar os estilos desejados.

Exemplo “SeuArquivo.css” mudando para vermelho a cor da borda dos botões do bootstrap (que usam a classe “btn”):

.btn { border-color: #FF0000; } No seu “HTML master”, após a referencia do CSS Bootstrap, insira a referencia do seu arquivo CSS:

	<head>
		<link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet">
		<link href="css/SeuArquivo.css" rel="stylesheet">
	</head>

[quote=javaflex]Uma forma é você criar um arquivo CSS, onde sob seu controle vai personalizar os estilos desejados.

Exemplo “SeuArquivo.css” mudando para vermelho a cor da borda dos botões do bootstrap (que usam a classe “btn”):

.btn { border-color: #FF0000; } No seu “HTML master”, após a referencia do CSS Bootstrap, insira a referencia do seu arquivo CSS:

<head> <link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="css/SeuArquivo.css" rel="stylesheet"> </head> [/quote]

Obrigado pela dica, mas ainda fiquei com duvidas:
Isso ainda não me manteria preso à classe btn que é do bootstrap e não da aplicação?
As tags “buttons” e “input type buttons” já possuem tags definidas.
Pelo que entendi, isso ainda me obrigaria a varrer o código inteiro dando replace nas classes das tags antigas por esta classe btn.

O botão do bootstrap não é um elemento button bem definido, é um com estilo. Importante é você saber que pode fazer o que quiser dentro do seu arquivo css referenciado após os de terceiros.

Não entendo sua preocupação em ficar “preso” ao nome da classe do bootstrap, qual real problema isto está te trazendo, se você pode mudar o estilo da classe de forma independente como demonstrado acima?

Sobre usar bootstrap num projeto existente, vale mais a pena reescrever o frontend do que tornar o código uma colcha de retalho.

valeu pela dica, mas quando temos que reescrever todo o fonte só pra aplicar uma nova lib javascript e de styles é porque estamos fazendo algo errado.

Um pequeno exemplo utilizando classNames reservados e com busca rápida pelas chaves:

&lt;html&gt;
	&lt;head&gt;
		&lt;script src="http://code.jquery.com/jquery-2.1.1.min.js"&gt;&lt;/script&gt;
		&lt;link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet"&gt;
			&lt;style&gt;
				.red
				{
				color: red;
				}
				.green
				{
				color: green;
				}
				.blue
				{
				color: blue;
				}
			&lt;/style&gt;
			&lt;script type="text/javascript"&gt;
				var my_reserved_styles = [
					{ oldStyle: &quot;.dmy_reserved_style_name&quot;, newStyle: &quot;container&quot; },
					{ oldStyle: &quot;.botao&quot;, newStyle: &quot;btn&quot; },
					{ oldStyle: &quot;.bmy_reserved_style_name&quot;, newStyle: &quot;red&quot; },
					{ oldStyle: &quot;.amy_reserved_style_name&quot;, newStyle: &quot;green&quot; },
					{ oldStyle: &quot;.cmy_reserved_style_name&quot;, newStyle: &quot;blue&quot; }
				] 
				
				function sortJsonName(a,b)
				{
					return a.oldStyle.toLowerCase() &gt; b.oldStyle.toLowerCase() ? 1 : -1;
				}; 
				
				my_reserved_styles = $(my_reserved_styles).sort(sortJsonName);
 

				function binarySearch(arr, i) 
				{ 
					var mid = Math.floor(arr.length / 2); 
					var r1 = arr[mid].oldStyle.toLowerCase();
					var r2 = i.toLowerCase();  
					if ( r1 == &quot;.&quot;+r2 ) 
					{  
						return arr[mid].newStyle; 
					}
					else if (r1 &lt; &quot;.&quot;+r2 && arr.length &gt; 1) 
					{  
						return binarySearch(arr.slice(mid, arr.length), i); 
					} 
					else if (r1 &gt; &quot;.&quot;+r2 && arr.length &gt; 1) 
					{  
						return binarySearch(arr.slice(0, mid), i); 
					} 
					else 
					{ 
						return null; 
					} 
				} 
	 

				function changeClass(element)
				{
					if(element.attr('class')!=null)
					{
						var elementClass = element.attr('class') ;
						var newClassName = binarySearch(my_reserved_styles, elementClass );
						element.removeClass();
						element.toggleClass( newClassName );
					}
				}

				function Change()
				{
					var n1 = (new Date()).getTime();
					$('*').each(function()
					{
						changeClass($(this))
					});
					var n2 = (new Date()).getTime();
					alert(n2-n1);
				}
			&lt;/script&gt;
		&lt;/head&gt;
	&lt;body onload="Change();"&gt;
		&lt;div class="cmy_reserved_style_name"&gt;
			The contents of the div
		&lt;/div&gt;
	
		&lt;div class="dmy_reserved_style_name"&gt;
			The contents of the div
		&lt;/div&gt;

		&lt;div class="bmy_reserved_style_name"&gt;
			The contents of the div
		&lt;/div&gt;

		&lt;div class="amy_reserved_style_name"&gt;
			The contents of the div
		&lt;/div&gt;
	
		&lt;div class="dmy_reserved_style_name"&gt;
			The contents of the div
		&lt;/div&gt;
		
		
		  &lt;button class="botao" type="button" &gt; clicar &lt;/button&gt;

	&lt;/body&gt;
&lt;/html&gt;

Pra ser sincero, não acredito que esse isolamento da sua lib de css tenha tanta vantagem.
Se você quer fazer um replace dinâmico para o nome das classes, pode simplesmente deixar o nome das classes fixo no código e fazer esse replace quando precisar.

Porém, se quiser partir pra esse lado (se isolar da lib), você pode dar uma olhada no SASS.
Ele não foi feito para isso, mas acredito que dê algum suporte mais sério a extensão e importe de classes, daí você poderia definir suas classes como uma composição das classes do bootstrap. Se precisar mudar o dia, muda só em um lugar.

[quote=AbelBueno]Pra ser sincero, não acredito que esse isolamento da sua lib de css tenha tanta vantagem.
Se você quer fazer um replace dinâmico para o nome das classes, pode simplesmente deixar o nome das classes fixo no código e fazer esse replace quando precisar.

Porém, se quiser partir pra esse lado (se isolar da lib), você pode dar uma olhada no SASS.
Ele não foi feito para isso, mas acredito que dê algum suporte mais sério a extensão e importe de classes, daí você poderia definir suas classes como uma composição das classes do bootstrap. Se precisar mudar o dia, muda só em um lugar.[/quote]

O bootstrap não é apenas uma lib de css. É também uma de javascript, onde sua funcionalidade depende muito dos nomes de cada className. exemplo:

&lt;div class="modal fade"&gt;
  &lt;div class="modal-dialog"&gt;
    &lt;div class="modal-content"&gt;
      &lt;div class="modal-header"&gt;
        &lt;button type="button" class="close" data-dismiss="modal" aria-hidden="true"&gt;×&lt;/button&gt;
        &lt;h4 class="modal-title"&gt;Modal title&lt;/h4&gt;
      &lt;/div&gt;
      &lt;div class="modal-body"&gt;
        <p>One fine body?</p>
      &lt;/div&gt;
      &lt;div class="modal-footer"&gt;
        &lt;button type="button" class="btn btn-default" data-dismiss="modal"&gt;Close&lt;/button&gt;
        &lt;button type="button" class="btn btn-primary"&gt;Save changes&lt;/button&gt;
      &lt;/div&gt;
    &lt;/div&gt;&lt;!-- /.modal-content --&gt;
  &lt;/div&gt;&lt;!-- /.modal-dialog --&gt;
&lt;/div&gt;&lt;!-- /.modal --&gt;

exemplo:
class="btn btn-default"
class=“btn btn-primary”

se mudar isso, o javascript perde a referencia. Eu descobri isso na pratica.

valeu pela dica, mas quando temos que reescrever todo o fonte só pra aplicar uma nova lib javascript e de styles é porque estamos fazendo algo errado. [/quote]

Sera o fato de usar javascript pra construir frontends dinâmicos?

valeu pela dica, mas quando temos que reescrever todo o fonte só pra aplicar uma nova lib javascript e de styles é porque estamos fazendo algo errado. [/quote]
Isso é relativo, mas se você prefere assim tudo bem. Se eu decido adotar o framework X eu vou deixar usá-lo plenamente sem complicações, onde no caso do bootstrap o desenvolvedor vai conseguir se virar rapidamente inspecionando e copiando os exemplos do site do bootstrap. Com toda liberdade de personalizar os estilos em CSS específico.

Se está indeciso em relação a outro framework, faça o estudo antes para adotar o que for melhor pra vida do projeto. E querer prever futuro pra algo que nem existe ainda é trabalhar para uma situação incerta. Na prática pode acabar no dia a dia lidando com um obstáculo a mais sem necessidade, onde lá na frente esse “futuro” pode ser algo completamente diferente, com novos conceitos e técnicas. Por exemplo, nos últimos anos tem se usado grid system e responsive layout, mas décadas atrás não dava pra prever que isso seria adotado.

[quote=javaflex]
Se está indeciso em relação a outro framework, faça o estudo antes para adotar o que for melhor pra vida do projeto. E querer prever futuro pra algo que nem existe ainda é trabalhar para uma situação incerta. Na prática pode acabar no dia a dia lidando com um obstáculo a mais sem necessidade, onde lá na frente esse “futuro” pode ser algo completamente diferente, com novos conceitos e técnicas. Por exemplo, nos últimos anos tem se usado grid system e responsive layout, mas décadas atrás não dava pra prever que isso seria adotado.[/quote]

Não entendo o que quer dizer prever.
Sim, realmente concordo com vc que não dá pra prever como os navegadores funcionarão, o que o cliente desejará alterar e outras variáveis. Mas algumas coisas, a estrutura de como queremos apresentar uma app pode durar décadas.
Acho que um exemplo simples de como estruturo o html possa lhe mostrar que não existirá necessidade de alterar no futuro a estrutura. Os styles e a responsividade do bootstrap é excelente. De alguma forma passarei a utiliza-los, mas tentando manter a estrutura já definida:

<form>
	<FormPanel>
		 <Fild 1>
		</Fild>
		<Fild 2>
		</Fild>
		<Fild n>
		</Fild>
	</FormPanel>
	<ControlPanel>
		<New/> 
		 <Edit/> 
		<Save/> 
		<Clean/> 
		<Cancel/> 
	</ControlPanel>
</form>

Consegui.
Claro que precisa de uma melhoradinha…
Quem tiver interesse em ver um exemplo:

Aqui usei as seguintes referencias:

        &lt;link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"&gt;
        &lt;link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"&gt;
        &lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"&gt;&lt;/script&gt;
        &lt;script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"&gt;&lt;/script&gt;