Escolar Documentos
Profissional Documentos
Cultura Documentos
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
ByTaliGarsielandPaulIrish
Publicacin:agosto5th,2011
Comments:132
Prlogo
EstecompletomanualsobrelasoperacionesinternasdeWebKityGeckoesel
resultadodelasextensasinvestigacionesrealizadasporladesarrolladoraisraelTali
Garsiel.Durantevariosaoshaestadorevisandotodalainformacinpublicada
sobrelascaractersticasinternasdelosnavegadoresweb(consultalaseccin
Recursos) yhapasadomuchotiempoleyendosucdigofuente.Taliescribilo
siguiente:
"EnlosaosenlosqueInternetExploreracaparabael90%delmercado,el
navegadorsepodaconsiderarpocomsque"cajanegra",peroahoraquelos
navegadoresdecdigoabiertodominanmsdelamitaddelmercado,esun
buenmomentoparaecharunvistazoalinteriordelosnavegadoresyverloque
esconden.Bueno,loqueescondenmillonesdelneasdecdigoenC++..."
Talihapublicadosuinvestigacinensusitioweb,perocomosabamosquese
merecaunpblicomsamplio,lohemospublicadoaqutambintrashaceralgunas
modificaciones.
Comodesarrolladoraweb,conocerlascaractersticasinternasdelas
operacionesdelosnavegadoressirveparatomarmejoresdecisionesypara
conocerlosmotivosquejustificanlasprcticasdedesarrollorecomendadas.
Aunquesetratadeundocumentobastanteextenso,terecomendamosque
dediquesunpocodetutiempoaexaminarlo.Tenporseguroquenotearrepentirs.
PaulIrish,RelacionescondesarrolladoresdeChrome
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
1/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Introduccin
Losnavegadoressonprobablementeelsoftwaremsutilizadodetodos.Eneste
manualseexplicasufuncionamientointerno.Veremosquocurrecuandoescribes
google.comenlabarradedireccioneshastaquelapginadeGoogleapareceenla
pantalla.
ndice
1. Introduccin
1. Losnavegadoresdelosquehablaremos
2. Lafuncinprincipaldeunnavegador
3. Componentesprincipalesdelnavegador
2. Elmotorderenderizacin
1. Motoresderenderizacin
2. Elflujoprincipal
3. Ejemplosdelflujoprincipal
3. AnlisisyconstruccindelrboldeDOM
1. Anlisis(general)
1.
2.
3.
4.
5.
6.
7.
Gramticas
Analizador:combinacindeanalizadoreslxicos
Traduccin
Ejemplodeanlisis
Definicionesformalesdevocabularioysintaxis
Tiposdeanalizadores
Cmogeneraranalizadoresautomticamente
2. AnalizadordeHTML
1.
2.
3.
4.
5.
6.
7.
8.
9.
DefinicindegramticaHTML
Noesunagramticalibredecontexto
DTDdeHTML
DOM
Elalgoritmodeanlisis
Elalgoritmodetokenizacin
Algoritmodeconstruccinderbol
Accionesalfinalizarelanlisis
Toleranciaaerroresdelosnavegadores
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
2/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
3. AnlisisdeCSS
1. AnalizadordeCSSdeWebKit
4. Ordendeprocesamientodesecuenciasdecomandosyhojasdeestilo
1. Secuenciasdecomandos
2. Anlisisespeculativo
3. Hojasdeestilo
4. Construccindelrbolderenderizacin
1. RelacindelrbolderenderizacinconelrboldeDOM
2. Elflujodeconstruccindelrbol
3. Computacindeestilos
1. Datosdeestilocompartidos
2. rboldereglasdeFirefox
1. Divisinenestructuras
2. Cmocomputarloscontextosdeestiloconelrboldereglas
3. Cmomanipularlasreglasparaobtenercoincidenciasfcilmente
4. Cmoaplicarlasreglasenelordendecascadacorrecto
1. Ordenencascadadelahojadeestilo
2. Especificidad
3. Cmoordenarlasreglas
4. Procesogradual
5. Diseo
1.
2.
3.
4.
5.
6.
7.
Sistemadebitdemodifiacin(dirtybit)
Diseoglobaleincremental
Diseoasncronoysncrono
Optimizaciones
Elprocesodediseo
Clculodelancho
Saltodelnea
6. Pintura
1.
2.
3.
4.
Globaleincremental
Ordendelprocesodepintura
ListadevisualizacindeFirefox
AlmacenamientodefigurasrectangularesdeWebKit
7. Cambiosdinmicos
8. Subprocesosdelmotorderenderizacin
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
3/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
1. Bucledeeventos
9. ModelodeformatovisualdeCSS2
1.
2.
3.
4.
5.
Elelementocanvas
ModelodecajasdeCSS
Esquemadeposicionamiento
Tiposdecajas
Posicionamiento
1. Relativo
2. Flotante
3. Absolutoyfijo
6. Representacinencapas
10. Recursos
4/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
losnavegadorescumplenlasespecificacionesenmayoromenorgrado.
Lasinterfacesdeusuariodelosdistintosnavegadorestienenmuchoselementosen
comn.Estossonalgunosdeloselementoscomunesdelasinterfacesdeusuario:
unabarradedireccionesdondeinsertarlasURI,
botonesdeavanceyretroceso,
opcionesdemarcadores,
unbotnparadetenerlacargadelosdocumentosactualesyotroparavolver
acargarlos,
unbotndeinicioquepermitevolveralapginadeinicio.
Estascoincidenciasresultanextraas,yaquelainterfazdeusuariodelos
navegadoresnoseincluyeenningunadelasespecificacionesformales,sinoque
procededelaexperienciaacumuladaalolargodelosaosydeloselementosque
losnavegadoreshanimitadounosdeotros.LaespecificacindeHTML5nodefine
loselementosquedebeincluirlainterfazdeusuariodelosnavegadores,pero
muestraalgunoselementoscomunes.Entreestoselementosseencuentranlabarra
dedirecciones,labarradeestadoylabarradeherramientas.Existen,porsupuesto,
caractersticasnicasdecadanavegador,comoeladministradordedescargasde
Firefox.
5/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
5. Servidordelainterfaz:permitepresentarwidgetsbsicos,comoventanasy
cuadroscombinados.Muestraunainterfazgenricaquenoesespecficade
ningunaplataforma.Utilizamtodosdelainterfazdeusuariodelsistema
operativoensegundoplano.
6. IntrpretedeJavaScript:permiteanalizaryejecutarelcdigoJavaScript.
7. Almacenamientodedatos:esunacapadepersistencia.Elnavegador
necesitaguardartodotipodedatoseneldiscoduro(porejemplo,lascookies).
LanuevaespecificacindeHTML(HTML5)defineelconceptode"basede
datosweb",queconsisteenunacompleta(aunqueligera)basededatosdel
navegador.
Figura:componentesprincipalesdelnavegador
EsimportantedecirqueChrome,adiferenciadelamayoradelosnavegadores,
implementavariasinstanciasdelmotorderenderizacin,unaporcadapestaa.
Cadapestaarepresentaunprocesoindependiente.
El motor de renderizacin
Laresponsabilidaddelmotorderenderizacines"renderizar",esdecir,mostrarel
contenidosolicitadoenlapantalladelnavegador.
Deformapredeterminada,elmotorderenderizacinpuedemostrarimgenesy
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
6/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
documentosHTMLyXML.Puedemostrarotrostiposmedianteelusode
complementos(oextensiones)porejemplo,puedemostrardocumentosPDF
medianteuncomplementocapazdeleerarchivosPDF.Sinembargo,eneste
captulonoscentraremosensuusoprincipal:mostrarimgenesycdigoHTMLcon
formatodefinidoconCSS.
Motores de renderizacin
Nuestrosnavegadoresdereferencia(Firefox,ChromeySafari)estnbasadosen
dosmotoresderenderizacin.FirefoxutilizaGecko,unmotorderenderizacin
propiodeMozilla.TantoSafaricomoChromeutilizanWebKit.
WebKitesunmotorderenderizacindecdigoabiertoqueempezsiendounmotor
delaplataformaLinuxyquefuemodificadoposteriormenteporAppleparahacerlo
compatibleconMacyWindows.Puedesobtenermsinformacinenwebkit.org.
El flujo principal
Elmotorderenderizacinempiezarecibiendoelcontenidodeldocumentosolicitado
desdelacapadered,normalmenteenfragmentosde8.000bytes.
Acontinuacin,elmotorderenderizacinrealizaesteflujobsico:
Figura:flujobsicodelmotorderenderizacin
ElmotorderenderizacinempiezaaanalizareldocumentoHTMLyconviertelas
etiquetasennodosDOMenunrboldenominado"rboldecontenido".Analizalos
datosdeestilo,tantoenlosarchivosCSSexternoscomoenloselementosdeestilo.
Losdatosdeestilo,juntoconlasinstruccionesvisualesdelcdigoHTML,seutilizan
paracrearotrorbol:elrbolderenderizacin.
Elrbolderenderizacincontienerectngulosconatributosvisuales,comoelcolor
ylasdimensiones.Losrectngulosestnorganizadosenelordenenelque
aparecernenlapantalla.
Unavezconstruidoelrbolderenderizacin,seiniciaunprocesode"diseo".Esto
significaqueacadanodoseleasignanlascoordenadasexactasdellugardela
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
7/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
pantallaenelquedebeaparecer.Lasiguientefaseesladepintura,enlaquese
recorreelrbolderenderizacinysepintacadaunodelosnodosutilizandolacapa
deservidordelainterfazdeusuario.
Esimportantecomprenderquesetratadeunprocesogradual.Paramejorarla
experienciadelusuario,elmotorderenderizacinintentarmostrarelcontenidoen
pantallaloantesposible.NoesperaraqueseanaliceelcdigoHTMLpara
empezaracrearydisearelrbolderenderizacin.Seanalizarnysemostrarn
algunaspartesdelcontenido,mientrasquesesigueprocesandoelrestodel
contenidoquellegadelared.
Figura:flujoprincipaldeWebKit
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
8/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Figura:flujoprincipaldelmotorderenderizacinGeckodeMozilla
(3.6)
Enlasfiguras3y4sepuedeverque,aunqueWebKityGeckoutilizanuna
terminologaligeramentediferente,elflujoesbsicamenteelmismo.
Geckodenominaalrboldeelementosformateadosvisualmente"rboldemarcos".
Cadaunodeloselementosesunmarco.WebKitutilizalostrminos"rbolde
renderizacin"y"objetosderenderizacin"enlugardelosanteriores.WebKitutiliza
eltrmino"diseo"paracolocarloselementos,mientrasqueGeckolodenomina
"reflujo".WebKitutilizaeltrmino"asociacin"paraconectarlosnodosDOMcon
informacinvisualparacrearelrbolderenderizacin.Unapequeadiferenciano
semnticaesqueGeckodisponedeunacapaextraentreelcdigoHTMLyelrbol
deDOM.Estacapasedenomina"depsitodecontenido"yestdedicadaala
creacindeelementosDOM.Vamosavercadaunadelaspartesdelflujo:
Anlisis (general)
Dadoqueelanlisisesunprocesomuyimportantedelmotordelrenderizacin,
vamosaverlodeunaformamsdetallada.Comencemosporunabreve
introduccinaesteproceso.
Analizarundocumentosignificatraducirloaunaestructuraquetengasentido,es
decir,algoqueelcdigopuedacomprenderyutilizar.Elresultadodelanlisissuele
serunrboldenodosquerepresentalaestructuradeldocumento.Esterbolse
denomina"rboldeanlisis"o"rboldesintaxis".
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
9/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Ejemplo:elanlisisdelaexpresin 2 + 3 - 1 podradarcomoresultadoeste
rbol:
Figura:nododerboldeexpresinmatemtica
Gramticas
Elanlisissebasaenlasreglasdesintaxisporlasqueserigeeldocumento,es
decir,ellenguajeoelformatoenelqueestescrito.Todoslosformatosquese
puedenanalizardebentenerunagramticadeterministaformadaporunvocabulario
yunasreglasdesintaxis.Estosedenominagramticalibredecontexto.Los
lenguajeshumanosnosondeestetipoy,portanto,nosepuedenanalizarcon
tcnicasdeanlisisconvencionales.
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
10/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Figura:deldocumentooriginalalrboldeanlisis
Elprocesodeanlisisesiterativo.Elanalizadornormalmentepidealanalizador
lxicounnuevotokeneintentabuscarcoincidenciasentreeltokenyunadelas
reglasdesintaxis.Siseencuentraunacoincidencia,seaadealrboldeanlisisun
nodocorrespondientealtokenyelanalizadorsolicitaotrotoken.
Sinocoincideconningunaregla,elanalizadoralmacenaeltokeninternamentey
siguesolicitandotokenshastaqueencuentraunareglaquecoincidecontodoslos
tokensalmacenadosinternamente.Sinoencuentraningunaregla,lanzauna
excepcin.Estosignificaqueeldocumentonoseconsideravlidoportenererrores
desintaxis.
Traduccin
Muchasveces,elrboldeanlisisnoeselproductofinal.Elanlisisseutiliza
frecuentementeenlatraduccin,esdecir,enlaconversindeldocumentode
entradaaotroformato.Unejemploseralacompilacin.Elcompilador,quecompila
uncdigofuenteencdigodemquina,enprimerlugarloconvierteenunrbolde
anlisisy,acontinuacin,traduceelrbolaundocumentodecdigodemquina.
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
11/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Figura:flujodecompilacin
Ejemplo de anlisis
Enlafigura5seobservaunrboldeanlisiscreadoapartirdeunaexpresin
matemtica.Intentemosdefinirunlenguajematemticosimpleyveamoselproceso
deanlisis.
Vocabulario:nuestrolenguajepuedeincluirnmerosenteros,elsignomsyelsigno
menos.
Sintaxis:
1. Losbloquesdeconstruccindelasintaxisdellenguajesonexpresiones,
trminosyoperaciones.
2. Nuestrolenguajepuedeincluircualquiercantidaddeexpresiones.
3. Unaexpresinestformadaporun"trmino"seguidodeuna"operacin"yde
otrotrmino.
4. Unaoperacinesuntokendesumaountokenderesta.
5. Untrminoesuntokendenmeroenteroounaexpresin.
Analicemoslaentrada 2 + 3 - 1 .
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
12/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Laprimerasubcadenaquecoincideconunareglaes 2 segnlaregla5,esun
trmino.Lasegundacoincidenciaes 2 + 3 ,quecoincideconlaterceraregla(un
trminoseguidodeunaoperacinydeotrotrmino).Lasiguientecoincidenciasolo
seutilizaralfinaldelaentrada. 2 + 3 - 1 esunaexpresinporqueyasabemos
que 2+3 esuntrmino,asquetenemosuntrminoseguidodeunaoperacinyde
otrotrmino. 2 + + nocoincideconningunaregla,porloquenoseraunaentrada
vlida.
Comosepuedeobservar,losnmerosenterossedefinenmedianteunaexpresin
regular.
LasintaxisnormalmentesedefineenunformatodenominadonotacindeBackus
Naur(BNF).Nuestroidiomasedefinirdelasiguienteforma:
expression := term operation
operation := PLUS | MINUS
term := INTEGER | expression
term
Dijimosqueunlenguajesepuedeanalizarmedianteanalizadoresnormalessisu
gramticaesunagramticalibredecontexto.Unadefinicinintuitivadeuna
gramticalibredecontextoesunagramticaquesepuedeexpresarcompletamente
ennotacindeBackusNaur(BNF).Puedesconsultarunadefinicinformaleneste
artculodeWikipediasobrelasgramticaslibresdecontexto.
Tipos de analizadores
Existendostiposbsicosdeanalizadores:losdescendentesylosascendentes.
Utilizandounaexplicacinintuitiva,podramosdecirquelosanalizadores
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
13/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
descendentescompruebanlaestructuradenivelsuperiordelasintaxiseintentan
buscarunacoincidencia,mientrasquelosanalizadoresascendentescomienzancon
losdatosdeentradaylosvantransformandogradualmentemediantelasreglas
sintcticasempezandoporelnivelmsbajohastaquesecumplenlasreglasde
nivelsuperior.
Veamoscmoanalizanelcontenidodeejemploestosdostiposdeanalizadores:
Unanalizadordescendenteempiezadesdelaregladenivelsuperior:identifica 2 +
3 comounaexpresin.Acontinuacin,identifica 2 + 3 - 1 comoexpresin(el
procesodeidentificarlaexpresinsedesarrollabuscandocoincidenciasconelresto
delasreglas,peroseempiezaporlaregladenivelsuperior).
Elanalizadorascendenteanalizalosdatosdeentradahastaqueencuentrauna
coincidenciaconunareglay,acontinuacin,sustituyelaentradacoincidenteconla
regla.Esteprocesocontinahastaqueseanalizantodoslosdatosdeentrada.Las
expresionesconcoincidenciasparcialessecolocanenlapiladelanalizador.
Pila
Entrada
2 + 3 - 1
trmino
+ 3 - 1
operacindeltrmino
3 - 1
expresin
- 1
operacindelaexpresin
expresin
Estetipodeanalizadorascendenteseconocecomoanalizadordedesplazamiento
reduccindebidoaquelosdatosdeentradasedesplazanhacialaderecha(imagina
unpunteroqueapuntaprimeroaliniciodelosdatosdeentradayacontinuacinse
desplazahacialaderecha)ygradualmentesereducensegnlasreglassintcticas.
14/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
WebKitutilizadosgeneradoresdeanalizadoresmuyconocidos:Flex,paracrearun
analizadorlxico,yBison,paracrearunanalizadornormal(tambinseconocen
como"Lex"y"Yacc").LaentradadeFlexconsisteenunarchivocondefinicionesde
expresionesregularesdelostokens.LaentradadeBisonconsisteenlasreglas
sintcticasdellenguajeenformatoBNF.
Analizador de HTML
EltrabajodelanalizadordeHTMLesanalizarlasmarcasHTMLyorganizarlasenun
rboldeanlisis.
15/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
cosasalosautoresdecontenidoweb.Porotrolado,hacequeresultedifcilescribir
unagramticaformal.Enresumen:ellenguajeHTMLnosepuedeanalizar
fcilmentemedianteanalizadoresconvencionales(porquenodisponedeuna
gramticalibredecontexto)nimedianteanalizadoresdeXML.
DTD DE HTML
LadefinicindeHTMLestenformatoDTD.Esteformatoseutilizaparadefinir
lenguajesdelafamiliaSGML.Contienedefinicionesdetodosloselementos
permitidos,desusatributosydesujerarqua.Comovimosantes,ladefinicinDTD
dellenguajeHTMLnoformaunagramticalibredecontexto.
ExistenalgunasvariacionesdeladefinicinDTD.Elmodoestrictoseajusta
nicamentealasespecificaciones,perootrosmodosadmitenelmarcadoutilizado
anteriormenteporlosnavegadores.Elobjetivoesmantenerlacompatibilidadconel
contenidomsantiguo.LadefinicinDTDestrictaactualseencuentraenla
siguientepgina:www.w3.org/TR/html4/strict.dtd
DOM
Elrboldesalida("rboldeanlisis")estformadoporelementosDOMynodosde
atributo.DOMsonlassiglasde"DocumentObjectModel"(modelodeobjetosdel
documento).EslapresentacindeobjetosdeldocumentoHTMLylainterfazdelos
elementosHTMLparaelmundoexterior,comoJavaScript.
LarazdelrboleselobjetoDocument.
ElmodeloDOMguardaunarelacincasideunoaunoconelmarcado.Veamosun
ejemplodemarcado:
<html>
<body>
<p>
Hello World
</p>
<div> <img src="example.png"/></div>
</body>
</html>
ElmarcadoanteriorsetraduciraenelsiguienterboldeDOM:
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
16/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Figura:rboldeDOMdelmarcadodeejemplo
AligualqueelHTML,laorganizacinW3ChaespecificadoelmodeloDOM.Puedes
consultarloenlapginawww.w3.org/DOM/DOMTR.Esunaespecificacingenrica
paralamanipulacindedocumentos.Unmduloespecficodescribeelementos
HTMLespecficos.PuedesconsultarlasdefinicionesHTMLenlapgina
www.w3.org/TR/2003/RECDOMLevel2HTML20030109/idldefinitions.html.
CuandodigoqueelrbolcontienenodosDOM,quierodecirqueestconstruidocon
elementosqueimplementanunadelasinterfacesDOM.Losnavegadoresutilizan
implementacionesconcretasquetienenotrosatributosqueelnavegadorutiliza
internamente.
El algoritmo de anlisis
Comovimosenlasseccionesanteriores,ellenguajeHTMLnosepuedeanalizar
mediantelosanalizadoresascendentesydescendentesnormales.
Lasrazonesson:
1. lanaturalezapermisivadellenguaje,
2. elhechodequelosnavegadorespresentenunatoleranciaaerrorestradicional
paraadmitircasosbienconocidosdeHTMLnovlido,
3. lanaturalezaiterativadelprocesodeanlisis.Normalmente,elcdigono
cambiaduranteelanlisis.Sinembargo,enelcasodelcdigoHTML,las
etiquetasdesecuenciasdecomandosquecontienendocument.write
puedenaadirtokensadicionales,porloqueelprocesodeanlisisllegaa
modificarlosdatosdeentrada.
Alnopoderutilizarlastcnicasdeanlisisnormales,losnavegadorescrean
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
17/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
analizadorespersonalizadosparaanalizarelcdigoHTML.
Elalgoritmodeanlisissedescribedeformadetalladaenlaespecificacinde
HTML5.Elalgoritmopresentadosfases:latokenizacinylaconstruccindelrbol.
Latokenizacineselanlisislxico,esdecir,elanlisisylaconversinentokens
delosdatosdeentrada.EntrelostokensHTMLseencuentranlasetiquetas
iniciales,lasetiquetasfinalesylosvaloresdeatributos.
Eltokenizadorreconoceeltoken,loenvaalconstructordelrbolyconsumeel
siguientecarcterparareconocerelsiguientetoken,yassucesivamentehasta
llegaralfinaldelosdatos.
Figura:flujodeanlisisdeHTML(tomadodelaespecificacinde
HTML5)
El algoritmo de tokenizacin
ElalgoritmoproduceuntokenHTML.Elalgoritmoseexpresacomounamquinade
estado.Cadaestadoconsumeunoovarioscaracteresdelflujodeentraday
actualizaelsiguienteestadodeacuerdoconesoscaracteres.Ladecisinest
influenciadaporelestadodetokenizacinactualyporelestadodeconstruccindel
rbol.Estosignificaqueelmismocarcterconsumidoproducirresultados
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
18/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
diferentesparaelsiguienteestadocorrectoenfuncindelestadoactual.El
algoritmoesdemasiadocomplejoparadescribirloensutotalidad,asqueveremos
algunosejemplossencillosquenosayudarnacomprenderelprincipio.
EjemplobsicodetokenizacindelsiguientecdigoHTML:
<html>
<body>
Hello world
</body>
</html>
Elestadoinicialeselde"estadodedatos".Cuandoseencuentraelcarcter<,el
estadocambiaaestadodeetiquetaabierta.Alconsumiruncarctera-z,secrea
elestado"tokendeetiquetainicial"yelestadocambiaaestadodenombrede
etiqueta.Esteestadosemantienehastaqueseconsumeelcarcter>.Todoslos
caracteresseaadenalnombredelnuevotoken.Ennuestrocaso,elnuevotoken
esuntokenhtml.
Alllegaralaetiqueta>,seemiteeltokenactualyelestadocambiaaestadode
datos.Sesiguenlosmismospasosparalaetiqueta<body>.Hastaahora,sehan
emitidolasetiquetashtmlybody.Ahoravolvemosalestadodedatos.Alconsumir
elcarcterHdeHello world,secreayseemiteuntokendecarcter,yas
sucesivamentehastallegaralcarcter<de</body>.Seemiteuntokendecarcter
porcadaunodeloscaracteresdeHello world.
Ahoravolvemosalestadodeetiquetaabierta.Alconsumirlasiguienteentrada/,
secreauntoken de etiqueta finalysepasaalestadodenombrede
etiqueta.Denuevo,elestadosemantienehastallegara>.Acontinuacin,seemite
eltokendelanuevaetiquetaysevuelvealestadodedatos.Laentrada</html>
setratarcomoelcasoanterior.
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
19/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Figura:tokenizacindelaentradadeejemplo
20/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Laentradaalafasedeconstruccindelrbolesunasecuenciadetokensdelafase
detokenizacin.Elprimermodoesel"modoinicial".Siserecibeeltokenhtml,se
pasaralmodo"previoahtml"ysevolveraprocesareltokenenesemodo.Esto
harqueelelemento"HTMLHtmlElement"secreeyseaadaalobjetoraz
"Document".
Elestadocambiara"antesdelencabezado".Recibimoseltoken"body".Se
crearimplcitamenteunelemento"HTMLHeadElement",aunquenotengamos
ningntoken"head",yeseelementoseaadiralrbol.
Ahorapasamosalmodo"enelencabezado"y,acontinuacin,almodo"despus
delencabezado".Eltokendelcuerposevuelveaprocesar,secreayseinsertaun
elemento"HTMLBodyElement"y,porltimo,elmodopasaa"enelcuerpo".
Acontinuacin,serecibenlostokensdeloscaracteresdelacadena"Helloworld".
Elprimeroharquesecreeyseinserteelnodo"Text",alqueseaadirelrestode
caracteres.
Larecepcindeltokendefinalizacindelcuerpoprovocarunatransferenciaal
modo"despusdelcuerpo".Acontinuacin,serecibirlaetiquetaHTMLfinal,que
harquesepasealmododespusdelcuerpo.Cuandoserecibaelfinaldeltoken
delarchivo,alanlisisfinalizar.
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
21/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Figura:construccinderboldelcdigoHTMLdeejemplo
22/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
analizarlassecuenciasdecomandosqueseencuentrenenmodo"aplazado",es
decir,aquellasquesedebenejecutarunavezquesehaanalizadoeldocumento.A
continuacin,elestadodeldocumentoseestablecercomo"completado"yse
activaruneventode"carga".
Sepuedenverlosalgoritmoscompletosparatokenizacinylaconstruccindel
rbolenlaespecificacindeHTML5.
Hedebidodeinfringirunmillndereglas("mytag"noesunaetiquetaestndar,los
elementos"p"y"div"estnmalanidados,etc.),peroelnavegadorsigue
mostrndolocorrectamenteynomuestraningnerror.Porlotanto,unagranparte
delcdigodelanalizadorcorrigeloserroresdelautordecontenidoHTML.
Lagestindeerroresesbastanteconsistenteenlosnavegadores,peroloms
increbleesquenoformapartedelaespecificacinactualdeHTML.Aligualquelos
marcadoresylosbotonesdeavanceyretroceso,esalgoquesehaido
desarrollandoalolargodelosaos.HayalgunasconstruccionesHTMLconocidas
quenosonvlidasyqueserepitenenmuchossitios.Losnavegadoresintentan
corregirlasdeacuerdoconotrosnavegadores.
Encambio,enlaespecificacindeHTML5ssedefinenalgunosdeestosrequisitos.
WebKitloresumeenelcomentarioqueseencuentraalprincipiodelaclasede
analizadordeHTML.
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
23/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Elanalizadoranalizalaentradatokenizadaylaconvierteeneldocumento,lo
quecreaelrboldeldocumento.Sieldocumentoestbienconstruido,el
anlisisresultasencillo.
Lamentablemente,debemostratarconmuchosdocumentosHTMLquenoestn
bienconstruidos,porloqueelanalizadordebesertoleranteconestoserrores.
Sedebetenercuidado,comomnimo,conlossiguienteserrores:
1. Elelementoquesedebeaadirestprohibidoexplcitamenteenalguna
etiquetaexterna.Enestecaso,debemoscerrartodaslasetiquetashasta
llegaralaqueprohbeelelementoyaadirloacontinuacin.
2. Noestpermitidoaadirelelementodirectamente.Esposiblequeelautor
deldocumentohayaolvidadoincluirunaetiquetaenmedio(oquela
etiquetaseaopcional).Estepodraserelcasodeestasetiquetas:HTML
HEADBODYTBODYTRTDLI(heolvidadoalguna?).
3. Sequiereaadirunelementodebloquedentrodeunelementointegrado.
Hayquecerrartodosloselementosintegradoshastallegaralsiguiente
elementodebloquesuperior.
4. Siestonofunciona,sedebencerrarelementoshastaquesepuedaaadir
elelementooignorarlaetiqueta.
VeamosalgunosejemplosdetoleranciaaerroresdeWebKit:
Nota:loserroressegestionandeformainterna,esdecir,nosemuestranalusuario.
Tabla perdida
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
24/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Unatablaperdidaesunatablaincluidaenelcontenidodeotratabla,peronoenuna
celda.
Ejemplo:
<table>
<table>
<tr><td>inner table</td></tr>
</table>
<tr><td>outer table</td></tr>
</table>
WebKitcambiarlajerarquadedostablassecundarias:
<table>
<tr><td>outer table</td></tr>
</table>
<table>
<tr><td>inner table</td></tr>
</table>
Cdigo:
if (m_inStrayTableContent && localName == tableTag)
popBlock(tableTag);
WebKitutilizaunapilaparaelcontenidodelelementoactualysacalatablainterna
delapiladelatablaexterna.Lastablasseencontrarnenelmismoniveldela
jerarqua.
25/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
www.liceo.edu.mxesunejemplodeunsitioconunniveldeanidamientode
unas1.500etiquetas,todasellasprocedentesdeunaseriedeetiquetas<b>s.
Nosepermiteutilizarmsde20etiquetasanidadasdelmismotipo.Apartirde
esenmero,seignorantodas.
SetoleraqueHTMLserompatotalmente.Nuncacerramoslaetiquetadel
cuerpo(body),yaquealgunaspginaswebcometenelerrordecerrarlaantes
dequehayaacabadoeldocumento.Poreso,nosfijamosenlallamada"end()"
paracerrarelementos.
Asqueyasabis:amenosquequerisaparecercomoejemploenunfragmentode
cdigodetoleranciaaerroresdeWebKit,escribidelcdigoHTMLcorrectamente.
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
26/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Anlisis de CSS
Osacordisdelosconceptosdeanlisisquevimosenlaintroduccin?A
diferenciadellenguajeHTML,CSStieneunagramticalibredecontextoysepuede
analizarconlostiposdeanalizadoresdescritosenlaintroduccin.Dehecho,la
especificacindellenguajeCSSdefinesugramticasintcticaylxica.
Veamosalgunosejemplos:
Lagramticalxica(elvocabulario)sedefinemedianteexpresionesregularespara
cadatoken:
comment
\/\*[^*]*\*+([^/*][^*]*\*+)*\/
num
[0-9]+|[0-9]*"."[0-9]+
nonascii [\200-\377]
nmstart
[_a-z]|{nonascii}|{escape}
nmchar
[_a-z0-9-]|{nonascii}|{escape}
name
{nmchar}+
ident
{nmstart}{nmchar}*
"ident"eslaabreviaturadeidentificador,comoelnombredeunaclase."name"esel
identificadordeunelemento(ysehacereferenciaalmediante"#").
LagramticasintcticasedescribeenBNF.
ruleset
: selector [ ',' S* selector ]*
'{' S* declaration [ ';' S* declaration ]* '}' S*
;
selector
: simple_selector [ combinator selector | S+ [ combinator?
selector ]? ]?
;
simple_selector
: element_name [ HASH | class | attrib | pseudo ]*
| [ HASH | class | attrib | pseudo ]+
;
class
: '.' IDENT
;
element_name
: IDENT | '*'
;
attrib
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
27/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Explicacin:unconjuntodereglasesunaestructuracomolaquesemuestraa
continuacin.
div.error , a.error {
color:red;
font-weight:bold;
}
"div.error"y"a.error"sonselectores.Laparteentrellavescontienelasreglasquese
aplicanaesteconjuntodereglas.Estaestructurasedefineformalmenteenesta
definicin:
ruleset
: selector [ ',' S* selector ]*
'{' S* declaration [ ';' S* declaration ]* '}' S*
;
Estosignificaqueunconjuntodereglasesunselectorounnmeroopcionalde
selectoresseparadosporunacomayporespacios(Ssignificaespacioenblanco).
Unconjuntodereglascontieneunadeclaracinentrellavesu,opcionalmente,una
seriededeclaracionesseparadasporpuntoycoma."declaration"y"selector"se
definirnenlassiguientesdefinicionesdeBNF.
28/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
regladeCSScontienenobjetosdedeclaracionesyselectores,ascomootros
objetosrelacionadosconlagramticadeCSS.
Figura:anlisisdeCSS
29/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
seanaliceyseejecuteenunsubprocesodiferente.
Anlisis especulativo
TantoWebKityFirefoxutilizanestaoptimizacin.Alejecutarlassecuenciasde
comandos,otrosubprocesoanalizaelrestodeldocumento,buscaenlaredotros
recursosnecesariosyloscarga.Deestaforma,losrecursossepuedencargar
medianteconexionesparalelas,loquemejoralavelocidadgeneral.Nota:el
analizadorespeculativonomodificaelrboldeDOM(deesoseencargael
analizadorprincipal),soloanalizalasreferenciasarecursosexternos,como
secuenciasdecomandosexternas,hojasdeestiloeimgenes.
Hojas de estilo
Lashojasdeestilo,porotrolado,tienenunmodelodiferente.Conceptualmente,
pareceque,dadoquelashojasdeestilonomodificanelrboldeDOM,nohay
raznparaesperarlasydetenerelanlisisdeldocumento.Sinembargo,seproduce
unaincidenciacuandolassecuenciasdecomandossolicitaninformacindeestilo
durantelafasedeanlisisdeldocumento.Sielestiloannosehacargadoni
analizado,lasecuenciadecomandosobtendrrespuestasincorrectasy,
aparentemente,estocausarmuchascomplicaciones.Parecequesetratadeun
casoextremo,peroesbastantecomn.Firefoxbloqueatodaslassecuenciasde
comandossitodavaseestcargandoyanalizandounahojadeestilo.WebKit
bloquealassecuenciasdecomandossolocuandointentanaccederadeterminadas
propiedadesdeestiloquesepuedenverafectadasporlashojasdeestilo
descargadas.
30/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Laclase"RenderObject"deWebKit,laclasebsicadelosrenderizadores,tienela
siguientedefinicin:
class RenderObject{
virtual void layout();
virtual void paint(PaintInfo);
virtual void rect repaintRect();
Node* node; //the DOM node
RenderStyle* style; // the computed style
RenderLayer* containgLayer; //the containing z-index layer
}
Cadarenderizadorrepresentaunrearectangularquenormalmentesecorresponde
conlacajadeCSSdelnodo,segnsedescribeenlaespecificacindeCSS2.
Contieneinformacingeomtricacomoelancho,laalturaylaposicin.
Eltipodecajaseveafectadoporelatributodeestilo"display"relevanteparael
nodo(consultalaseccinComputacindeestilos).EsteeselcdigodeWebKitque
seutilizaparadecidirqutipoderenderizadorsedebecrearparaunnodoDOM,
segnelatributodevisualizacin:
RenderObject* RenderObject::createObject(Node* node,
RenderStyle* style)
{
Document* doc = node->document();
RenderArena* arena = doc->renderArena();
...
RenderObject* o = 0;
switch (style->display()) {
case NONE:
break;
case INLINE:
o = new (arena) RenderInline(node);
break;
case BLOCK:
o = new (arena) RenderBlock(node);
break;
case INLINE_BLOCK:
o = new (arena) RenderBlock(node);
break;
case LIST_ITEM:
o = new (arena) RenderListItem(node);
break;
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
31/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
...
}
return o;
}
Eltipodeelementotambinsetieneencuenta.Porejemplo,lastablasylos
controlesdelosformulariostienenmarcosespeciales.
EnWebKit,siunelementoquierecrearunrenderizadorespecial,sobrescribeel
mtodocreateRenderer.Losrenderizadoresapuntanaobjetosdeestiloque
contienenlainformacinnogeomtrica.
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
32/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Figura:elrbolrenderizadoryelrboldeDOMcorrespondiente
(3.1)La"ventanagrfica"eselbloquecontenedorinicial.EnWebKit,
serelobjeto"RenderView".
33/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Esteeselobjetoderenderizacinalqueapuntaeldocumento.Elrestodelrbolse
construyecomounainsercindenodosDOM.
ConsultalaespecificacindeCSS2enelmodelodeprocesamiento.
Computacin de estilos
Paracrearelrbolderenderizacin,esnecesariocalcularlaspropiedadesvisuales
decadaunodelosobjetosderenderizacin.Parahacerlo,hayquecalcularlas
propiedadesdeestilodecadaelemento.
Elestiloincluyehojasdeestilodevariosorgenes,elementosdeestilointegradosy
propiedadesvisualesenelcdigoHTML(comolapropiedad"bgcolor").Estas
ltimassetransformanenlaspropiedadesdeestilodeCSScorrespondientes.
Losorgenesdelashojasdeestilosonlashojasdeestilopredeterminadasdel
navegador,lasproporcionadasporelautordelapginaylasproporcionadasporel
usuariodelnavegador(losnavegadorespermitenalusuariodefinirsuestilofavorito.
EnFirefox,porejemplo,sepuedehacercolocandounahojadeestiloenlacarpeta
deperfilesdelnavegador).
Lacomputacindeestilosconllevaalgunasdificultades:
1. Alcontenerlasnumerosaspropiedadesdelosestilos,losdatosdeestilo
lleganaalcanzarunasdimensionesconsiderables,loquepuedeprovocarun
usoexcesivodememoria.
2. Labsquedadelasreglascoincidentesdecadaelementopuedeafectaral
rendimientosinoseoptimizaelproceso.Recorrerlalistacompletadereglas
decadaelementoparaencontrarcoincidenciasesunatareamuypesada.Los
selectorespuedentenerunaestructuracompleja,loquepuedehacerquese
empieceabuscarenunarutaqueaparentementeseabuena,peroque
finalmentenoseaasysedebaprobarconotraruta.
Pongamoscomoejemploesteselectorcomplejo:
div div div div{
...
}
Significaquelasreglasseaplicanaunelemento<div>queesel
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
34/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
descendientedetreselementos"div".Supongamosquequierescomprobarsi
lareglaseaplicaaunelemento<div>determinado.Debesseleccionaruna
rutasuperiordelrbolparacomprobarlo.Esposiblequedebasascenderpor
todoelrboldenodossoloparaaveriguarquenicamenteexistendos
elementos"div"yquelareglanoseaplica.Acontinuacin,debesprobarcon
otrasrutasdelrbol.
3. Paraaplicarlasreglas,esnecesarioutilizarreglasencascadabastante
complejasquedefinenlajerarquadelasreglas.
Veamoscmoseenfrentanlosnavegadoresaestasdificultades:
35/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
sencilla:elrboldereglasyelrboldecontextosdeestilo.WebKittambincuenta
conobjetosdeestilo,peronosealmacenanenunrbolcomoelrboldecontextos
deestilo.SoloelnododeDOMindicaelestilopertinente.
Figura:rboldecontextosdeestilo(2.2)
Loscontextosdeestiloincluyenvaloresfinales.Paracomputarlosvalores,se
aplicantodaslasreglasconlasquesehayanencontradocoincidenciasenelorden
correctoyserealizanmanipulacionesquetransformanlosvaloreslgicosen
concretos.Porejemplo,sielvalorlgicoesunporcentajedelapantalla,se
calcularysetransformarenunidadesabsolutas.Laideadelrboldereglases
muyingeniosa,yaquepermitecompartirestosvaloresentrenodosparaevitarque
sevuelvanacomputar.Adems,ahorraespacio.
Todaslasreglasconlasqueseencuentraalgunacoincidenciasealmacenanenun
rbol.Losnodosinferioresdeunarutatienenmayorprioridad.Elrbolincluyetodas
lasrutasdelascoincidenciasquesehanencontradoparaunaregla.Lasreglasse
almacenanlentamente.Elrbolnosecomputaalprincipiodecadanodo,pero
siemprequesedebecomputarelestilodeunnodo,lasrutasseaadenalrbol.
Laideaesquelasrutasdelrbolsemuestrencomolaspalabrasdeunlexicn.
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
36/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Imaginemos,porejemplo,queyahemoscomputadoesterboldereglas:
Supongamosquenecesitamosencontrarcoincidenciasparareglasdeotros
elementosdelrboldecontenidoyobtenemoslassiguientesreglas(enelorden
correcto):BEI.Yatenamosestarutadelrbolporqueyahabamoscomputado
larutaABEIL,porloqueahoratendremosmenostrabajoquehacer.
Vamosacomprobarcmoguardaelrbolnuestrotrabajo.
Divisin en estructuras
Loscontextosdeestilosedividenenestructurasqueincluyeninformacindeestilo
deunaciertacategora,comoelbordeoelcolor.Todaslaspropiedadesdeun
estructurapuedenserheredadasonoheredadas.Laspropiedadesheredadasson
propiedadesque,amenosquelasdefinaelelemento,seheredandelelemento
principal.Laspropiedadesnoheredadas(denominadaspropiedades"reset")utilizan
losvalorespredeterminadosencasodequenosedefinan.
Elrbolguardaencachestructurascompletas(queincluyenlosvaloresfinales
computados)delrbol.Deesaforma,sielnodoinferiornoproporcionauna
definicinparaunaestructura,sepuedeutilizarunaestructuraguardadaencach
deunnodosuperior.
37/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
prioridad(normalmenteelselectormsespecfico),yrecorremoselrbolensentido
ascendentehastacompletarlaestructura.Siestenododereglasnoincluyeninguna
especificacinparalaestructura,podemosoptimizarloconsiderablemente(lamejor
formaesrecorrerelrbolensentidoascendentehastaencontrarunnodoque
incluyaunaespecificacincompletayapuntardespusaestenodo)ycompartirla
estructuracompleta.Graciasaestemtodoahorramosvaloresfinalesymemoria.
Siencontramosdefinicionesparciales,recorremoselrbolensentidoascendente
hastacompletarlaestructura.
Sinoencontramosdefinicionesparalaestructura,encasodequeestaseadetipo
"heredada",apuntamosalaestructuradelelementoprincipaldelrbolde
contextos.Enestecaso,tambinconseguimoscompartirlasestructuras.Sila
estructuraesdetipo"noheredada",seutilizarnlosvalorespredeterminados.
Sielnodomsespecficonoaadevalores,tendremosqueefectuarclculos
adicionalesparatransformarlosenvaloresreales.Posteriormente,almacenamosen
cachenelrbolelresultadodelnodoparaquesepuedautilizarcomoelemento
secundario.
Encasodequeunelementotengaunelementodesumismonivelqueapunteal
mismonododelrbol,amboselementospuedencompartirelcontextodeestilo
completo.
Veamosunejemplo.SupongamosquetenemoselsiguientecdigoHTML:
<html>
<body>
<div class="err" id="div1">
<p>
this is a <span class="big"> big error </span>
this is also a
<span class="big"> very big error</span> error
</p>
</div>
<div class="err" id="div2">another error</div>
</body>
</html>
Ylassiguientesreglas:
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
38/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
1.
2.
3.
4.
5.
6.
div {margin:5px;color:black}
.err {color:red}
.big {margin-top:3px}
div span {margin-bottom:4px}
#div1 {color:blue}
#div2 {color:green}
Parasimplificarlatarea,digamosquetenemosquecompletarsolodosestructuras:
laestructuradecolorylaestructurademargen.Laestructuradecolorsolocontiene
unmiembro,elcolor,mientrasquelaestructurademargencontieneloscuatro
lados.
Elrboldereglasqueseobtienetendrlasiguienteapariencia(losnodosse
marcanas:"nombredelnodo:nmerodelareglaalaqueapunta"):
Figura:rboldereglas
Elrboldecontextostendrlasiguienteapariencia(nombredelnodo:nodode
reglaalaqueapunta):
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
39/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Figura:rboldecontextos
SupongamosqueanalizamoselcdigoHTMLyobtenemoslasegundaetiqueta
<div>.Tendremosquecrearuncontextodeestiloparaelnodoycompletarsus
estructurasdeestilo.
Buscamoslasreglasquecoincidancon<div>ydescubrimosqueson1,2y6.Esto
significaqueyaexisteunarutadelrbolquepodemosutilizarparanuestro
elemento,porloquesolonecesitamosaadirotronodoparalaregla6(nodoFdel
rboldereglas).
Crearemosuncontextodeestiloyloincluiremosenelrboldecontextos.Elnuevo
contextodeestiloapuntaralnodoFdelrboldereglas.
Ahoranecesitamoscompletarlasestructurasdeestilo.Empezaremoscompletando
laestructurademargen.Comoelltimonododeregla(F)noseaadeala
estructurademargen,podemosascenderporelrbolhastaencontraruna
estructuraalmacenadaencachcomputadaenlainsercindeunnodoanteriory
utilizarla.EncontraremosestaestructuraenelnodoB,queeselnododenivelms
superiorqueespecificareglasdemargen.
Yatenemosunadefinicinparalaestructuradecolor,porloquenopodemosutilizar
unaestructuraalmacenadaencach.Comoelcolortieneunatributo,no
necesitamosascenderporelrbolparacompletarotrosatributos.Computamosel
valorfinal(convertimoslacadenaaRGB,etc.)yalmacenamosencacheneste
nodolaestructuracomputada.
Eltrabajorelacionadoconelelemento<span>esanmssencillo.Buscamoslas
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
40/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
reglasquecoincidenconesteelementoyllegamosalaconclusindequelareglaa
laqueapuntaesG,comoelelemento"span"anterior.Comotenemoselementosdel
mismonivelqueapuntanalmismonodo,podemoscompartirelcontextodeestilo
completoyapuntarsoloalcontextodelelemento"span"anterior.
Enelcasodelasestructurasqueincluyenreglasheredadasdelelementoprincipal,
elprocesodealmacenamientoencachsellevaacaboenelrboldecontextos
(aunquelapropiedaddecolorsehereda,Firefoxtrataestapropiedadcomono
heredadaylaguardaencachenelrboldereglas).
Porejemplo,imaginemosqueaadimosreglasparalasfuentesdeunpargrafo:
p {font-family:Verdana;font size:10px;font-weight:bold}
Elelementodeprrafo,queesunelementosecundariodelelemento"div"delrbol
decontextos,podracompartirlamismaestructuradefuentequeelelemento
principal.Estecasosepodraaplicarsinoseespecificasenreglasdefuenteparael
prrafo.
EnWebKit,noexistenlosrbolesdereglas,porloquelasdeclaracionesque
coincidenserecorrencuatroveces.Enprimerlugar,seaplicanlaspropiedadesde
altaprioridaddemenorimportancia(estaspropiedadessedebenaplicarprimero
porquehayotrasquedependendeellas,como"display")acontinuacin,seaplican
laspropiedadesdealtaprioridaddemayorimportanciaposteriormente,las
propiedadesdeprioridadnormaldemenorimportanciay,porltimo,lasreglasde
prioridadnormaldemayorimportancia.Estosignificaquelaspropiedadesque
aparezcanvariasvecesseresolvernsegnelordendecascadacorrecto.Laltima
eslamsimportante.
Enresumen,compartirobjetosdeestilo(yaseaensutotalidadocompartiendo
solamentealgunasdesusestructuras)solucionalasincidencias1y3.Elrbolde
reglasdeFirefoxtambinayudaaaplicarlaspropiedadesenelordencorrecto.
41/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
p {color:blue}
Atributosdeestilointegrados,comoelsiguiente:
<p style="color:blue" />
AtributosvisualesHTML(queseasignanareglasdeestilorelevantes):
<p bgcolor="blue" />
Lasdosltimasfuentescoincidenfcilmenteconelelemento,yaqueesteincluye
losatributosdeestilo,ylosatributosHTMLsepuedenasignarutilizandoelelemento
comoclave.
Comosecomentpreviamenteenlaincidencia2,buscarunacoincidenciaconla
regladeCSSpuederesultarbastantecomplicado.Pararesolverestadificultad,las
reglassemanipulanparafacilitarelacceso.
Despusdeanalizarlahojadeestilo,lasreglasseaadenaunodevariosmapas
hash,deacuerdoconelselector.ExistenmapasorganizadosporID,nombrede
claseynombredeetiqueta,yunmapageneralparatodoloquenosepuedeincluir
enestascategoras.SielselectoresunID,lareglaseaadiralmapadeIDsies
unaclase,seaadiralmapadeclase,etc.
Estamanipulacinfacilitaconsiderablementelatareadeasignacindereglas.No
hacefaltarevisarcadadeclaracin,podemosextraerlasreglasrelevantesparaun
elementodelosmapas.Estaoptimizacineliminamsdel95%delasreglas,porlo
quenisiquieraesnecesariotenerlasencuentaduranteelprocesodebsquedade
coincidencias(4.1).
Analicemoslasreglasdeestiloqueseincluyenacontinuacin:
p.error {color:red}
#messageDiv {height:50px}
div {margin:5px}
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
42/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Laprimerareglaseinsertarenelmapadeclase,lasegundaenelmapadeIDyla
terceraenelmapadeetiquetas.
ParaelsiguientefragmentodeHTML:
<p class="error">an error occurred </p>
<div id=" messageDiv">this is a message</div>
Enprimerlugar,intentaremosbuscarreglasparaelelemento"p".Elmapadeclase
incluirunaclave"error"dentrodelaqueseencuentralareglapara"p.error".El
elemento"div"tendrreglasrelevantesenelmapadeID(laclaveeselID)yel
mapadeetiqueta.Portanto,soloquedaaveriguarqureglasextradasdelasclaves
realmentecoinciden.
Porejemplo,silaregladelelemento"div"fueralasiguiente:
table div {margin:5px}
seextraeradelmapadeetiqueta,porquelaclaveeselselectorsituadomsala
derecha,peronocoincidiraconelelemento"div",quenocuentaconunantecesor
detabla.
TantoWebKitcomoFirefoxutilizanestamanipulacin.
43/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
menoramayor):
1. declaracionesdelnavegador,
2. declaracionesnormalesdelusuario,
3. declaracionesnormalesdelautor,
4. declaracionesimportantesdelautor,
5. declaracionesimportantesdelusuario.
Lasdeclaracionesdelnavegadorsonlasquetienenmenosimportanciaylasdel
usuariosolotienenprioridadsobrelasdelautorsiestnmarcadascomo
importantes.Lasdeclaracionesconelmismoordenseordenansegnla
especificidady,posteriormente,segnelordenenelquesehanespecificado.Los
atributosvisualesHTMLsetraducenenlasdeclaracionesCSScorrespondientes.
Setratancomoreglasdeautordeprioridadbaja.
Especificidad
LaespecificacindeCSS2definelaespecificidaddelselectorcomoseindicaa
continuacin:
"1"siladeclaracinesdeunatributo"style"enlugardeunareglaconun
selectorencasocontrario,"0"(=a),
nmerodeatributosdeIDdelselector(=b),
nmerodeotrosatributosypseudoclasesdelselector(=c),
nmerodenombresdeelementosydepseudoelementosdelselector(=d).
Laespecificidadseobtienealconcatenarloscuatronmerosabcd(enunsistema
denmerosdebaseamplia).
Labasenumricaquesedebeutilizareselnmeroderecuentomselevadode
unadelascategoras.
Porejemplo,sia=14,sepuedeutilizarunabasehexadecimal.Enelimprobable
casodequea=17,sedeberutilizarunabasenumricade17dgitos.Elltimo
casoseraeldeunselectorcomohtmlbodydivdivp...con17etiquetasenel
selector,peroestoesmuypocoprobable.
Algunosejemplos:
*
*/
{}
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
44/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
li
{}
*/
li:first-line {}
*/
ul li
{}
*/
ul ol+li
{}
*/
h1 + *[rel=up]{}
*/
ul ol li.red {}
*/
li.red.level {}
*/
#x34y
{}
*/
style=""
*/
Proceso gradual
WebKitutilizaunindicadorquemuestrasisehancargadotodaslashojasdeestilo
denivelsuperior(incluidaslasde@imports).Silashojasdeestilonosecarganpor
completoalasociarlas,seutilizanmarcadoresdeposicin(indicndoloenel
documento),quesevuelvenacalcularunavezquesehancargadolashojasde
estilo.
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
45/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Diseo
Cuandoelrenderizadorsecreayseaadealrbol,notieneposicinnitamao.El
clculodeestosvaloresseconocecomodiseooreflujo.
HTMLutilizaunmodelodediseobasadoenflujo,loquesignificaque,lamayora
delasveces,losclculosgeomtricossepuedenrealizarconunasolaoperacin.
Loselementosqueentranposteriormente"enelflujo"nosueleninfluirenla
geometradeloselementosqueyaseencuentranenl,porloqueeldiseose
puedeaplicardeizquierdaaderechaydearribaaabajoentodoeldocumento.Hay
excepciones,comolastablasHTML,quepuedenrequerirmsdeunclculo(3.5).
Elsistemadecoordenadasserefierealmarcoraz.Seutilizanlascoordenadas
superioreizquierda.
Eldiseoconsisteenunprocesorecurrente.Seiniciaenelrenderizadorraz,que
correspondealelemento<html>deldocumentoHTML.Eldiseoseaplicadeforma
recurrenteatravsdetodalajerarquademarcosodeunapartedeella,calculando
informacingeomtricaparacadarenderizadorquelorequiere.
Laposicindelrenderizadorrazes0,0ysudimensineslaventanagrfica,es
decir,lapartevisibledelaventanadelnavegador.
Todoslosrenderizadoresincluyenunmtodode"diseo"ode"reflujo"ycadauno
activaelmtododediseodelelementosecundarioalquesedebeaplicarel
diseo.
46/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
conocecomodiseo"global".Acontinuacinseindicanalgunosmotivosporlosque
puedesernecesarioundiseoglobal:
1. uncambiodeestiloglobalqueafecteatodoslosrenderizadores,comoun
cambiodetamaodefuente,
2. uncambiodetamaodelapantalla.
Eldiseopuedeserincremental,encuyocasosolosesometernaunprocesode
diseolosrenderizadoresmarcadoscomo"dirty"(estehechopuedeprovocardaos
quepuedenrequerirprocesosdediseoadicionales).
Cuandolosrenderizadoresestnmarcadoscomo"dirty",seactiva(deforma
asncrona)eldiseoincremental(porejemplo,cuandoseaadenrenderizadores
nuevosalrbolderenderizacindespusdeincluircontenidoadicionaldelareden
elrboldeDOM).
Figura:diseoincrementalenelquesolosesometenaunproceso
dediseolosrenderizadoresmodificadosysuselementos
secundarios(3.6)
47/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
diseoincremental(serecorreelrbolyseaplicadiseoalosrenderizadores
marcadoscomo"dirty").
Lassecuenciasdecomandosquesolicitaninformacindeestilo,como
"offsetHeight",puedenactivareldiseoincrementaldeformasncrona.
Eldiseoglobalsesueleactivardeformasncrona.
Aveces,eldiseoseactivacomounadevolucindellamadaposterioraundiseo
inicialdebidoaloscambiosquesufrenalgunosatributos,comolaposicinde
desplazamiento.
Optimizaciones
Cuandoseactivaunprocesodediseoporun"cambiodetamao"oporuncambio
enlaposicindelrenderizador(noensutamao),eltamaodelosrenderizadores
setomadeunacachenlugarderecalcularse.
Enalgunoscasos,solosemodificaunsubrbol,porloqueelprocesodediseono
seiniciadesdelaraz.Estopuedesucederenaquelloscasosenlosqueelcambio
eslocalynoafectaaloselementosquelorodean,comoeltextoinsertadoen
camposdetexto(delocontrario,cadateclaactivaraundiseodesdelaraz).
El proceso de diseo
Elprocesodediseosueleseguirelpatrnqueseindicaacontinuacin:
1. Elrenderizadorprincipaldeterminasupropioancho.
2. Elrenderizadorprincipalanalizaloselementossecundariosy:
1. Sitaelrenderizadorsecundario(establecesuvalorxey).
2. Activalaaplicacindeldiseodelrenderizadorsecundarioencaso
necesario(siestmarcadocomo"dirty",sisetratadeundiseoglobalo
poralgunaotracausa),loquehacequesecalculelaalturadel
renderizadorsecundario.
3. Elrenderizadorprincipalutilizalasalturasacumulativasdeloselementos
secundariosylasalturasdelosmrgenesyelrellenoparaestablecersu
propiaaltura,queutilizarelelementoprincipaldelrenderizadorprincipal.
4. Estableceelbitdemodificacin(dirtybit)en"false".
Firefoxutilizaunobjeto"state"(nsHTMLReflowState)comoparmetrodediseo
(conocidocomo"reflujo").Entreotrosvalores,elobjetodeestadoincluyeelancho
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
48/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
deloselementosprincipales.
ElresultadodeldiseodeFirefoxesunobjeto"metrics"(nsHTMLReflowMetrics)
queincluirlaalturacomputadadelrenderizador.
WebKitcalcularasuanchodelasiguienteforma(clase"RenderBox",mtodo
"calcWidth"):
Elanchodelcontenedoreselvalormximodelapropiedad"availableWidth"
deloscontenedoresy0.Enestecaso,lapropiedad"availableWidth"esla
propiedad"contentWidth",quesecalculaas:
clientWidth() - paddingLeft() - paddingRight()
Laspropiedades"clientWidth"y"clientHeight"representanelinteriordeun
objeto,excluyendoelbordeylabarradedesplazamiento.
Elanchodeloselementoseselatributodeestilo"width",quesecalculacomo
unvalorabsolutocomputandoelporcentajedelanchodelcontenedor.
Acontinuacin,seaadenelrellenoylosbordeshorizontales.
Hastaahora,hemoscalculadoel"anchopreferente".Ahoravamosacalcularlos
anchosmnimoymximo.
Sielanchopreferenteessuperioralanchomximo,seutilizaelanchomximo.Si,
porelcontrario,esinferioralanchomnimo(launidadindivisiblemspequea),se
utilizaelanchomnimo.
Losvaloressealmacenanencachencasodequesenecesiteactivarunproceso
dediseosinquevareelancho.
Salto de lnea
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
49/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Elsaltodelneaseproducecuandounrenderizadordecidequedebeinterrumpirse
enmitaddeldiseo.Sedetieneycomunicaelsaltoalrenderizadorprincipal.El
renderizadorprincipalcrearenderizadoresadicionalesyactivasusprocesosde
diseo.
Pintura
Enlafasedepintura,serecorreelrbolderenderizacinyseactivaelmtodode
"pintura"delosrenderizadoresparaquesemuestresucontenidoenlapantalla.En
lafasedepintura,seutilizaelcomponentedeinfraestructuradelainterfaz.
Global e incremental
Aligualqueocurreenlafasedediseo,lapinturatambinpuedeserunproceso
global(sepintaelrbolderenderizacincompleto)oincremental.Enelcasodela
pinturaincremental,algunosdelosrenderizadoressemodificandeunaformaque
noafectaalatotalidaddelrbol.Elrenderizadormodificadoinvalidasurectngulo
correspondienteenlapantalla.Estohacequeelsistemaoperativoconsidereesta
regincomomodificadayquegenereuneventode"pintura".Elsistemaoperativo
fusionaingeniosamentevariasregionesenuna.EnChrome,estaoperacinresulta
mscomplicada,yaqueelrenderizadorseencuentraenunprocesodiferenteal
procesoprincipal.Chromesimulaelcomportamientodelsistemaoperativohasta
ciertopunto.Lapresentacinescuchaestoseventosydelegaelmensajeenlaraz
delarenderizacin.Serecorreelrbolhastallegaralrenderizadorcorrespondiente.
Enconsecuencia,sevuelveapintarelrenderizadory,normalmente,suselementos
secundarios.
50/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Cambios dinmicos
Losnavegadoresintentanejecutarlamenorcantidadposibledeaccionescuandose
produceuncambio.Portanto,siseproducencambiosenelcolordeunelemento,
solosevolverapintareseelemento.Siseproducencambiosenlaposicindeun
elemento,sevolveradisearyapintareseelemento,suselementossecundarios
y,posiblemente,loselementosqueestnasumismonivel.Siseaadeunnodo
DOM,seactivarunprocesodediseoydenuevapinturadelnodo.Siseproducen
cambiosdemayorimportancia,comoelaumentodeltamaodefuentedelelemento
"html",seinvalidarnlascachsyseactivarunnuevoprocesodediseoyde
pinturadelrbolcompleto.
51/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Bucle de eventos
Elsubprocesoprincipaldelnavegadoresunbucledeeventos,queconsisteenun
bucleinfinitoquemantieneactivoelproceso.Esperaaqueseinicieneventos(como
losdediseoypintura)ylosprocesa.EsteeselcdigodeFirefoxparaelbuclede
eventosprincipal:
while (!mExiting)
NS_ProcessNextEvent(thread);
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
52/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Figura:modelodecajasdeCSS2
Cadanodogeneraentre0yncajasdeestetipo.
Todosloselementostienenunapropiedad"display"quedeterminaeltipodecaja
quesegenerar.Ejemplos:
block - generates a block box.
inline - generates one or more inline boxes.
none - no box is generated.
Aunqueeltipodecajapredeterminadoes"inline",lahojadeestilodelnavegador
estableceotrostipospredeterminados.Porejemplo,eltipodevisualizacin
predeterminadodeunelemento"div"es"block".
Puedesconsultarunejemplodehojadeestilopredeterminadaenlapgina
www.w3.org/TR/CSS2/sample.html.
Esquema de posicionamiento
Acontinuacinseindicanlostrestiposdeesquemasdisponibles.
1. Flujonormal:elobjetosecolocaenfuncindellugarqueocupaenel
documento(estosignificaqueellugarqueocupaenelrbolderenderizacin
essimilarallugarqueocupaenelrboldeDOM)ysediseadeacuerdocon
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
53/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
susdimensionesyconeltipodecaja.
2. Flotante:elobjetosediseaprimerosegnelflujonormaly,posteriormente,
semuevehacialaderechaohacialaizquierdatodoloposible.
3. Posicionamientoabsoluto:elobjetosecolocaenelrbolderenderizacinde
unaformadiferentealaqueseutilizaparacolocarloenelrboldeDOM.
Lapropiedad"position"yelatributo"float"determinanelesquemade
posicionamiento.
Siseutilizan"static"y"relative",segeneraunflujonormal.
Siseutilizan"absolute"y"fixed",seproduceunposicionamientoabsoluto.
Cuandoelposicionamientoesesttico,nosedefineningunaposicin,porloquese
utilizaelposicionamientopredeterminado.Enotrosesquemas,elautorespecificala
posicin:arriba,abajo,izquierda,derecha.
Lossiguientesvaloresdeterminaneldiseodelacaja:
tipodecaja,
dimensionesdelacaja,
esquemadeposicionamiento,
informacinexterna,comoeltamaodelasimgenesyeltamaodela
pantalla.
Tipos de cajas
Cajadebloque:formaunbloque(tienesupropiorectnguloenlaventanadel
navegador).
Figura:cajadebloque
Cajaintegrada:notienebloquepropio,sinoqueseincluyeenunbloquede
contencin.
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
54/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Figura:cajasintegradas
Lascajasdebloquesecolocanenvertical,unadetrsdeotra,mientrasquelas
cajasintegradassedistribuyenhorizontalmente.
Figura:formatodecajasdebloqueeintegradas
Lascajasintegradassecolocandentrodelneaso"cajasdelnea".Cuandolas
cajassealineantomandocomopuntodereferenciasubase,esdecir,laparte
inferiordeunelementosealineaconotracajatomandocomoreferenciaunaparte
diferentealainferior,laslneastienencomomnimolamismaalturaquelacajams
alta,aunquepuedensermsaltas.Encasodequeelanchodelcontenedornosea
suficiente,lascajasintegradassecolocanendiferenteslneas.Estoesloquesuele
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
55/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
ocurrirenunprrafo.
Figura:lneas
Posicionamiento
Relativo
Posicionamientorelativo:elelementosecolocanormalmentey,acontinuacin,se
muevesegneldiferencialcorrespondiente.
Figura:posicionamientorelativo
Flotante
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
56/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Unacajaflotantesedesplazaalaizquierdaoaladerechadeunalnea.Loms
interesantedeesteposicionamientoesquelasdemscajasfluyenasualrededor.A
continuacin,seincluyeunejemploconcdigoHTML:
<p>
<img style="float:right" src="images/image.gif" width="100"
height="100">
Lorem ipsum dolor sit amet, consectetuer...
</p>
Laaparienciaseralasiguiente:
Figura:cajaflotante
Absoluto y fijo
Eldiseosedefineconexactitudindependientementedelflujonormal.Elelemento
noparticipaenelflujonormal.Lasdimensionessonrelativasalcontenedor.Enel
posicionamientofijo,elcontenedoreslaventanagrfica.
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
57/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
Figura:posicionamientofijo
Nota:lacajafijanosemoveraunqueelusuariosedesplaceporeldocumento.
Representacin en capas
Lascapasseespecificanconlapropiedad"zindex"deCSS.Representalatercera
dimensindelacaja,esdecir,suposicinalolargodel"ejez".
Lascajassedividenenpilas(denominadas"contextosdepila").Encadapila,los
elementosquequedandebajosepintanenprimerlugar,yloselementosque
quedanencimasecolocanenlapartesuperior,mscercadelusuario.Encasode
superposicin,seocultaelelementoquequedadebajo.
Laspilasseordenansegnlapropiedad"zindex".Lascajasquetienenla
propiedad"zindex"formanunapilalocal.Laventanagrficaformalapilaexterior.
Ejemplo:
<style type="text/css">
div {
position: absolute;
left: 2in;
top: 2in;
}
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
58/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
</style>
<p>
<div
style="z-index: 3;background-color:red; width: 1in;
height: 1in; ">
</div>
<div
style="z-index: 1;background-color:green;width: 2in;
height: 2in;">
</div>
</p>
Seobtendrelsiguienteresultado:
Figura:posicionamientofijo
Aunqueelelemento"div"rojoprecedaalverdeenelmarcadoysepinteenprimer
lugarenunflujonormal,elvalordelapropiedad"zindex"essuperior,porloquese
encuentramsadelantadoenlapiladelacajaraz.
Recursos
1. Arquitecturadelnavegador
1. Grosskurth,Alan.AReferenceArchitectureforWebBrowsers(pdf)
2. Gupta,Vineet.HowBrowsersWorkPart1Architecture
2. Anlisis
1. Aho,Sethi,Ullman,Compilers:Principles,Techniques,andTools,
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
59/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
tambinconocidocomo"TheDragonBook"(Ellibrodeldragn),
AddisonWesley,1986
2. RickJelliffe.TheBoldandtheBeautiful:twonewdraftsforHTML5
3. Firefox
1. L.DavidBaron,FasterHTMLandCSS:LayoutEngineInternalsforWeb
Developers
2. L.DavidBaron,FasterHTMLandCSS:LayoutEngineInternalsforWeb
Developers(vdeodeGoogleTechTalks)
3. L.DavidBaron,Mozilla'sLayoutEngine
4. L.DavidBaron,MozillaStyleSystemDocumentation
5. ChrisWaterson,NotesonHTMLReflow
6. ChrisWaterson,GeckoOverview
7. AlexanderLarsson,ThelifeofanHTMLHTTPrequest
4. WebKit
1. DavidHyatt,ImplementingCSS(part1)
2. DavidHyatt,AnOverviewofWebCore
3. DavidHyatt,WebCoreRendering
4. DavidHyatt,TheFOUCProblem
5. EspecificacionesdeW3C
1. HTML4.01Specification
2. W3CHTML5Specification
3. CascadingStyleSheetsLevel2Revision1(CSS2.1)Specification
6. Instruccionesdecreacindenavegadores
1. Firefox:https://developer.mozilla.org/en/Build_Documentation
2. WebKit:http://webkit.org/building/build.html
TaliGarsielesunadesarrolladoradeIsrael.Empezsuandadura
comodesarrolladorawebenelao2000ysefamiliarizconel
"malfico"modelodecapasdeNetscape.AligualqueRichard
Feynmann,sentafascinacinpordescubrircmofuncionabanlascosas,porlo
queempezainvestigarlosmecanismosdefuncionamientointernodelos
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
60/61
25/3/2015
Cmofuncionanlosnavegadores:loquehaydetrsdelosnavegadoreswebactualesHTML5Rocks
navegadoresyadocumentartodossusdescubrimientos.Talitambinha
publicadounapequeaguasobrerendimientodeaplicacionescliente.
Traducciones
Estapginasehatraducidoaljaponsdosveces!Cmofuncionanlos
navegadores:loquehaydetrsdelosnavegadoreswebactuales(ja)por@_kosei_
yWEBpor
@ikeike443y@kiyoto01.Graciasatodos!
http://www.html5rocks.com/es/tutorials/internals/howbrowserswork/
61/61