Una mejor manera de establecer la distancia entre elementos de caja flexible

Este artículo fue traducido de: Mejor manera de establecer la distancia entre los elementos de flexbox

Distanciar al entre el SET en los mínimos elementos FlexBox el Al estoy usando una margin: 0 5pxEN .itemy margin: 0 -5pxen el envase. Para establecer una distancia mínima entre los elementos que utilizo el Flexbox margin: 0 5pxen .itemy margin: 0 -5pxcontenedores. Para mí parece un truco, pero no puedo encontrar una mejor manera de hacerlo. Para mí, esto parece ser un truco, pero no puedo encontrar una mejor manera de hacerlo .

Ejemplo Ejemplo

 #box { display: flex; width: 100px; margin: 0 -5px; } .item { background: gray; width: 50px; height: 50px; margin: 0 5px; } 
 <div id='box'> <div class='item'></div> <div class='item'></div> <div class='item'></div> <div class='item'></div> </div> 


Piso # 1

Referencia: https://stackoom.com/question/1OXwT/ Una mejor manera de establecer la distancia entre elementos de caja flexible


# 2F

  • Flexbox no tiene márgenes colapsables. El margen de beneficio de Flexbox no ha disminuido.
  • Flexbox no tiene nada parecido a las border-spacingtablas (excepto la propiedad CSS gapque no es compatible con la mayoría de los navegadores, caniuse ) No hay diferencia entre Flexbox y las tablas border-spacing(excepto las propiedades CSS gap, la mayoría de los navegadores no son compatibles Propiedades CSS gap, caniuse )

Por lo tanto, lograr lo que está pidiendo es un poco más difícil .

Mi preferencia Experiencia una en, en el "más limpia" de la manera que no utilice :first-child/ :last-childy sin ninguna modificación trabaja en flex-wrap:wrapIS para el SET padding:5pxON en el recipiente y margin:5pxON en los niños. En mi experiencia, no utilice :first-child/ :last-childcorrer sin flex-wrap:wrapninguna modificación de la "más limpia" realización se proporciona en el envase padding:5px, en el sub padding:5pxconjunto en margin:5px. Esto producirá una 10pxbrecha entre cada niño y entre cada niño y sus padres , y producirá una brecha entre cada niño y entre cada niño y sus padres 10px.

Versión demo

 .upper { margin:30px; display:flex; flex-direction:row; width:300px; height:80px; border:1px red solid; padding:5px; /* this */ } .upper > div { flex:1 1 auto; border:1px red solid; text-align:center; margin:5px; /* and that, will result in a 10px gap */ } .upper.mc /* multicol test */ {flex-direction:column;flex-wrap:wrap;width:200px;height:200px;} 
 <div class="upper"> <div>aaa<br/>aaa</div> <div>aaa</div> <div>aaa<br/>aaa</div> <div>aaa<br/>aaa<br/>aaa</div> <div>aaa</div> <div>aaa</div> </div> <div class="upper mc"> <div>aaa<br/>aaa</div> <div>aaa</div> <div>aaa<br/>aaa</div> <div>aaa<br/>aaa<br/>aaa</div> <div>aaa</div> <div>aaa</div> </div> 


Piso # 3

Puede usar bordes transparentes Puede usar bordes transparentes.

He propuesto este problema al intentar construir un modelo de cuadrícula flexible que puede recurrir a un modelo de tablas + celdas de tabla para navegadores más antiguos. He considerado este problema al intentar construir un modelo de cuadrícula flexible , el modelo se puede revertir al antiguo La tabla del navegador + modelo de celda de tabla. Y los bordes para canalones de columna me parecieron la mejor opción apropiada. En mi opinión, el borde utilizado para unir la ranura del cable es la mejor opción. es decir, las celdas de la tabla no tienen márgenes , es decir, las celdas de la tabla no tienen márgenes.

por ejemplo, por ejemplo

.column{
  border-left: 5px solid transparent;
  border-right: 5px solid transparent;
  border-bottom: 10px solid transparent;
}

