css - figcaption - title html attribute
¿Cómo hacer que el elemento llene el ancho restante, cuando el hermano tiene un ancho variable? (3)
Cambie algunos de esos elementos <span>
elementos <div>
; luego float:left
la división alrededor de tu desplegable; luego, asigne a la derecha un overflow:hidden
y el elemento de entrada en su interior un width:100%;
.
Aquí hay un ejemplo . Aquí está otra vez con un mayor desplegable .
Excepto que se enrosca el botón de envío. Por lo tanto, #form_wrapper
el #form_wrapper
no estático #form_wrapper
( position:relative
) y coloque el botón de envío absolutamente. Mira este violín y este .
En el siguiente ejemplo:
Quiero que el cuadro de texto llene todo el espacio disponible. El problema es que el ancho del menú desplegable no se puede arreglar, ya que sus elementos no son estáticos. Me gustaría resolver esto con solo css (no javascript si es posible).
He intentado las soluciones propuestas a preguntas similares sin ninguna suerte :(
Aquí está el violín: http://jsfiddle.net/ruben_diaz/cAHb8/
Aquí está el html:
<div id="form_wrapper">
<form accept-charset="UTF-8" action="/some_action" method="post">
<span class="category_dropdown_container">
<select class="chosen chzn-done" name="question[category_id]" id="selQJK">
<option value="1">General</option>
<option value="2">Fruits</option>
<option value="3">Ice Creams</option>
<option value="4">Candy</option>
</select>
</span>
<span class="resizable_text_box">
<input id="question_text_box" name="question[what]" placeholder="Write a query..." type="text" />
</span>
<input name="commit" type="submit" value="Ask!" />
</form>
</div>
Y aquí el css:
#form_wrapper {
border: 1px solid blue;
width: 600px;
padding: 5px;
}
form {
display: inline-block;
width: 100%;
}
.category_dropdown_container {
}
.resizable_text_box {
border: 1px solid red;
}
input[type="text"] {
}
input[type="submit"] {
background-color: lightblue;
width: 80px;
float: right;
}
La relativamente reciente propiedad ''flex'' display css resuelve este problema para usted:
Todo lo que necesita hacer es cambiar la display
del formulario a inline-flex
, dar .resizable_text_box
flex-grow: 100;
y le da a #question_text_box
width: 100%
Ejemplo completo de la OP:
<style>
#form_wrapper {
border: 1px solid blue;
width: 600px;
padding: 5px;
}
form {
display: inline-flex;
width: 100%;
}
.category_dropdown_container {
}
.resizable_text_box {
border: 1px solid red;
flex-grow: 100;
}
#question_text_box {
width: 100%
}
input[type="text"] {
}
input[type="submit"] {
background-color: lightblue;
width: 80px;
float: right;
}
</style>
<div id="form_wrapper">
<form accept-charset="UTF-8" action="/some_action" method="post">
<span class="category_dropdown_container">
<select class="chosen chzn-done" name="question[category_id]" id="selQJK">
<option value="1">Options</option>
</select>
</span>
<span class="resizable_text_box">
<input id="question_text_box" name="question[what]" placeholder="Write a query..." type="text" />
</span>
<input name="commit" type="submit" value="Ask!" />
</form>
</div>
Flex-box le permite hacer lo que quería hacer con css durante 15 años, ¡por fin está aquí! Más información: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
Demostración actualizada (probado bien en IE7 / 8/9/10, Firefox, Chrome, Safari)
- Flotan los elementos izquierdo y derecho.
- En el código fuente HTML, coloque primero los dos elementos flotados (esta es la parte más importante).
- Dar el
overflow: hidden;
elemento mediooverflow: hidden;
y un ancho implícito del100%
. - Dale al cuadro de texto en el elemento central un ancho del
100%
.
.category_dropdown_container {
float: left;
}
input[type="submit"] {
float: right;
...
}
.resizable_text_box {
padding: 0 15px 0 10px;
overflow: hidden;
}
.resizable_text_box input {
width: 100%;
}
<div class="category_dropdown_container">
<select class="chosen chzn-done" name="question[category_id]" id="selQJK">
...
</select>
</div>
<input name="commit" type="submit" value="Ask!" />
<div class="resizable_text_box">
<input id="question_text_box" name="question[what]"
placeholder="Write a query..." type="text" />
</div>