¿Cómo elimino el espacio entre los elementos de bloque en línea?


Dado este HTML y CSS:

span {
    display:inline-block;
    width:100px;
    background-color:palevioletred;
}
<p>
    <span> Foo </span>
    <span> Bar </span>
</p>

Como resultado, habrá un espacio de 4 píxeles de ancho entre los elementos SPAN.

Demo: http://jsfiddle.net/dGHFV/

Entiendo por qué sucede esto, y también sé que podría deshacerme de ese espacio eliminando el espacio en blanco entre los elementos SPAN en el código fuente HTML, así:

<p>
    <span> Foo </span><span> Bar </span>
</p>

Sin embargo, esperaba una solución CSS que no requiera el HTML código fuente para ser manipulado.

Sé cómo resolver esto con JavaScript, eliminando los nodos de texto del elemento contenedor (el párrafo), de la siguiente manera:

// jQuery
$('p').contents().filter(function() { return this.nodeType === 3; }).remove();

Demo: http://jsfiddle.net/dGHFV/1/

Pero ¿se puede resolver este problema solo con CSS?

 891
Author: Peter Mortensen, 2011-02-22

30 answers

Dado que esta respuesta se ha vuelto bastante popular, la estoy reescribiendo significativamente.

No olvidemos la pregunta real que se hizo:

¿Cómo eliminar el espacio entre elementos de bloque en línea? Esperaba para una solución CSS que no requiere que el código fuente HTML sea manipulado. ¿Se puede resolver este problema solo con CSS?

es posible resolver este problema solo con CSS, pero no hay completamente correcciones CSS robustas.

La solución que tenía en mi respuesta inicial era agregar font-size: 0 al elemento padre, y luego declarar un font-size sensible sobre los hijos.

Http://jsfiddle.net/thirtydot/dGHFV/1361 /

Esto funciona en versiones recientes de todos los navegadores modernos. Funciona en IE8. No funciona en Safari 5, pero funciona en Safari 6. Safari 5 es casi un navegador muerto (0.33%, agosto 2015 ).

La mayoría de los los posibles problemas con los tamaños de fuente relativos no son complicados de solucionar.

Sin embargo, si bien esta es una solución razonable si necesita específicamente una corrección de CSS, no es lo que recomiendo si es libre de cambiar su HTML (como la mayoría de nosotros).


Esto es lo que yo, como desarrollador web razonablemente experimentado, realmente hago para resolver este problema:

<p>
    <span>Foo</span><span>Bar</span>
</p>

Sí, así es. Elimino el espacio en blanco en el HTML entre el bloque en línea elemento.

Es fácil. Es simple. Funciona en todas partes. Es la solución pragmática.

A veces tiene que considerar cuidadosamente de dónde vendrá el espacio en blanco. ¿Agregar otro elemento con JavaScript agregará espacios en blanco? No, no si lo haces correctamente.

Vamos a un viaje mágico de diferentes maneras de eliminar el espacio en blanco, con un nuevo HTML:

<ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>
  • Puedes hacer esto, como suelo hacer do:

    <ul>
        <li>Item 1</li><li>Item 2</li><li>Item 3</li>
    </ul>
    

    Http://jsfiddle.net/thirtydot/dGHFV/1362 /

  • O, esto:

    <ul>
        <li>Item 1</li
        ><li>Item 2</li
        ><li>Item 3</li>
    </ul>
    
  • O, use comentarios:

    <ul>
        <li>Item 1</li><!--
        --><li>Item 2</li><!--
        --><li>Item 3</li>
    </ul>
    
  • O, puede incluso omitir ciertas etiquetas de cierre por completo (todos los navegadores están bien con esto):

    <ul>
        <li>Item 1
        <li>Item 2
        <li>Item 3
    </ul>
    

Ahora que he ido y te he aburrido hasta la muerte con "mil formas diferentes de eliminar los espacios en blanco, por thirtydot", espero que te hayas olvidado de todo font-size: 0.


Alternativamente, ahora puede usar flexbox para lograr muchos de los diseños que puede haber utilizado anteriormente para inline-block: https://css-tricks.com/snippets/css/a-guide-to-flexbox /

 864
Author: thirtydot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-23 16:56:55

Para los navegadores conformes con CSS3 existe white-space-collapsing:discard

Véase: http://www.w3.org/TR/2010/WD-css3-text-20101005/#white-space-collapsing

 140