También tenga en cuenta que debe tener min-width: 50px; en min-width: 50px; cuenta que necesita flexbox, para flexbox. El modelo flex no va a responder por tamaños fijos a menos que hagas flex: none; a menos que flex: none;de lo contrario modelo flex no se ocupará de un tamaño fijo flex: none; ON en el elemento secundario en particular que desea por tanto, como fijo y siendo excluidos de "flexi". En unas específicas sub-elementos que desea fijos, excluyendo así En "flexi". http://jsfiddle.net/GLpUp/4/ Pero todas las columnas junto con flex:none; http://jsfiddle.net/GLpUp/4/ pero todas las columnas y flex:none; ya no es un modelo flexible, ya no es un modelo flexible . Más cerca de un fondo de pantalla es algo que aquí Flex Modelo: http://jsfiddle.net/GLpUp/5/ que está más cerca el modelo Flex contenido: HTTP : //jsfiddle.net/GLpUp/5/

Por lo tanto, puede usar los márgenes normalmente si no necesita la reserva de celda de la tabla para navegadores más antiguos. Por lo tanto, si no necesita la reserva de celda de la tabla de los navegadores más antiguos , puede usar los márgenes normalmente . http://jsfiddle.net/GLpUp/3/ http://jsfiddle.net/GLpUp/3/

Configuración de background-clip: padding-box; ajuste background-clip: padding-box; será necesario cuando se utiliza un fondo, de lo contrario el fondo fluirá en la zona fronteriza transparente. El necesario cuando se utiliza el fondo, de lo contrario fondo transparente fluirá en la zona fronteriza.


# 4F

Creo que la forma más fácil de hacerlo es con porcentajes y solo permitiendo que el margen aumente su ancho . Encontré que la forma más fácil es usar porcentajes y solo permitir que los márgenes aumenten el ancho.

Esto significa que terminan con algo como esto si en la utilización de su ejemplo , esto significa que si se utiliza la muestra, que terminan con resultados similares

#box {
   display: flex;
}

.item {
   flex: 1 1 23%;
   margin: 0 1%;
}

Significa que sus valores se basan en el ancho, lo que puede no ser bueno para todos. Significa que sus valores se basan en el ancho, pero esto puede no ser para todos.


# 5F

Continuando con la respuesta de sawa, aquí hay una versión ligeramente mejorada que le permite establecer un espacio fijo entre los elementos sin el margen circundante. Continuando con la respuesta de sawa, esta es una versión ligeramente mejorada que le permite establecer entre elementos Espaciado fijo sin espacio en blanco circundante.

http://jsfiddle.net/chris00/s52wmgtq/49/ http://jsfiddle.net/chris00/s52wmgtq/49/

También se incluye la versión Safari "-webkit-flex". También se incluye la versión "-webkit-flex" de Safari.

.outer1 {
    background-color: orange;
    padding: 10px;
}

.outer0 {
    background-color: green;
    overflow: hidden;
}

.container
{
    display: flex;
    display: -webkit-flex;
    flex-wrap: wrap;    
    -webkit-flex-wrap: wrap;
    background-color: rgba(0, 0, 255, 0.5);
    margin-left: -10px;
    margin-top: -10px;
}

.item
{
    flex-grow: 1;
    -webkit-flex-grow: 1;
    background-color: rgba(255, 0, 0, 0.5);
    width: 100px;
    padding: 10px;
    margin-left: 10px;
    margin-top: 10px;
    text-align: center;
    color: white;
}

<div class="outer1">
    <div class="outer0">
        <div class="container">
            <div class="item">text</div>
            <div class="item">text</div>
            <div class="item">text</div>
            <div class="item">text</div>
            <div class="item">text</div>
            <div class="item">text</div>
        </div>
    </div>
</div>

Piso # 6

Esto no es un hack, no es un hack . Bootstrap y su grilla también usan la misma técnica, aunque en lugar de margen, bootstrap usa relleno para sus cols. La misma técnica es utilizada por bootstrap y su grilla , aunque bootstrap usa relleno como cols en lugar de espacios en blanco.

.row {
  margin:0 -15px;
}
.col-xx-xx {
  padding:0 15px;
}
Publicado 0 artículos originales · elogiado 8 · 30,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/asdfgh0077/article/details/105558509
Recomendado
Clasificación