我需要自定義md-select,以使選項列表更像傳統選擇。這些選項應顯示在select元素的下方,而不是懸停在元素的頂部。有沒有人知道存在這樣的事情,或者如何做到這一點?如何在角度材料中控制md-select下拉位置
回答
原來這竟然是一些我曾與Javascript和setTimeout的做,醜陋的解決方案。只有在材料設計使用下拉列表的javascript定位時,纔能有效地使用CSS進行此操作。因此,我不得不在附近的彈出窗口中添加一個函數,我設置了一個200ms的超時時間,用於計算屏幕上下拉的所需位置並將其移動到那裏。我還將控制器中的函數附加到窗口大小調整事件,以便它隨着調整大小移動。
最終,您必須使用超時才能獲得材料設計時間來執行基於JavaScript的移動彈出窗口,然後自行移動它。當移動發生時,我也使用一種技巧來隱藏它,以便用戶看不到跳躍。這就是爲了防止其他人嘗試類似的情況,我必須做的描述。
你的解決方案很好,但爲什麼沒有代碼示例? –
我有同樣的問題,這沒有幫助沒有代碼。我不知道爲什麼這被接受爲答案。 – Ziggler
嗨也許嘗試這樣的事:
$('.dropdown-button2').dropdown({
inDuration: 300,
outDuration: 225,
constrain_width: false, // Does not change width of dropdown to that of the activator
hover: true, // Activate on hover
gutter: ($('.dropdown-content').width()*3)/2.5 + 5, // Spacing from edge
belowOrigin: false, // Displays dropdown below the button
alignment: 'left' // Displays dropdown with edge aligned to the left of button
}
);
https://jsfiddle.net/fb0c6b5b/
一個員額似乎有同樣的問題:How can I make the submenu in the MaterializeCSS dropdown?
在這裏你去 - CodePen
使用md-container-class
屬性。從docs:
標記
<div ng-controller="AppCtrl" class="md-padding" ng-cloak="" ng-app="MyApp">
<md-input-container>
<label>Favorite Number</label>
<md-select ng-model="myModel" md-container-class="mySelect">
<md-option ng-value="myVal" ng-repeat="myVal in values">{{myVal.val}}</md-option>
</md-select>
</md-input-container>
</div>
CSS
.mySelect md-select-menu {
margin-top: 45px;
}
JS
(function() {
'use strict';
angular
.module('MyApp',['ngMaterial', 'ngMessages', 'material.svgAssetsCache'])
.controller('AppCtrl', function($scope) {
$scope.required = "required";
$scope.values = [
{val:1, des: 'One'},
{val:2, des: 'Two'}
];
});
})();
這一直無法正常工作。請注意,一旦您再次更改所選值時選擇了值2,現在輸入框會被部分覆蓋。你有更多的選擇,這變得越明顯。一旦您選擇了一個值,選定值位於列表的最下方,一旦您再次點擊選擇,彈出窗口就會向上移動。 – user692918
給使用md-select進行cdk-overlay(cdk-panel)的人。
假設您在工作環境中使用Angular 2,Typescript,Pug和Material Design Lite(MDL)。
函數樣式md-select在點擊時起作用。
Javascript語言,組件(打字稿)
@Component({
selector: ..,
templateUrl: ..,
styleUrl: ..,
// For re-calculating on resize
host: { '(window:resize)': 'onResize()' }
})
export class MyComponent {
//Function to style md-select BEGIN
public styleSelectDropdown(event) {
var bodyRect = document.body.getBoundingClientRect();
let dropdown = document.getElementsByClassName("cdk-overlay-pane") as HTMLCollectionOf<HTMLElement>;
if (dropdown.length > 0) {
for(var i = 0; i < dropdown.length; i++) {
dropdown[i].style.top = "auto";
dropdown[i].style.bottom = "auto";
dropdown[i].style.left = "auto";
}
for(var i = 0; i < dropdown.length; i++) {
if (dropdown[i].innerHTML != "") {
var getDropdownId = dropdown[i].id;
document.getElementById(getDropdownId).classList.add('pane-styleSelectDropdown');
}
}
}
let target = event.currentTarget;
let selectLine = target.getElementsByClassName("mat-select-underline") as HTMLCollectionOf<HTMLElement>;
if (selectLine.length > 0) {
var selectLineRect = selectLine[0].getBoundingClientRect();
}
let targetPanel = target.getElementsByClassName("mat-select-content") as HTMLCollectionOf<HTMLElement>;
if (targetPanel.length > 0) {
var selectLineRect = selectLine[0].getBoundingClientRect();
}
if (dropdown.length > 0) {
for(var i = 0; i < dropdown.length; i++) {
dropdown[i].style.top = selectLineRect.top + "px";
dropdown[i].style.bottom = 0 + "px";
dropdown[i].style.left = selectLineRect.left + "px";
}
}
var windowHeight = window.outerHeight;
if (targetPanel.length > 0) {
targetPanel[0].style.maxHeight = window.outerHeight - selectLineRect.top + "px";
}
}
public onResize() {
this.styleSelectDropdown(event);
}
//Function to style md-select END
}
HTML(帕格)
.form-container
div.styleSelectDropdown((click)="styleSelectDropdown($event)")
md-select.form-group(md-container-class="my-container", id = '...',
md-option(....)
CSS將覆蓋材料設計精簡版(MDL)的CSS
.pane-styleSelectDropdown .mat-select-panel {
border: none;
min-width: initial !important;
box-shadow: none !important;
border-top: 2px #3f51b5 solid !important;
position: relative;
overflow: visible !important;
}
.pane-styleSelectDropdown .mat-select-panel::before {
content: "";
position: absolute;
top: -17px;
right: 0;
display: block;
width: 0;
height: 0;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 5px solid #3f51b5;
margin: 0 4px;
z-index: 1000;
}
.pane-styleSelectDropdown .mat-select-content {
border: 1px solid #e0e0e0;
box-shadow: 0 2px 1px #e0e0e0;
position: relative;
}
@media screen and (max-height: 568px) {
.pane-styleSelectDropdown .mat-select-content {
overflow-y: scroll;
}
}
.pane-styleSelectDropdown.cdk-overlay-pane {
top: 0;
bottom: 0;
left: 0;
overflow: hidden;
padding-bottom: 5px;
z-index: 10000;
}
.pane-styleSelectDropdown .mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple),
.pane-styleSelectDropdown .mat-option:focus:not(.mat-option-disabled),
.pane-styleSelectDropdown .mat-option:hover:not(.mat-option-disabled) {
background: #fff !important;
}
.pane-styleSelectDropdown .mat-option {
line-height: 36px;
height: 36px;
font-size: 14px;
}
- 1. 角材料MD-選擇下拉定位
- 2. 設置角材料從控制器下拉默認值
- 3. 角度材料如何獲得md-switch的位置在右側?
- 4. 如何在角材料中顯示下拉菜單
- 5. 角度材料,$ mdDialog
- 6. 無法從控制器重置角度材料設計表格
- 7. 如何從控制器功能打開角度材料菜單?
- 8. 如何角材料
- 9. 角材料垂直位置問題
- 10. 怎麼辦下拉項導航欄上用材料的角度
- 11. 材料角度虛擬重複不顯示下拉值
- 12. 控制周圍角材料mdInput邊境
- 13. 如何使用角度材料日曆
- 14. 材料角度與角4在生產
- 15. 角度和角度材料[$ injector:modulerr]
- 16. 在角度材料設計的工具欄下面設置sidenav?
- 17. 角度材料滑塊如何設置刻度值
- 18. 角度材料VS Materialisecss
- 19. Pinterest角度材料佈局
- 20. 材料和角度2
- 21. 錯誤:角度2材料
- 22. 如何下載角材料演示
- 23. 角度材料 - 如何在圖像旁邊放置文字
- 24. 角材料2,如何主題選擇下拉
- 25. 如何使用材料下拉選擇角飛鏢
- 26. 角度材料菜單位置(通知欄)
- 27. 角度材料md菜單位置問題
- 28. 從角度材料按鈕傳遞信息到控制器
- 29. 角材料2定製
- 30. 在角度材料日期選擇器中定位日期值
在框架完成它的東西之後,只需將'select'高度添加到'element.style.top'?或者在框架源代碼的某個地方進行更改,比如設置「top」的第1591行?不過,不知道單獨更改'top'是否會搞亂預期的用戶界面。 – Roope