Author: HBP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-16 16:56:23

Ok, aunque he votado a favor de las respuestas font-size: 0; y not implemented CSS3 feature, después de intentarlo descubrí que ninguno de ellos es una solución real.

En realidad, no hay ni una solución sin efectos secundarios fuertes.

Entonces Decidí eliminar los espacios (esta respuesta es sobre este argumento) entre los divs inline-block de mi fuente HTML (JSP), cambiando esto:

<div class="inlineBlock">
    I'm an inline-block div
</div>
<div class="inlineBlock">
    I'm an inline-block div
</div>

A esto

<div class="inlineBlock">
    I'm an inline-block div
</div><div class="inlineBlock">
    I'm an inline-block div
</div>

Eso es feo, pero funciona.

Pero, espera minuto... ¿qué pasa si estoy generando mis divs dentro Taglibs loops (Struts2, JSTL, etc...) ?

Por ejemplo:

<s:iterator begin="0" end="6" status="ctrDay">
    <br/>
    <s:iterator begin="0" end="23" status="ctrHour">
        <s:push value="%{days[#ctrDay.index].hours[#ctrHour.index]}">
            <div class="inlineBlock>
                I'm an inline-block div in a matrix 
                (Do something here with the pushed object...)
           </div>
       </s:push>
    </s:iterator>
</s:iterator>

No es absolutamente pensable insertar todas esas cosas, significaría{[19]]}

<s:iterator begin="0" end="6" status="ctrDay">
    <br/>
    <s:iterator begin="0" end="23" status="ctrHour"><s:push value="%{days[#ctrDay.index].hours[#ctrHour.index]}"><div class="inlineBlock>
                I'm an inline-block div in a matrix             
                (Do something here with the pushed object...)
           </div></s:push></s:iterator>
</s:iterator>

Eso no es legible, difícil de mantener y entender, etc...

La solución que encontré:

Utilice comentarios HTML para conectar el final de un div al comienzo de la siguiente!

<s:iterator begin="0" end="6" status="ctrDay">
   <br/>
   <s:iterator begin="0" end="23" status="ctrHour"><!--
    --><s:push value="%{days[#ctrDay.index].hours[#ctrHour.index]}"><!--
        --><div class="inlineBlock>
                I'm an inline-block div in a matrix             
                (Do something here with the pushed object...)
           </div><!--
    --></s:push><!--
--></s:iterator>
</s:iterator>

De esta manera usted tendrá un legible y código correctamente indentado.

Y, como efecto secundario positivo, el HTML source, aunque infestado por comentarios vacíos, resultará correctamente indentado;

Tomemos el primer ejemplo, en mi humilde opinión esto: {[19]]}

    <div class="inlineBlock">
        I'm an inline-block div
    </div><!--
 --><div class="inlineBlock">
        I'm an inline-block div
    </div>

Es mejor que esto{[19]]}

    <div class="inlineBlock">
         I'm an inline-block div
    </div><div class="inlineBlock">
         I'm an inline-block div
    </div>

Espero que eso ayude...

 79
Author: Andrea Ligios,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-12 23:05:53

Agregue comentarios entre elementos para NO tener un espacio en blanco. Para mí es más fácil que restablecer el tamaño de fuente a cero y luego volver a configurarlo.

<div>
    Element 1
</div><!--
--><div>
    Element 2
</div>
 34
Author: Radek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-13 12:02:16

Esta es la misma respuesta que di en el relacionado: Display: Inline block - ¿Qué es ese espacio?

En realidad hay una forma muy simple de eliminar los espacios en blanco del bloque en línea que es fácil y semántica. Se llama una fuente personalizada con espacios de ancho cero, que le permite contraer el espacio en blanco (agregado por el navegador para los elementos en línea cuando están en líneas separadas) a nivel de fuente utilizando una fuente muy pequeña. Una vez que declare la fuente, simplemente cambie el font-family en el contenedor y de vuelta a los niños, y voila. Así:

@font-face{ 
    font-family: 'NoSpace';
    src: url('../Fonts/zerowidthspaces.eot');
    src: url('../Fonts/zerowidthspaces.eot?#iefix') format('embedded-opentype'),
         url('../Fonts/zerowidthspaces.woff') format('woff'),
         url('../Fonts/zerowidthspaces.ttf') format('truetype'),
         url('../Fonts/zerowidthspaces.svg#NoSpace') format('svg');
}

