¿Por qué cambia el diseño en IE cuando UL está solo en un TD frente a tener un DIV vacío adicional?
-
06-07-2019 - |
Pregunta
Estoy agregando navegación de pestañas basada en CSS a un sitio que todavía está usando un diseño basado en tablas. Cuando coloco mi lista de pestañas dentro de un td, aparece un & Quot; gap & Quot; que puedes ver Si pongo un div vacío con ancho: 100% en el td, entonces mi lista de pestañas se muestra correctamente. (También funciona bien fuera de la mesa).
¿Por qué el div hace que las pestañas se distribuyan correctamente y hay una mejor manera de hacerlo sin agregar un div sin contenido?
Aquí está mi caso de prueba:
<!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><title>
Strange gap
</title>
<style type ="text/css" >
/* stolen from http://unraveled.com/publications/css_tabs/, then hacked to death */
ul.tabnav { /* general settings */
border-bottom: 1px solid #cbcbcd; /* set border COLOR as desired */
list-style-type: none;
padding: 3px 10px 3px 10px; /* THIRD number must change with respect to padding-top (X) below */
margin: 3px 0px 0px 0px; /* Right on top of the next row */
}
ul.tabnav li { /* do not change */
display: inline;
}
ul.tabnav li.current { /* settings for selected tab */
border-bottom: 1px solid #fff; /* set border color to page background color */
background-color: #fff; /* set background color to match above border color */
/* border: solid 1px red; */
}
ul.tabnav li.current a { /* settings for selected tab link */
background-color: #fff; /* set selected tab background color as desired */
color: #000; /* set selected tab link color as desired */
position: relative;
top: 1px;
padding-top: 4px; /* must change with respect to padding (X) above and below */
}
ul.tabnav li a { /* settings for all tab links */
padding: 3px 4px; /* set padding (tab size) as desired; FIRST number must change with respect to padding-top (X) above */
border: 1px solid #cbcbcd; /* set border COLOR as desired; usually matches border color specified in #tabnav */
background-color: #cbcbcd; /* set unselected tab background color as desired */
color: #666; /* set unselected tab link color as desired */
margin-right: 0px; /* set additional spacing between tabs as desired */
text-decoration: none;
border-bottom: none;
}
/* end css tabs */
</style>
</head>
<body>
<table>
<tr>
<td>
I'm making some tab navigation with css. I copied the code
from <a href=" http://unraveled.com/publications/css_tabs/"> http://unraveled.com/publications/css_tabs/</a>,
and hacked it up. There's an odd behavior that I see on IE (v 7).
There's a gap below.
</td>
</tr>
<tr>
<td>
<ul class="tabnav">
<li class="current"><a >Home</a></li>
<li ><a >Search</a></li>
</ul>
</td>
</tr>
<tr>
<td>
No gap below this
</td>
</tr>
<tr>
<td >
<div style="width: 100%"><!-- This div forces the menu to render properly in IE7. I don't know why --></div>
<ul class="tabnav">
<li class="current"><a >Home</a></li>
<li ><a>Search</a></li>
</ul>
</td>
</tr>
<tr>
<td>
why? The difference is the presence of a div with style="width: 100%" on it in the second
case. I don't know why this fixes the rendering; I'd like a better way to do it without adding an
extra empty div. This page should be in standards mode (or at least non-quirks mode).
</td>
</tr>
</table>
For comparison, it works fine outside of a table:
<ul class="tabnav">
<li class="current"><a >Home</a></li>
<li ><a >Search</a></li>
</ul>
</body>
</html>
Ahora he cruzado esto a mi blog: Codificación controlada por tocino: ¿Por qué cambia el diseño en IE cuando UL está solo en un TD frente a un DIV vacío adicional? , con una captura de pantalla para que la gente pueda ver de lo que estoy hablando.
Aquí está la captura de pantalla:
Solución
La brecha es causada por las formas divertidas de IE con las listas. Dado que las etiquetas ul
solo pueden contener <li>
s, IE aparentemente también cree que el espacio en blanco entre los elementos de la lista es inapropiado y lo mueve dentro del elemento de la lista anterior, en su caso siguiendo el <a>
.
Eso hace que el fondo blanco de la pestaña seleccionada se superponga con el borde inferior de <ul>
s (debido a su posición).
Parece que la forma más fácil de resolverlo en este ejemplo es simplemente eliminar el color de fondo en ul.tabnav li.current
. De hecho, creo que puede eliminar todo ese conjunto de reglas, ya que el borde tampoco hace nada.
Si nada de eso lo ayuda a arreglarlo en el sitio real, un último recurso podría ser eliminar todo el espacio en blanco fuera de las etiquetas <=>. Por ejemplo,
<ul><li><a>Home</a></li><li>etc.</li></ul>
o algo como esto si desea conservar una apariencia de formato:
<ul><!--
--><li><a>Home</a></li><!--
--><li>etc.</li><!--
--></ul>
Pero ese espacio en blanco también es todo lo que es responsable del espacio entre las pestañas, por lo que tendría que agregar un margen derecho para recuperarlo.