modal lite google framework examples example color material-design-lite

material-design-lite - google - material design lite select



¿Cómo formatear el cuadro de selección con Material Design Lite? (9)

De todos modos, observe cómo lo implementó el equipo de Angular Material : https://material.angularjs.org/latest/#/demo/material.components.select

Sí, al igual que una entrada + menú desplegable

He leído la lista de Componentes y la CSS proporcionada, pero no veo ninguna mención de cuadros de selección, solo entradas regulares; Texto, radio, casilla de verificación, área de texto, etc.

¿Cómo utiliza Material Design Lite con un cuadro de selección? El uso de las clases para un ingreso de texto regular lo lleva a la mitad, pero ciertamente no es correcto.


Esto funcionó bastante bien para mí (usando combustible como ejemplo):

<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> <select class="mdl-textfield__input" id="octane" name="octane"> <option></option> <option value="85">85</option> <option value="87">87</option> <option value="89">89</option> <option value="91">91</option> <option value="diesel">Diesel</option> </select> <label class="mdl-textfield__label" for="octane">Octane</label> </div>

No se necesitan bibliotecas ni nada, solo el estándar MDL CSS y JavaScript.


Estoy usando este en una aplicación Angular2. Fue fácil de instalar / instalar / usar:

https://github.com/mebibou/mdl-selectfield

npm install mdl-selectfield

Luego incluye el CSS y JS:

<link rel="stylesheet" href="./node_modules/mdl-selectfield/dist/mdl-selectfield.min.css">

Luego agrega clases a tu HTML. Aquí hay un ejemplo:

<div class="mdl-selectfield mdl-js-selectfield"> <select id="gender" class="mdl-selectfield__select"> <option value=""></option> <option value="option1">option 1</option> <option value="option2">option 2</option> </select> <label class="mdl-selectfield__label" for="gender">User gender</label> <span class="mdl-selectfield__error">Select a value</span> </div>


Mientras el equipo de Google está trabajando en esto, necesitaba crear una solución rápida y fácil para este problema y escribí una función javascript / jquery:

Material Design Lite - Seleccionar


Por ahora, lo que hice fue un menú en JavaScript. Necesitaba hacer esto en JavaScript de todos modos para mis propósitos, por lo que no fue un problema usar solo un menú en lugar de un menú desplegable. ¡Esperamos que te sea útil!

<div id="insert-here"></div> <script> var onSelect = function(){ this.button.innerHTML = this.innerHTML; } var insertPoint = ''insert-here''; var numberOfDropdowns = 0; function makeDropdown(options){ // create the button var button = document.createElement(''BUTTON''); button.id = numberOfDropdowns; // this is how Material Design associates option/button button.setAttribute(''class'', ''mdl-button mdl-js-button''); button.innerHTML = ''Default''; document.getElementById(insertPoint).appendChild(button); // add the options to the button (unordered list) var ul = document.createElement(''UL''); ul.setAttribute(''class'', ''mdl-menu mdl-js-menu mdl-js-ripple-effect''); ul.setAttribute(''for'', numberOfDropdowns); // associate button for(var index in options) { // add each item to the list var li = document.createElement(''LI''); li.setAttribute(''class'', ''mdl-menu__item''); li.innerHTML = options[index]; li.button = button; li.onclick = onSelect; ul.appendChild(li); } document.getElementById(insertPoint).appendChild(ul); // and finally add the list to the HTML numberOfDropdowns++; } var optionsA = ["a", "b", "c", "d"]; makeDropdown(optionsA); var optionsB = ["e", "f", "g", "h"]; makeDropdown(optionsB); </script>

Enlace jsFiddle: https://jsfiddle.net/zatxzx6b/3/embedded/result/



Sé que este post es viejo. Pero tenía una solución diferente que me funcionó muy bien y quería compartir.

Aproveché la solución de @John Knott para usar mdl textfield con select como mdl-textfield__input + @ user2255242 de la solución de un menú pero sin los js involucrados.

Aquí hay un violín que ilustra la solución.

JS fiddle for MDL select box

HTML - He utilizado un campo de texto + un menú (ul + li) para actuar como selección, el css hace el resto.

<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> <link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css"> <script defer src="https://code.getmdl.io/1.3.0/material.min.js"></script> <div id="app"> <div class="sorter-holder"> <!-- the textfield, notice the readonly on input --> <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> <input class="mdl-textfield__input" type="text" v-model="sortBy" id="sorterHolder" readonly> <label class="mdl-textfield__label" for="sorterHolder">Sort by</label> </div> <!-- menu which will act as the options of select. The menu is for the input, and not the div which has mdl-textfield class --> <ul class="mdl-menu mdl-menu--bottom-left mdl-js-menu mdl-js-ripple-effect sorter-menu" for="sorterHolder"> <li class="mdl-menu__item" v-for="srtr in sortables" @click="update(srtr)">{{ srtr }}</li> </ul> </div> </div>

CSS - la parte principal es el css

/* The menu is positioned absolute, and it''s positions are calculated dynamically (I think). I wanted it to extend for the entire width of input, and for that needed a relative parent. Also, the display inline-block was not required in where I actually implemented it. Over there, it was block. So, this might need to change according to layout. */ .sorter-holder { position: relative; display: inline-block; } /* just giving them a width of 100% to extend for the entire textfield */ .sorter-holder .mdl-menu__outline, .sorter-holder .mdl-menu__container, .sorter-menu { width: 100% !important; }

VueJS: el ejemplo está en Vue JS, pero se puede replicar fácilmente en cualquier otro marco, ya que lo principal se realiza mediante HTML + CSS

new Vue({ el: "#app", data: { sortables: [ ''Name (A-Z)'', ''Name (Z-A)'', ''Newest First'', ''Oldest First'' ], sortBy: null }, methods: { update: function (sortBy) { this.sortBy = sortBy; } } })

¿Por qué lo hice de esta manera?

El menú se veía visualmente mejor que el cuadro de selección del navegador predeterminado. Pero, no quería hacer algo de magia css en la opción seleccionada. Y, esto parecía más fácil que eso.

Esto se puede hacer de muchas otras maneras. Lo encontré mejor e implementado en uno de mis proyectos. ¡Espero eso ayude! :)


También me encontré con el mismo problema. Implementar uno mismo siempre es bueno, pero si quiere ahorrar tiempo, esta biblioteca hizo un buen trabajo. https://github.com/MEYVN-digital/mdl-selectfield . Simplemente agregue esto junto con el archivo JS en el <head> :

<div class="mdl-selectfield mdl-js-selectfield"> <select id="myselect" name="myselect" class="mdl-selectfield__select"> <option value=""></option> <option value="option0_value">option 0</option> <option value="option1_value">option 1</option> </select> <label class="mdl-selectfield__label" for="myselect">Choose option</label> </div>

JSFiddle


Utilizo un código jquery y una clase css para ingresar texto de tipo, como este:

código jquery:

$(document).ready(function () { $("select").change(function () { if ($(''#'' + $(this).attr("id") + '' option:selected'').val() === '''') { $(this).parent(''div'').removeClass(''is-dirty''); } else { $(this).parent(''div'').addClass(''is-dirty''); } }); });

en html (la primera opción debe estar vacía):

<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> <select id="example" class="mdl-textfield__input"> <option value=""></option> <option value="1">Option</option> </select> <label class="mdl-textfield__label is-dirty" for="example">example</label> </div>