body {
    font-face: 'OpenSans', sans-serif;
}

.inline-container {
    font-face: 'NoSpace';
}

.inline-container > * {
    display: inline-block;
    font-face: 'OpenSans', sans-serif;
}

Traje a gusto. Aquí hay una descarga de la fuente que acabo de preparar en font-forge y convertido con FontSquirrel webfont generator. Me llevó 5 minutos. Se incluye la declaración css @font-face: fuente zipped zero-width space. Está en Google Drive, por lo que deberá hacer clic en Archivo > Descargar para guardarlo en su computadora. Probablemente también tendrá que cambiar las rutas de fuente si copia la declaración a su archivo css principal.

 27
Author: Aldfrith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:42

Todas las técnicas de eliminación de espacio para display:inline-block son trucos desagradables...

Usar Flexbox

Es impresionante, resuelve todo este diseño de bloques en línea bs, y a partir de 2017 tiene 98% de compatibilidad con el navegador (más si no te importan los antiguos IEs).

 27
Author: Yarin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-27 01:49:36

Añade display: flex; al elemento padre. Aquí está la solución con un prefijo:

p {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
}
span {
  float: left;
  display: inline-block;
  width: 100px;
  background: blue;
  font-size: 30px;
  color: white;
  text-align: center;
}
<p>
  <span> Foo </span>
  <span> Bar </span>
</p>

Actualizar

Versión simplificada

p {
  display: flex;
}

span {
  width: 100px;
  background: tomato;
  font-size: 30px;
  color: white;
  text-align: center;
}
<p>
  <span> Foo </span>
  <span> Bar </span>
</p>
 16
Author: Muhammed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-02 09:08:27

Dos opciones más basadas en Módulo de Texto CSS Nivel 3 (en lugar de white-space-collapsing:discard que había sido eliminado del borrador de especificaciones):

  • word-spacing: -100%;

En teoría, debería hacer exactamente lo que se necesita: acortar los espacios en blanco entre 'palabras' por el 100% de la anchura del carácter del espacio, es decir a cero. Pero parece que no funciona en ninguna parte, por desgracia, y esto la característica está marcada como "en riesgo" (se puede eliminar de la especificación, demasiado).

  • word-spacing: -1ch;

Acorta los espacios entre palabras por el ancho del dígito '0'. En una fuente monoespaciada debe ser exactamente igual al ancho del carácter de espacio (y cualquier otro carácter también). Esto funciona en Firefox 10+, Chrome 27+, y casi funciona en Internet Explorer 9+.

Fiddle

 15
Author: Ilya Streltsyn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-08 23:54:32

Desafortunadamente, estamos en 2015 y white-space-collapse todavía no se ha implementado.

Mientras tanto, dar el elemento padre font-size: 0; y establecer el font-size en los hijos. Esto debería hacer el truco

 14
Author: dipole_moment,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-02 23:40:31

Use flexbox y haga una reserva (de las sugerencias anteriores) para navegadores más antiguos:

ul {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
}
 13
Author: Plippie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-08 23:55:18

Font-size:0; puede ser un poco más complicado de manejar...

Creo que el siguiente par de líneas es mucho mejor y más reutilizable, y ahorrador de tiempo que cualquier otro método. Yo personalmente uso esto:

.inline-block-wrapper>.inline-block-wrapper,
.inline-block-wrapper{letter-spacing: -4px;}
.inline-block-wrapper>*{letter-spacing: 0;display: inline-block;}

/* OR better shorter name...*/
.items>.items,
.items{letter-spacing: -4px;}
.items>*{letter-spacing: 0;display: inline-block;}

Entonces puede usarlo de la siguiente manera...

<ul class="items">
   <li>Item 1</li>
   <li>Item 2</li>
   <li>Item 3</li>
</ul>

Por lo que sé (puedo estar equivocado), pero todos los navegadores admiten este método.

EXPLICACIÓN :

Esto funciona (tal vez-3px puede ser mejor) exactamente como usted anticiparía que funcionaría.

  • usted copie y pegue el código (una vez)
  • luego en su html simplemente use class="items" en el padre de cada bloque en línea.

NO tendrá la necesidad de volver al css y agregar otra regla css para sus nuevos bloques en línea.

Resolviendo dos problemas a la vez.

También tenga en cuenta el > (mayor que el signo) esto significa que */todos los hijos deben ser inline-block.

