MDL-49481 theme_bootstrapbase: Fix responsive margin-top
[moodle.git] / theme / bootstrapbase / less / moodle / forms.less
1 /**
2  * Moodle forms HTML isn't changeable via renderers (yet?) so this
3  * .less file imports styles from the bootstrap @variables file and
4  * adds them to the existing Moodle form CSS ids and classes.
5  *
6  */
8 form {
9     margin: 0;
10 }
11 .mform fieldset .advancedbutton {
12     text-align: right;
13 }
14 .jsenabled .mform .containsadvancedelements .advanced {
15     display: none;
16 }
17 .mform .containsadvancedelements .advanced.show {
18     display: block;
19 }
20 .mform fieldset.group {
21     margin-bottom: 0
22 }
23 .mform fieldset.error {
24     border: 1px solid @errorText;
25 }
26 .mform span.error,
27 #adminsettings span.error {
28     display: inline-block;
29     border: 1px solid @errorBorder;
30     border-radius: 4px;
31     background-color: @errorBackground;
32     padding: 4px;
33     margin-bottom: 4px;
34 }
35 .mform fieldset.collapsible legend a.fheader {
36     padding: 0 5px 0 20px;
37     margin-left: -20px;
38     background: url([[pix:t/expanded]]) 2px center no-repeat;
39 }
40 .dir-rtl .mform fieldset.collapsible legend a.fheader {
41     padding: 0 20px 0 5px;
42     margin-right: -20px;
43     margin-left: 0;
44     background-position: right center;
45 }
46 .mform fieldset.collapsed legend a.fheader {
47     background-image: url([[pix:t/collapsed]]);
48 }
49 .dir-rtl .mform fieldset.collapsed legend a.fheader {
50     background-image: url([[pix:t/collapsed_rtl]]);
51 }
52 .jsenabled .mform .collapsed .fcontainer {
53     display: none;
54 }
56 .mform .fitem .fitemtitle div {
57     display: inline;
58 }
59 #adminsettings .error,
60 .loginpanel .error,
61 .mform .error {
62     color: @errorText;
63 }
64 .mform .fdescription.required {
65     margin-left: @horizontalComponentOffset;
66 }
67 .mform .fpassword .unmask {
68     display: inline-block;
69     margin-left: 0.5em;
70     & > input {
71         margin: 0;
72     }
73     & > label {
74         display: inline-block;
75     }
76 }
77 .mform label {
78     display: inline-block;
79 }
81 .mform .iconhelp {
82     margin-left: 4px;
83 }
84 .dir-rtl .mform .iconhelp {
85     margin-right: 4px;
86 }
87 .mform .ftextarea #id_alltext {
88     width: 100%;
89 }
90 .mform ul.file-list {
91     padding: 0;
92     margin: 0;
93     list-style: none;
94 }
95 .mform label .req,
96 .mform label .adv {
97     cursor: help;
98 }
99 .mform .fcheckbox input {
100     margin-left: 0;
102 .mform .fcheckbox > span,
103 .mform .fradio > span,
104 .mform .fgroup > span {
105     display: inline-block;
106     margin-top: 5px;
108 .mform .fitem fieldset.fgroup label,
109 .mform fieldset.fdate_selector label {
110     display: inline;
111     float: none;
112     width: auto;
114 .mform .ftags label.accesshide {
115     display: block;
116     position: static;
118 .mform .ftags select {
119     margin-bottom: 0.7em;
120     min-width: 22em;
122 .mform .helplink img {
123     margin: 0 .45em;
124     padding: 0;
126 .mform legend .helplink img {
127     margin: 0 .2em;
129 .singleselect label {
130     margin-right: .3em;
132 .dir-rtl .singleselect label {
133     margin-left: .3em;
134     margin-right: 0;
136 input#id_externalurl {
137     direction: ltr;
139 #portfolio-add-button {
140     display: inline;
143 // Copying in Bootstrap styles.
144 .form-item,
145 .mform .fitem {
146     .form-horizontal .control-group;
147     margin-bottom: 10px;
148     // Theres's a mysterious extra 10px inside this item,
149     // so reduce margin by 10px from 20px standard to compensate.
151 .form-item .form-label,
152 .mform .fitem div.fitemtitle {
153     .form-horizontal .control-label
155 .dir-rtl {
156     .form-item .form-label,
157     .mform .fitem div.fitemtitle {
158         float:right;
159         text-align: left;
160     }
162 .form-defaultinfo,
163 .form-label .form-shortname {
164     .muted;
166 .form-label .form-shortname {
167     font-size: @fontSizeMini;
168     display: block;
170 .dir-rtl .form-label .form-shortname {
171     text-align: left;
173 .form-item .form-setting,
174 .form-item .form-description,
175 .mform .fitem .felement,
176 #page-mod-forum-search .c1 {
177     .form-horizontal .controls
181 .formsettingheading {
182     .form-horizontal .help-block
184 // Moodle doesn't differentiate between what Bootstrap calls
185 // .uneditable-inputs and form help text. Styling them both as
186 // uneditable looks ugly, styling both as form help is fairly
187 // subtle in it's impact. Going for the latter as the best option.
188 .form-item .form-description,
189 .felement.fstatic {
190     .help-block;
191     padding-top: 5px;
193 .form-item .form-description {
194     padding-top: 0;
196 .fitem .fstaticlabel {
197     font-weight: bold;
200 // Pale grey container for submit buttons.
201 table#form td.submit,
202 .form-buttons,
203 .path-admin .buttons,
204 #fitem_id_submitbutton,
205 .fp-content-center form + div,
206 div.backup-section + form,
207 #fgroup_id_buttonar {
208     .form-actions;
209     padding-left: 0;
211 .path-admin .buttons,
212 .form-buttons { // Add back the padding it would usually get from being inside a .form-horizontal.
213     padding-left: @horizontalComponentOffset;
215 .dir-rtl {
216     table#form td.submit,
217     .form-buttons,
218     .path-admin .buttons,
219     #fitem_id_submitbutton,
220     .fp-content-center form + div,
221     div.backup-section + form,
222     #fgroup_id_buttonar {
223         .form-actions;
224         padding-right: 0;
225     }
226     .path-admin .buttons,
227     .form-buttons { // Add back the padding it would usually get from being inside a .form-horizontal.
228         padding-right: @horizontalComponentOffset;
229     }
231 .form-item .form-setting .form-checkbox.defaultsnext {
232     // Need to specify .defaultsnext and the .form-checkbox class
233     // is somewhat randomly re-used on various actual checkboxes
234     // throughout the admin forms, instead of on the wrapper div.
235     margin-top: 5px; // Push down checkboxes to align.
236     display: inline-block; // So above style sticks.
239 #adminsettings h3 {
240     // Copied from bootstrap/forms.less tag legend.
241     display: block;
242     width: 100%;
243     padding: 0;
244     margin-bottom: @baseLineHeight;
245     font-size: @baseFontSize * 1.5;
246     line-height: @baseLineHeight * 2;
247     color: @grayDark;
248     border: 0;
249     border-bottom: 1px solid #e5e5e5;
251 .mform legend a,
252 .mform legend a:hover {
253     color: @textColor;
254     text-decoration: none;
256 .dir-rtl .mform .fitem .felement {
257     margin-right: 30%;
258     margin-left: auto;
259     text-align: right;
261 // I think this could be avoided (or at least tidied up) ifr
262 // we used HTML5 input types like url, phone, email, number etc.
263 .dir-rtl .mform .fitem .felement input[name=email],
264 .dir-rtl .mform .fitem .felement input[name=email2],
265 .dir-rtl .mform .fitem .felement input[name=url],
266 .dir-rtl .mform .fitem .felement input[name=idnumber],
267 .dir-rtl .mform .fitem .felement input[name=phone1],
268 .dir-rtl .mform .fitem .felement input[name=phone2] {
269     text-align: left;
270     direction: ltr;
272 .dir-rtl #id_s__pathtodu,
273 .dir-rtl #id_s__aspellpath,
274 .dir-rtl #id_s__pathtodot,
275 .dir-rtl #id_s__supportemail,
276 .dir-rtl #id_s__supportpage,
277 .dir-rtl #id_s__sessioncookie,
278 .dir-rtl #id_s__sessioncookiepath,
279 .dir-rtl #id_s__sessioncookiedomain,
280 .dir-rtl #id_s__proxyhost,
281 .dir-rtl #id_s__proxyuser,
282 .dir-rtl #id_s__proxypassword,
283 .dir-rtl #id_s__proxybypass,
284 .dir-rtl #id_s__jabberhost,
285 .dir-rtl #id_s__jabberserver,
286 .dir-rtl #id_s__jabberusername,
287 .dir-rtl #id_s__jabberpassword,
288 .dir-rtl #id_s__additionalhtmlhead,
289 .dir-rtl #id_s__additionalhtmltopofbody,
290 .dir-rtl #id_s__additionalhtmlfooter,
291 .dir-rtl #id_s__docroot,
292 .dir-rtl #id_s__filter_tex_latexpreamble,
293 .dir-rtl #id_s__filter_tex_latexbackground,
294 .dir-rtl #id_s__filter_tex_pathlatex,
295 .dir-rtl #id_s__filter_tex_pathdvips,
296 .dir-rtl #id_s__filter_tex_pathconvert,
297 .dir-rtl #id_s__blockedip,
298 .dir-rtl #id_s__pathtoclam,
299 .dir-rtl #id_s__quarantinedir,
300 .dir-rtl #id_s__sitepolicy,
301 .dir-rtl #id_s__sitepolicyguest,
302 .dir-rtl #id_s__cronremotepassword,
303 .dir-rtl #id_s__allowedip,
304 .dir-rtl #id_s__blockedip,
305 .dir-rtl #id_s_enrol_meta_nosyncroleids,
306 .dir-rtl #id_s_enrol_ldap_host_url,
307 .dir-rtl #id_s_enrol_ldap_ldapencoding,
308 .dir-rtl #id_s_enrol_ldap_bind_dn,
309 .dir-rtl #id_s_enrol_ldap_bind_pw,
310 .dir-rtl #admin-emoticons .form-text,
311 .dir-rtl #admin-role_mapping input[type=text],
312 .dir-rtl #id_s_enrol_paypal_paypalbusiness,
313 .dir-rtl #id_s_enrol_flatfile_location,
314 #page-admin-setting-enrolsettingsflatfile.dir-rtl input[type=text],
315 #page-admin-setting-enrolsettingsdatabase.dir-rtl input[type=text],
316 #page-admin-auth-db.dir-rtl input[type=text] {
317     direction: ltr;
319 #page-admin-setting-enrolsettingsflatfile.dir-rtl .informationbox {
320     direction: ltr;
321     text-align: left;
323 #page-admin-grade-edit-scale-edit.dir-rtl .error input#id_name {
324     margin-right: 170px;
326 #page-grade-edit-outcome-course .courseoutcomes {
327     margin-left: auto;
328     margin-right: auto;
329     width: 100%;
331 #page-grade-edit-outcome-course .courseoutcomes td {
332     text-align:center;
334 /* Install Process' text fields Forms, should always be justified to the left */
335 #installform #id_wwwroot,
336 #installform #id_dirroot,
337 #installform #id_dataroot,
338 #installform #id_dbhost,
339 #installform #id_dbname,
340 #installform #id_dbuser,
341 #installform #id_dbpass,
342 #installform #id_prefix {
343     direction: ltr;
346 .mdl-right > label {
347     // Workaround for repository pop-up because the : are outside the label,
348     // can/should be fixed in filemanager renderers.
349     display: inline-block;
352 // Checkbox labels. Bootstrap puts the associated checkbox inside the label.
353 // Moodle puts it beside the label, so we need to make it inline-block
354 // to keep it on the same horizontal level.
355 input[type="radio"] + label,
356 input[type="checkbox"] + label {
357     display: inline;
358     padding-left: 0.2em;
360 input[type="radio"],
361 input[type="checkbox"] {
362     margin-top: -4px; // Dodgy hack, must be better way.
363     margin-right: 7px;
365 .dir-rtl {
366     input[type="radio"],
367     input[type="checkbox"] {
368         margin-left: 7px;
369         margin-right: auto;
370     }
372 .singleselect {
373     display: inline-block;
374     form,
375     select{
376         margin: 0;
377     }
379 .form-item .form-label label {
380     margin-bottom: 0;
382 .dir-rtl .form-item .form-label label {
383      text-align:left;
385 .felement.ffilepicker {
386     margin-top: 5px;
388 div#dateselector-calendar-panel {
389     z-index: 3100; /* Set higher than the z-index of the filemanager - see MDL-39047. */
392 fieldset.coursesearchbox label {
393     display: inline;
396 /**
397  * Show the labels above text editors and file managers except on wide screens.
398  */
399 #region-main .mform:not(.unresponsive) .fitem .fitemtitle label {
400     font-weight: bold;
402 .makeFormsVertical() {
403     #region-main .mform:not(.unresponsive) {
404         .fitem {
405             .fitemtitle {
406                 display: block;
407                 margin-top: 4px;
408                 margin-bottom: 4px;
409                 text-align: left;
410                 width: 100%;
411             }
412             .felement {
413                 margin-left: 0;
414                 width: 100%;
415                 float: left;
416                 padding-left: 0;
417                 padding-right: 0;
418             }
419             .fstatic:empty {
420                 display: none;
421             }
422             .fcheckbox > span,
423             .fradio > span,
424             .fgroup > span {
425                 margin-top: 4px;
426             }
428         }
429         .femptylabel {
430             .fitemtitle {
431                 display: inline-block;
432                 width: auto;
433                 margin-right: 8px;
434             }
435             .felement {
436                 display: inline-block;
437                 margin-top: 4px;
438                 padding-top: 5px;
439                 width: auto;
440             }
441         }
442         .fitem_fcheckbox{
443             .fitemtitle,
444             .felement {
445                 display: inline-block;
446                 width: auto;
447             }
448             .felement {
449                 padding: 6px;
450             }
451         }
452     }
453     &.dir-rtl #region-main .mform:not(.unresponsive) {
454         .femptylabel .fitemtitle {
455             margin-right: 0px;
456             margin-left: 8px;
457         }
458         .fitem {
459             .fitemtitle {
460                 text-align: right;
461             }
462             .felement {
463                 margin-right: 0;
464                 float: right;
465                 padding-right: 0;
466                 padding-left: 0;
467             }
468         }
469         .fitem_fcheckbox .felement {
470             float: right;
471         }
472     }
475 /**
476  * Make forms vertical when the screen is less than 1200px;
477  */
478 @media (max-width: 1199px) {
479     body {
480         .makeFormsVertical;
481     }
484 /**
485  * Make forms vertical when the screen is less than 1474px AND both side-pre and side-post contain blocks.
486  * This is an extra special media rule.
487  * It causes forms to show vertically when the screen size is calculated as:
488  * 1199px + (1199px * 23%)
489  * Where 23% is the width of span3
490  * Full calculation is:
491  *   @maxWidthForVerticalForms: 1199px * (unit(((@fluidGridColumnWidth1200 * 3) + (@fluidGridGutterWidth * (3 - 1)))) / 100) + 1199px;
492  */
493 @maxWidthForVerticalForms: 1474px;
494 @media (max-width: @maxWidthForVerticalForms) {
495     .used-region-side-pre.used-region-side-post {
496         .makeFormsVertical;
497     }
500 /* Section and module editing forms contain special JS components for the
501    availability system (if enabled). */
502 #fitem_id_availabilityconditionsjson {
503     *[aria-hidden=true] {
504         display: none;
505     }
506     select,
507     input[type=text] {
508         position:relative;
509         top: 4px;
510     }
511     label {
512         display: inline;
513     }
514     .availability-group {
515         margin-right: 8px;
516     }
517     .availability-item {
518         margin-bottom: 6px;
519     }
520     .availability-none {
521         margin-left: 20px;
522         margin-bottom: 4px;
523     }
524     .availability-plugincontrols {
525         padding: 2px 0px 0px 4px;
526         background: none repeat scroll 0% 0% @wellBackground;
527         border: 1px solid @grayLighter;
528         border-radius: 4px;
529         display: inline-block;
530         margin-right: 8px;
531     }
532     /* Eye icon in front of an item and delete icon after it. */
533     .availability-eye,
534     .availability-delete {
535         margin-right: 8px;
536     }
537     /* Hidden eye icon still takes up space. */
538     .availability-eye[aria-hidden=true] {
539         display: inline;
540         visibility: hidden;
541     }
542     /* Eye icons in front of child lists are aligned specially. */
543     .availability-list > .availability-eye img {
544         vertical-align: top;
545         margin-top: 12px;
546     }
547     /* Add button lines up with child elements. */
548     .availability-button {
549         margin-left: 15px;
550     }
551     /* Nested section is grey. */
552     .availability-childlist > .availability-inner {
553         display: inline-block;
554         background: @wellBackground;
555         border: 1px solid @grayLighter;
556         border-radius: 4px;
557         padding: 6px;
558         margin-bottom: 6px;
559     }
560     /* Second (and more) levels of nested sections are white. */
561     .availability-childlist .availability-childlist > .availability-inner {
562         background: white;
563     }
564     /* Connecting text needs to be indented. */
565     .availability-connector {
566         margin-left: 20px;
567         margin-bottom: 6px;
568     }
570 .dir-rtl #fitem_id_availabilityconditionsjson {
571     .availability-group {
572         margin-right: 0;
573         margin-left: 8px;
574     }
575     .availability-none {
576         margin-right: 20px;
577         margin-left: 0;
578     }
579     .availability-plugincontrols {
580         padding-right: 4px;
581         padding-left: 0px;
582         margin-right: 0;
583         margin-left: 8px;
584     }
585     .availability-eye,
586     .availability-delete {
587         margin-left: 8px;
588         margin-right: 0;
589     }
590     .availability-button {
591         margin-right: 15px;
592         margin-left: 0;
593     }
594     .availability-connector {
595         margin-right: 20px;
596         margin-left: 0;
597     }
600 /* Default form styling colours all text red. With availability conditions
601    this looks excessive as we show 'Invalid' markers in specific places. */
602 .mform .error .availability-field {
603     color: @textColor;
606 /* This dialogue is used to add an availability condition. */
607 .availability-dialogue {
608     .moodle-dialogue .moodle-dialogue-bd {
609         padding-left: 0;
610         padding-right: 0;
611         padding-bottom: 2px;
612     }
613     ul {
614         display: block;
615         margin: 0;
616     }
617     li {
618         display: block;
619         list-style-type: none;
620         padding: 0 0 4px;
621         clear: both;
622         border-bottom: 1px solid @grayLighter;
623         margin-bottom: 4px;
624     }
625     ul button {
626         float: left;
627         margin-left: 1em;
628         min-width: 140px;
629         margin-top: 4px;
630     }
631     label {
632         margin-left: 170px;
633         margin-right: 1em;
634         margin-bottom: 0;
635     }
636     .availability-buttons button {
637         margin-left: 1em;
638         margin-right: 1em;
639         margin-top: 4px;
640     }
642 .dir-rtl .availability-dialogue {
643     ul button {
644         float: right;
645         margin-right: 1em;
646         margin-left: 0;
647     }
648     label {
649         margin-right: 170px;
650         margin-left: 1em;
651     }
654 /* Revert to the non-fixed width where a textarea has the number of columns
655    specified, or an input has it's size specified. */
656 textarea[cols],
657 input[size] {
658     width: auto;