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.

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>


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


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;

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


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.


1
<div>
    <div style="text-align: left; width: 400px; border: 1px solid black; margin: 0 auto;">
         <pre>
Hello
Testing
Beep
         </pre>
    </div>
</div>

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>


-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>

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.