Http://jsfiddle.net/fD5u3 /

NOTA: He modificado para acomodar a heredar espaciado de letras cuando un wrapper tiene un wrapper hijo.

 9
Author: Val,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-28 15:23:31

Simple:

item {
  display: inline-block;
  margin-right: -0.25em;
}

No hay necesidad de tocar el elemento padre.

Única condición aquí: el tamaño de fuente del elemento no debe ser definido (debe ser igual al tamaño de fuente del padre).

0.25em es el valor predeterminado word-spacing

W3Schools-propiedad de espaciado de palabras

 8
Author: MA-Maddin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-09 00:00:35

Aunque, técnicamente no es una respuesta a la pregunta: "¿Cómo elimino el espacio entre los elementos de bloque en línea?"

Puede probar la solución flexbox y aplicar el siguiente código y se eliminará el espacio.

p {
   display: flex;
   flex-direction: row;
}

Puede obtener más información al respecto en este enlace: https://css-tricks.com/snippets/css/a-guide-to-flexbox /

 8
Author: Cyan Baltazar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-10 06:49:09

Tuve este problema en este momento y desde font-size:0; he encontrado que en Internet Explorer 7 el problema sigue siendo porque Internet Explorer piensa "Tamaño de fuente 0?!?! ¿Estás loco?"- Por lo tanto, en mi caso he Eric Meyer CSS reset y con font-size:0.01em; Tengo una diferencia de 1 píxel de Internet Explorer 7 a Firefox 9, así que, creo que esto puede ser una solución.

 7
Author: Nelson Conceição,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-08 23:52:21

Generalmente usamos elementos como este en líneas diferentes, pero en el caso de display:inline-block usar etiquetas en la misma línea eliminará el espacio, pero en una línea diferente no lo hará.

Un ejemplo con etiquetas en una línea diferente:

p span {
  display: inline-block;
  background: red;
}
<p>
  <span> Foo </span>
  <span> Bar </span>
</p>

Ejemplo con etiquetas en la misma línea

p span {
  display: inline-block;
  background: red;
}
<p>
  <span> Foo </span><span> Bar </span>
</p>

Otro método eficiente es un trabajo CSS que usa font-size:0 para el elemento padre y da font-size a un elemento hijo tanto como usted querer.

p {
  font-size: 0;
}
p span {
  display: inline-block;
  background: red;
  font-size: 14px;
}
<p>
  <span> Foo </span>
  <span> Bar </span>
</p>

Los métodos anteriores pueden no funcionar en algún lugar dependiendo de toda la aplicación, pero el último método es una solución infalible para esta situación y se puede usar en cualquier lugar.

 7
Author: Gaurav Aggarwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-08 23:59:08

No estoy muy seguro si desea hacer dos tramos azules sin un espacio o desea manejar otro espacio en blanco, pero si desea eliminar el espacio:

span {
    display: inline-block;
    width: 100px;
    background: blue;
    font-size: 30px;
    color: white;
    text-align: center;

    float: left;
}

Y hecho.

 6
Author: FlyC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-09 00:13:05

He estado abordando esto recientemente y en lugar de configurar el padre font-size:0 y luego configurar el hijo de nuevo a un valor razonable, he estado obteniendo resultados consistentes al configurar el contenedor padre letter-spacing:-.25em y luego el hijo de nuevo a letter-spacing:normal.

En un hilo alternativo vi a un comentarista mencionar que font-size:0 no siempre es ideal porque la gente puede controlar los tamaños mínimos de fuente en sus navegadores, negando por completo la posibilidad de establecer el tamaño de fuente a cero.

El uso de ems parece funcionar independientemente de si el tamaño de fuente especificado es 100%, 15pt o 36px.

Http://cdpn.io/dKIjo

 5
Author: StephenESC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-02 14:28:54

p {
  display: flex;
}
span {
  float: left;
  display: inline-block;
  width: 100px;
  background: red;
  font-size: 30px;
  color: white;
}
<p>
  <span> hello </span>
  <span> world </span>
</p>
 4
Author: Autumnswind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-01 05:06:46

Creo que hay un método muy simple/viejo para esto que es compatible con todos los navegadores, incluso IE 6/7. Podríamos simplemente establecer letter-spacing a un valor negativo grande en padre y luego volver a establecerlo a normal en elementos hijos:

body { font-size: 24px }
span { border: 1px solid #b0b0c0; } /* show borders to see spacing */

.no-spacing { letter-spacing: -1em; } /* could be a large negative value */
.no-spacing > * { letter-spacing: normal; } /* => back to normal spacing */
<p style="color:red">Wrong (default spacing):</p>

<div class="">
  <span>Item-1</span>
  <span>Item-2</span>
  <span>Item-3</span>
</div>

<hr/>

<p style="color:green">Correct (no-spacing):</p>

<div class="no-spacing">
  <span>Item-1</span>
  <span>Item-2</span>
  <span>Item-3</span>
</div>
 4
Author: S.Serpooshan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-27 06:01:01

Con corchetes PHP:

ul li {
  display: inline-block;
}
    <ul>
        <li>
            <div>first</div>
        </li><?
        ?><li>
            <div>first</div>
        </li><?
        ?><li>
            <div>first</div>
        </li>
    </ul>
 2
Author: Alexufo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-09 00:13:56

Voy a ampliar un poco la respuesta de user5609829, ya que creo que las otras soluciones aquí son demasiado complicadas/demasiado trabajo. Aplicar un margin-right: -4px a los elementos de bloque en línea eliminará el espaciado y es compatible con todos los navegadores. Ver el violín actualizado aquí. Para aquellos interesados en usar márgenes negativos, intente dar este una lectura.

 1
Author: Jrd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-09 12:42:40

La respuesta más simple a esta pregunta es agregar.

Css

float: left;

Codepen enlace: http://jsfiddle.net/dGHFV/3560 /

 1
Author: Gokul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-10 18:24:05

La especificación de Nivel 4 del Módulo de Texto CSS define un text-space-collapse propiedad, que permiten controlar cómo se procesa el espacio en blanco dentro y alrededor de un elemento.

Así que, con respecto a su ejemplo, solo tendría que escribir esto:

p {
  text-space-collapse: discard;
}

Desafortunadamente, ningún navegador está implementando esta propiedad todavía (a partir de septiembre de 2016) como se mencionó en los comentarios a la respuesta de HBP.

 0
Author: Sebastian Zartner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:03:09

Añadir white-space: nowrap al elemento contenedor:

CSS:

* {
    box-sizing: border-box;
}
.row {
    vertical-align: top;
    white-space: nowrap;
}
.column{
    float: left;
    display: inline-block;
    width: 50% // Or whatever in your case
}

HTML:

<div class="row">
    <div class="column"> Some stuff</div>
    <div class="column">Some other stuff</div>
</div>

Aquí está el Émbolo .

 0
Author: Milad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-09 00:02:09

Probé la solución font-size: 0 para un problema similar en React y Sass para un proyecto de Campamento de Código Libre en el que estoy trabajando actualmente.

Y funciona!

Primero, el script:

var ActionBox = React.createClass({
    render: function() {
        return(
            <div id="actionBox">
                </div>
        );
    },
});

var ApplicationGrid = React.createClass({
    render: function() {
        var row = [];
        for(var j=0; j<30; j++){
            for(var i=0; i<30; i++){
                row.push(<ActionBox />);
            }
        }
        return(
            <div id="applicationGrid">
                {row}
            </div>
        );
     },
});

var ButtonsAndGrid = React.createClass({
    render: function() {
        return(
            <div>
                <div id="buttonsDiv">
                </div>
                <ApplicationGrid />
            </div>
        );
    },
});

var MyApp = React.createClass({
    render: function() {
        return(
            <div id="mainDiv">
                <h1> Game of Life! </h1>
                <ButtonsAndGrid />
            </div>
        );
    },
});

ReactDOM.render(
    <MyApp />,
    document.getElementById('GoL')
);

Entonces, el Sass:

html, body
    height: 100%

body
    height: 100%
    margin: 0
    padding: 0

#mainDiv
    width: 80%
    height: 60%
    margin: auto
    padding-top: 5px
    padding-bottom: 5px
    background-color: DeepSkyBlue
    text-align: center
    border: 2px solid #381F0B
    border-radius: 4px
    margin-top: 20px

#buttonsDiv
    width: 80%
    height: 60%
    margin: auto
    margin-bottom: 0px
    padding-top: 5px
    padding-bottom: 0px
    background-color: grey
    text-align: center
    border: 2px solid #381F0B
    border-radius: 4px
    margin-top: 20px

#applicationGrid
    width: 65%
    height: 50%
    padding-top: 0px
    margin: auto
    font-size: 0
    margin-top: 0px
    padding-bottom: 5px
    background-color: white
    text-align: center
    border: 2px solid #381F0B
    border-radius: 4px
    margin-top: 20px

#actionBox
    width: 20px
    height: 20PX
    padding-top: 0px
    display: inline-block
    margin-top: 0px
    padding-bottom: 0px
    background-color: lightgrey
    text-align: center
    border: 2px solid grey
    margin-bottom: 0px
 0
Author: John Gillespie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-09 00:11:52

Solo por diversión: una solución fácil de JavaScript.

document.querySelectorAll('.container').forEach(clear);

function clear(element) {
  element.childNodes.forEach(check, element);
}

function check(item) {
  if (item.nodeType === 3) this.removeChild(item);
}
span {
  display: inline-block;
  width: 100px;
  background-color: palevioletred;
}
<p class="container">
  <span> Foo </span>
  <span> Bar </span>
</p>
 0
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-10 20:16:04

Hay muchas soluciones como font-size:0,word-spacing,margin-left,letter-spacing y así sucesivamente.

Normalmente prefiero usar letter-spacing porque

  1. parece bien cuando asignamos un valor que es mayor que el ancho del espacio adicional(por ejemplo, -1em).
  2. Sin embargo, no estará bien con word-spacing y margin-left cuando establecemos un valor más grande como -1em.
  3. Usar font-size no es conveniente cuando intentamos usar em como unidad font-size.

Así que, letter-spacing parece ser el mejor opción.

Sin embargo, tengo que advertirles {[19]]}

