CSS: Bloque central, pero alinea el contenido a la izquierda

81

Quiero que todo un bloque esté centrado en su padre, pero quiero que el contenido del bloque quede alineado a la izquierda.

Los ejemplos sirven mejor

En esta página :

http://yaml-online-parser.appspot.com/?yaml=%23+ASCII+Art%0d%0a---+%7c%0d%0a++%5c%2f%2f%7c%7c%5c% 2f% 7c% 7c% 0d% 0a ++% 2f% 2f +% 7c% 7c ++% 7c% 7c __% 0d% 0a & tipo = python

el arte ascii debe estar centrado (como aparece) pero debe alinearse y verse como "YAML".

O esto :

http://yaml-online-parser.appspot.com/?yaml=%3f+-+Detroit+Tigers%0d%0a++-+Chicago+cubs%0d%0a%3a%0d%0a++-+2001-07-23 % 0d% 0a% 0d% 0a% 3f +% 5b + Nueva + York + Yankees% 2c% 0d% 0a ++++ Atlanta + Braves +% 5d% 0d% 0a% 3a +% 5b + 2001-07-02% 2c + 2001-08-12% 2c% 0d% 0a ++++ 2001-08-14 +% 5d% 0d% 0a

el mensaje de error debería alinearse como en una consola.

Paul Tarjan
fuente

Respuestas:

162

Primero, cree un padre divque centre su contenido secundario en text-align: center. A continuación, cree un elemento secundario divque se display: inline-blockadapte al ancho de sus elementos secundarios y text-align: lefthaga que el contenido que contiene se alinee a la izquierda como desee.

<div style="text-align: center;">
    <div style="display: inline-block; text-align: left;">
        Centered<br />
        Content<br />
        That<br />
        Is<br />
        Left<br />
        Aligned
    </div>
</div>

Keavon
fuente
5
Claro y eficaz. ¡Gracias!
fuzzybear3965
11
no funciona ya que tan pronto como una sola línea de texto no cabe en una línea, envuelve el texto y da como resultado que el bloque tenga el ancho completo, pero el texto tenga menos del ancho completo, por lo que aunque el bloque esté centrado, no No importa, ya que el texto NO es el ancho completo del bloque contenedor. Para ver un ejemplo, consulte el diagrama 2a de stackoverflow.com/questions/8702802/…
user3338098
¡Sencillo y hermoso! Gracias
Cesar Bielich
3
@ user3338098 Funciona, en su caso, necesita establecer un ancho máximo para su texto para evitar que el bloque se expanda a un tamaño no deseado. Literalmente, apliqué exactamente esta misma lógica a mi trabajo y pude lograr el diagrama 1b + 2b.
Mark
20

Reposicionando la respuesta de trabajo de la otra pregunta: ¿Cómo centrar horizontalmente un elemento flotante de ancho variable?

Suponiendo que el elemento que está flotando y estará centrado es un div con un id = "content" ...

<body>
<div id="wrap">
   <div id="content">
   This will be centered
   </div>
</div>
</body>

Y aplica el siguiente CSS

#wrap {
    float: left;
    position: relative;
    left: 50%;
}

#content {
    float: left;
    position: relative;
    left: -50%;
}

Aquí hay una buena referencia sobre eso http://dev.opera.com/articles/view/35-floats-and-clearing/#centeringfloats

Paul Tarjan
fuente
También funciona muy bien con el "envoltorio" prey el "contenido" code.
Serge Stroobandt
no funciona ya que tan pronto como This will be centeredno cabe en una línea, envuelve el texto y da como resultado que el bloque sea de ancho completo pero el texto sea menor que el ancho completo, por lo que aunque el bloque esté centrado, no importa ya que el el texto NO es el ancho completo del bloque contenedor. Para ver un ejemplo, consulte el diagrama 2a de stackoverflow.com/questions/8702802/… .
user3338098
¡Intente evitar el uso de valores negativos! No funcionará correctamente en todos los navegadores.
Grasper
4

Si te entiendo bien, necesitas usar para centrar un contenedor (o bloque)

margin-left: auto;
margin-right: auto;

y para alinear a la izquierda su contenido:

text-align: left;
eKek0
fuente
entonces, ¿qué pongo en mi <pre> y <code>? Probé variaciones de eso y fallé.
Paul Tarjan
¿Intentaste usar una clase css?
eKek0
también, puede usar un div contenedor para> pre>
eKek0
2
Estoy probando un contenedor div, y la única forma de hacerlo funcionar es con un ancho fijo (que no quiero).
Paul Tarjan
2

Normalmente, debe usar margin: 0 auto en el div como se menciona en las otras respuestas, pero tendrá que especificar un ancho para el div. Si no desea especificar un ancho, también puede (esto depende de lo que esté intentando hacer) usar márgenes, algo como margin: 0 200px; , esto debería hacer que tu contenido parezca centrado, también puedes ver la respuesta de Leyu a mi pregunta

Waleed Eissa
fuente
lamentablemente, su solución crea un desbordamiento con una barra de desplazamiento horizontal forzada. Agregar desbordamiento: oculto al elemento principal no es bueno ya que mi salida puede ser lo suficientemente larga como para justificar una barra de desplazamiento. Lo siento :(
Paul Tarjan
En realidad, no es mi solución como mencioné, pero de todos modos, no entiendo lo que quiere decir con desbordamiento: barras de desplazamiento forzadas ocultas, debería ocultar el contenido, no forzar las barras de desplazamiento.
Waleed Eissa
La solución en su publicación provoca una barra de desplazamiento horizontal, ya que el contenido se desplaza un 50% hacia la derecha. Esto requiere un desbordamiento: oculto para eliminar, lo que no funciona para mí.
Paul Tarjan
2

Encontré que la forma más fácil de centrar y alinear a la izquierda el texto dentro de un contenedor es la siguiente:

HTML:

<div>
  <p>Some interesting text.</p>
</div>

CSS:

P {
  width: 50%; //or whatever looks best
  margin: auto; //top and bottom margin can be added for aesthetic effect
}

Espero que esto sea lo que estabas buscando, ya que me tomó un poco de búsqueda solo para descubrir esta solución bastante básica.

L.Gaunt
fuente
1
<div>
    <div style="text-align: left; width: 400px; border: 1px solid black; margin: 0 auto;">
         <pre>
Hello
Testing
Beep
         </pre>
    </div>
</div>
Ámbar
fuente
Además, no quiero el ancho: 400px. posible sin eso?
Paul Tarjan
El problema es que un elemento a nivel de bloque se expandirá para ocupar el mayor ancho posible a menos que le ponga un límite.
Ámbar
entonces, lo que quiero hacer es imposible?
Paul Tarjan
Podría ser que alguien conozca un secreto del que yo no tenga conocimiento, pero que yo sepa, sí.
Ámbar
Estoy de acuerdo con Dav. Quizás, podría echar un vistazo a tinyMCE u otro editor de texto enriquecido que permita más personalización que el área de texto HTML estándar. Desafortunadamente, puede terminar pasando mucho tiempo con un resultado hack. ¡Buena suerte!
mkelley33
1

¿Es esto lo que estás buscando? Caja flexible ...

.container{
  display: flex;
  flex-flow: row wrap;
  justify-content: center;
  align-content: center;
  align-items: center;
}
.inside{
  height:100px;
  width:100px;
  background:gray;
  border:1px solid;
}
<section class="container">
  <section class="inside">
    A
  </section>
  <section class="inside">
    B
  </section>
  <section class="inside">
    C
  </section>
</section>

Ronnie Royston
fuente
-1

Esto funciona

<div style="display:inline-block;margin:10px auto;">
    <ul style="list-style-type:none;">
        <li style="text-align:left;"><span class="red"></span> YouTube AutoComplete Keyword Scraper software <em>root keyword text box</em>.</li>
        <li style="text-align:left;"><span class="red"></span> YouTube.com website <em>video search text box</em>.</li>
        <li style="text-align:left;"><span class="red"></span> YouTube AutoComplete Keyword Scraper software <em>scraped keywords listbox</em>.</li>
        <li style="text-align:left;"><span class="red"></span> YouTube AutoComplete Keyword Scraper software <em>right click context menu</em>.</li>
    </ul>
</div>
usuario7212232
fuente
3
¿Puede explicar su código y sus ventajas y desventajas? De esa manera, otros pueden aprender de él en lugar de simplemente copiar y pegar algo que pueden o no comprender completamente.
Robert