texto tamaño style para examples estilos cajas borde bootstrap ajustar css css3 css-float sass

tamaño - input css style



Creando Círculos CSS3 conectados por líneas (5)

Tengo que implementar la siguiente combinación de círculo y línea en CSS y estoy buscando punteros sobre cómo implementar esto de manera efectiva. Los círculos y líneas deberían verse así:

Puedo implementar los círculos como tal:

span.step { background: #ccc; border-radius: 0.8em; -moz-border-radius: 0.8em; -webkit-border-radius: 0.8em; color: #1f79cd; display: inline-block; font-weight: bold; line-height: 1.6em; margin-right: 5px; text-align: center; width: 1.6em; }

pero las líneas son difíciles de entender para mí.

El tamaño del círculo cambia dependiendo de si es el paso activo o no, y el color de la línea que conecta los círculos también cambia según el estado. ¿Cómo podría lograr esto?


Bueno, es un montón de marcas, pero podrías hacer algo como esto:

Usar display: table-cell; ya que ajustará automáticamente el ancho de los elementos para llenar espacios.

Luego, tenga un conjunto de elementos de círculo y un conjunto de elementos de línea. Los elementos de línea solo tienen un borde inferior en ellos, y los elementos del círculo están relativamente posicionados hacia abajo para alinearse con la línea.

Tenga en cuenta que los círculos deben tener un contenedor adicional, de lo contrario table-cell estirará todos los círculos a la misma altura, y usted no quiere eso. Esto requerirá que establezca el ancho de esos contenedores en 1px, lo que lo forzará al tamaño de su hijo.

Mira esta demostración:

http://jsfiddle.net/Sjdm4/


Aunque esto es posible con CSS3, creo que SVG es una mejor herramienta para interfaces sofisticadas.

Hice esto con SVG (estilo con CSS):

Y aquí hay un Plunk para demostrar .


Puede lograr este efecto sin marcado adicional utilizando pseudo-elementos y el selector de hermanos adyacente ( ~ ):

Demostración en CodePen

HTML:

<ul> <li>1</li> <li>2</li> <li>3</li> <li class="active">4</li> <li>5</li> <li>6</li> <li>7</li> </ul>

CSS:

li { width: 2em; height: 2em; text-align: center; line-height: 2em; border-radius: 1em; background: dodgerblue; margin: 0 1em; display: inline-block; color: white; position: relative; } li::before{ content: ''''; position: absolute; top: .9em; left: -4em; width: 4em; height: .2em; background: dodgerblue; z-index: -1; } li:first-child::before { display: none; } .active { background: dodgerblue; } .active ~ li { background: lightblue; } .active ~ li::before { background: lightblue; }


Trabajando con la excelente respuesta de @bookcasey, me encontré haciendo lo contrario para que fuera receptivo;

  • Puse los círculos como ::before pseudo selectores (con contador de css automático).
  • Las líneas entre son los elementos li para que puedan ser extendidos por flexbox.

Ahora se extiende para llenar el padre, y se ocupa de diferentes pasos de forma automática. También puede hacer cosas como ajustar font-size el padre ul y hacer que todo se adapte.

Estoy seguro de que se puede mejorar, así que no dude en contribuir :)

Interactive CodePen: Flexbox Timeline con pasos: http://codepen.io/ccondrup/pen/bqbGWB?editors=1100

ul { align-content: center; align-items: center; counter-reset: stepCount; display: flex; justify-content: space-around; margin: 10vh auto 20vh; /* for codepen */ } li { background: dodgerblue; color: white; content: '' ''; display: flex; flex-grow: 1; height: .3em; line-height: 1em; margin: 0; position: relative; text-align: right; z-index: -1; } li::before { background: dodgerblue; border-radius: 50%; color: white; content: counter(stepCount); counter-increment: stepCount; height: 2em; left: -2em; line-height: 2em; position: absolute; text-align: center; top: -.85em; width: 2em; } li.active { background-color: lightblue; } li.active~li { background-color: lightblue; } li.active~li::before { background-color: lightblue; } li:last-child { flex-grow: 0; flex-shrink: 1; flex-basis: 0; /* Shorthand: flex: 0 1 0; */ } ul.bigger { font-size: 1.3em; } ul.highlight-active li.active::before { font-size: 1.6em; background: navy; } ul.roman li::before { content: counter(stepCount, upper-roman); } ul.triangle li::before { width: 0; height: 0; border-radius: 0; border-left: 1em solid white; border-right: 1em solid white; border-bottom: .8em solid dodgerblue; content: ''''; top: -.65em; } ul.triangle li:first-child::before { left: 0; } ul.triangle li.active~li::before { border-bottom-color: lightblue; }

<ul> <li></li> <li></li> <li class="active"></li> <li></li> <li></li> <li></li> </ul> <ul class="bigger highlight-active"> <li></li> <li></li> <li class="active"></li> <li></li> </ul> <ul class="roman"> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li class="active"></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> <ul class="triangle"> <li></li> <li></li> <li class="active"></li> <li></li> <li></li> </ul>


No es mío, pero funciona bastante bien y se ve elegante, solo funciona con CSS y puedes perzonalizarlo más. Fuente http://jsfiddle.net/Misiu/y1Lo3qh1/

var i = 1; $(''.progress .circle'').removeClass().addClass(''circle''); $(''.progress .bar'').removeClass().addClass(''bar''); setInterval(function () { $(''.progress .circle:nth-of-type('' + i + '')'').addClass(''active''); $(''.progress .circle:nth-of-type('' + (i - 1) + '')'').removeClass(''active'').addClass(''done''); $(''.progress .circle:nth-of-type('' + (i - 1) + '') .label'').html(''&#10003;''); $(''.progress .bar:nth-of-type('' + (i - 1) + '')'').addClass(''active''); $(''.progress .bar:nth-of-type('' + (i - 2) + '')'').removeClass(''active'').addClass(''done''); i++; if (i == 8) { $(''.progress .circle'').removeClass().addClass(''circle''); $(''.progress .bar'').removeClass().addClass(''bar''); i = 1; } }, 1000);

*, *:after, *:before { margin: 0; padding: 0; box-sizing: border-box; font-family: "Open Sans"; } /* Form Progress */ .progress { margin: 20px auto; text-align: center; padding-bottom: 80px; } .progress .circle, .progress .bar { display: inline-block; background: #fff; width: 40px; height: 40px; border-radius: 40px; border: 1px solid #d5d5da; vertical-align:top; } .progress .bar { position: relative; width: 80px; height: 6px; margin: 0 -5px 17px -5px; border-left: none; border-right: none; border-radius: 0; top:16px; vertical-align:top } .progress .circle .label { display: inline-block; width: 32px; height: 32px; line-height: 32px; border-radius: 32px; margin-top: 3px; color: #b5b5ba; font-size: 17px; } .progress .circle .title { color: #b5b5ba; font-size: 13px; line-height: 18px; margin-left: -30px; display: block; width: 100px; margin-top: 5px; } /* Done / Active */ .progress .bar.done, .progress .circle.done { background: #eee; } .progress .bar.active { background: linear-gradient(to right, #EEE 40%, #FFF 60%); } .progress .circle.done .label { color: #FFF; background: #8bc435; box-shadow: inset 0 0 2px rgba(0, 0, 0, .2); } .progress .circle.done .title { color: #444; } .progress .circle.active .label { color: #FFF; background: #0c95be; box-shadow: inset 0 0 2px rgba(0, 0, 0, .2); } .progress .circle.active .title { color: #0c95be; }

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link href=''http://fonts.googleapis.com/css?family=Open+Sans'' rel=''stylesheet'' type=''text/css''> <div class="progress"> <div class="circle done"> <span class="label">1</span> <span class="title">Order</span> </div> <span class="bar done"></span> <div class="circle done"> <span class="label">2</span> <span class="title">Address</span> </div> <span class="bar active"></span> <div class="circle active"> <span class="label">3</span> <span class="title">Payment</span> </div> <span class="bar"></span> <div class="circle"> <span class="label">4</span> <span class="title">Review</span> </div> <span class="bar"></span> <div class="circle"> <span class="label">5</span> <span class="title">Finish</span> </div> </div> <div class="progress"> <div class="circle done"> <span class="label">1</span> <span class="title">Order informations</span> </div> <span class="bar active"></span> <div class="circle active"> <span class="label">2</span> <span class="title">Order review</span> </div> <span class="bar"></span> <div class="circle"> <span class="label">3</span> <span class="title">Finish</span> </div> </div>