of-bootstrap - Typeahead 下拉宽度
ng-bootstrap - Typeahead dropdown width
我开始使用 ng-bootstrap Typeahead 组件,我对此非常满意。
我想实现的一件事是让下拉项具有与输入字段相同的宽度,而默认行为会根据文本长度应用宽度。应该是基本的CSS...
我在 Plunker 中创建了一个基本的 Example。
如您所见,应用的样式被忽略:
.dropdown-menu { width: 100%;}
而如果我使用浏览器开发工具并应用相同的工具。
关于如何通过使用 CSS 实现结果的任何想法?
@Nandita 的回答是正确的,直接给下拉菜单应用宽度不会影响。
并且您希望下拉菜单具有与输入相同的宽度,因此您应该在 CSS 下面添加到她的回答中:
.dropdown-menu { width: 300px;}
将encapsulation: ViewEncapsulation.None
添加到组件
import {Component, ViewEncapsulation} from '@angular/core';
@Component({
selector: 'ngbd-typeahead-template',
templateUrl: 'src/typeahead-template.html',
styleUrls: ['src/typeahead-template.css'],
encapsulation: ViewEncapsulation.None
})
查看更新plunker
如果没有 ViewEncapsulation.None,此组件中应用的样式将仅影响此组件,而不会影响此页面上的任何其他组件。
阅读this了解更多信息
对我来说工作很深入。看起来更安全,范围更广:
::ng-deep .dropdown-menu { width: 100%; }
此代码 100% 有效,但使用 class .dropdown-menu
任何其他下拉菜单都会发生变化
::ng-deep .dropdown-menu { width: 100%; }
所以我只是用了这段代码,ID是ngb-typeahead-
:
::ng-deep [id^="ngb-typeahead-"]{
width: 100%!important;
white-space: nowrap!important;
overflow: hidden!important;
text-overflow: ellipsis!important;}
使用 scss 应该可以解决问题。在你的dom中找到父div,并给它一个class'dropdown-wrapper'.
.dropdown-wrapper {
.dropdown-menu {
width: 90%;
}
}
将此添加到您的全局 scss。干杯!
扩展 Nandita Sharma 的回答,在 Angular 中关闭 ViewEncapsulation 时,将任何 CSS 规则的范围限定到组件可能是个好主意。这将避免在全局 CSS 范围内泄漏一般命名的 类。
一个非常简单的方法是在组件的选择器内限定所有内容:
// Name of the component containing the typeahead
app-parent-selector {
// Rules added here won't leak out into the global CSS scope
.dropdown-menu {
width: 400px;
}
}
避免使用任何使用阴影穿透后代组合器(::ng-deep、/deep/ 或 >>>)的方法也是明智的,因为对它们的支持正在逐渐从所有主要浏览器中移除并且 will eventually be removed from Angular.
这就是我让它在响应式 col
中工作的方式:
::ng-deep ngb-typeahead-window.dropdown-menu {
width: calc(100% - 30px);
}
或
::ng-deep .dropdown-menu.show {
width:calc(100% - 30px);
}
不确定哪个是最好的选择,但我倾向于第一个。
如果您计划在所有页面中以相同的方式使用预先输入字段,最好的办法是在全局范围内添加它。如果您有一个 styles.scss
可以容纳所有全局样式,请在此处添加:
ngb-typeahead-window {
width:calc(100% - 30px);
.dropdown-item {
overflow: hidden;
text-overflow: ellipsis;
}
}
我开始使用 ng-bootstrap Typeahead 组件,我对此非常满意。
我想实现的一件事是让下拉项具有与输入字段相同的宽度,而默认行为会根据文本长度应用宽度。应该是基本的CSS...
我在 Plunker 中创建了一个基本的 Example。
如您所见,应用的样式被忽略:
.dropdown-menu { width: 100%;}
而如果我使用浏览器开发工具并应用相同的工具。
关于如何通过使用 CSS 实现结果的任何想法?
@Nandita 的回答是正确的,直接给下拉菜单应用宽度不会影响。
并且您希望下拉菜单具有与输入相同的宽度,因此您应该在 CSS 下面添加到她的回答中:
.dropdown-menu { width: 300px;}
将encapsulation: ViewEncapsulation.None
添加到组件
import {Component, ViewEncapsulation} from '@angular/core';
@Component({
selector: 'ngbd-typeahead-template',
templateUrl: 'src/typeahead-template.html',
styleUrls: ['src/typeahead-template.css'],
encapsulation: ViewEncapsulation.None
})
查看更新plunker
如果没有 ViewEncapsulation.None,此组件中应用的样式将仅影响此组件,而不会影响此页面上的任何其他组件。
阅读this了解更多信息
对我来说工作很深入。看起来更安全,范围更广:
::ng-deep .dropdown-menu { width: 100%; }
此代码 100% 有效,但使用 class .dropdown-menu
任何其他下拉菜单都会发生变化
::ng-deep .dropdown-menu { width: 100%; }
所以我只是用了这段代码,ID是ngb-typeahead-
:
::ng-deep [id^="ngb-typeahead-"]{
width: 100%!important;
white-space: nowrap!important;
overflow: hidden!important;
text-overflow: ellipsis!important;}
使用 scss 应该可以解决问题。在你的dom中找到父div,并给它一个class'dropdown-wrapper'.
.dropdown-wrapper {
.dropdown-menu {
width: 90%;
}
}
将此添加到您的全局 scss。干杯!
扩展 Nandita Sharma 的回答,在 Angular 中关闭 ViewEncapsulation 时,将任何 CSS 规则的范围限定到组件可能是个好主意。这将避免在全局 CSS 范围内泄漏一般命名的 类。
一个非常简单的方法是在组件的选择器内限定所有内容:
// Name of the component containing the typeahead
app-parent-selector {
// Rules added here won't leak out into the global CSS scope
.dropdown-menu {
width: 400px;
}
}
避免使用任何使用阴影穿透后代组合器(::ng-deep、/deep/ 或 >>>)的方法也是明智的,因为对它们的支持正在逐渐从所有主要浏览器中移除并且 will eventually be removed from Angular.
这就是我让它在响应式 col
中工作的方式:
::ng-deep ngb-typeahead-window.dropdown-menu {
width: calc(100% - 30px);
}
或
::ng-deep .dropdown-menu.show {
width:calc(100% - 30px);
}
不确定哪个是最好的选择,但我倾向于第一个。
如果您计划在所有页面中以相同的方式使用预先输入字段,最好的办法是在全局范围内添加它。如果您有一个 styles.scss
可以容纳所有全局样式,请在此处添加:
ngb-typeahead-window {
width:calc(100% - 30px);
.dropdown-item {
overflow: hidden;
text-overflow: ellipsis;
}
}