Cuando usas letter-spacing es mejor que uses -0.3em o -0.31em no otros.

* {
  margin: 0;
  padding: 0;
}
a {
  text-decoration: none;
  color: inherit;
  cursor: auto;
}
.nav {
  width: 260px;
  height: 100px;
  background-color: pink;
  color: white;
  font-size: 20px;
  letter-spacing: -1em;
}
.nav__text {
  width: 90px;
  height: 40px;
  box-sizing: border-box;
  border: 1px solid black;
  line-height: 40px;
  background-color: yellowgreen;
  text-align: center;
  display: inline-block;
  letter-spacing: normal;
}
<nav class="nav">
    <span class="nav__text">nav1</span>
    <span class="nav__text">nav2</span>
    <span class="nav__text">nav3</span>
</nav>

Si estás usando Chrome (versión de prueba 66.0.3359.139) u Opera (versión de prueba 53.0.2907.99), lo que ves podría ser:

introduzca la descripción de la imagen aquí

Si estás usando Firefox (60.0.2), IE10 o Edge, lo que ves puede ser:

introduzca la descripción de la imagen aquí

Eso es interesante. Así que, comprobé el mdn-letter-spacing y encontré esto:

Longitud

Especifica espacio adicional entre caracteres además del espacio predeterminado entre caracteres. Los valores pueden ser negativos, pero puede haber límites específicos de la implementación. Los agentes de usuario no pueden aumentar o disminuir el espacio entre caracteres para justificar el texto.

Parece que esta es la razón.

 0
Author: xianshenglu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-18 11:15:18

Agregue letter-spacing:-4px; en el css principal p y agregue letter-spacing:0px; a su css span.

span {
  display:inline-block;
  width:100px;
  background-color:palevioletred;
  vertical-align:bottom;
  letter-spacing:0px;
}

p {
  letter-spacing:-4px;
}
<p>
    <span> Foo </span>
    <span> Bar </span>
</p>
 0
Author: Mark Salvania,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-07 22:04:37

Una otra manera que encontré es la aplicación de margen izquierdo como valores negativos, excepto el primer elemento de la fila.

span { 
 display:inline-block;
 width:100px;
 background:blue;
 font-size:30px;
 color:white; 
 text-align:center;
 margin-left:-5px;
}
span:first-child{
 margin:0px;
}
 -1
Author: Sukhminder Parmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-15 04:16:32

Cada pregunta, que trata de eliminar el espacio entre inline-block s me parece un <table>...

Intenta algo como esto:

p {
  display: table;
}
span {
  width: 100px;
  border: 1px solid silver; /* added for visualization only*/
  display: table-cell;
}
<p>
  <span> Foo </span>
  <span> Bar </span>
</p>
 -1
Author: Usagi Miyamoto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-01 14:02:01