- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用基于组件的 CSS 样式,所以我一直在使用 mixin 来允许我使用媒体查询而不会意外地编译数百个。这就是我为屏幕尺寸所做的:
主文件:
.mq-medium() {}
@import //other files
@media only screen and (min-width: 600px) {
.mq-medium;
}
另一个文件:
.mq-medium() {
.banner {
width: 50%;
}
}
这可以多次使用并产生分组查询。
我正在尝试对视网膜背景图像查询做同样的事情,但我不知道如何去做。这是我的测试:
.mq-retina() { }
.background-image(@image){
@filename: ~`/(.*)\.(jpg|jpeg|png|gif)/.exec(@{image})[1]`;
@extension: ~`/(.*)\.(jpg|jpeg|png|gif)/.exec(@{image})[2]`;
background-image: ~`"url(@{filename}.@{extension})"`;
.mq-retina() {
& {
background-image: ~`"url(@{filename}_2x.@{extension})"`;
background-size: 100%;
}
}
}
.lol {
.background-image("test.jpg");
}
@media only screen and (min-device-pixel-ratio: 1.5) { //shortened for this example
.mq-retina;
}
但是输出只是
.lol {
background-image: url(test.jpg);
}
我认为这与范围界定问题有关,但我不确定如何解决这个问题。如何添加到 .mq-retina()
mixin 而不会出现范围界定问题?
最佳答案
(有关此解决方案的上下文,请参阅上面的评论)。我会说非重复媒体查询的代价将永远是“然后重复其他事情”。 IE。它要么必须是媒体相关的属性,如:
// ...................................
// usage:
.mq-default() {
.banner {
.background-image("test.jpg");
}
}
.mq-retina() {
.banner {
.background-image("test.jpg");
}
}
// ...................................
// impl:
.mq-default() {}
.mq-retina() {}
& {
.mq-default;
.background-image(@image) {
background-image: @image;
}
}
@media (min-device-pixel-ratio: 1.5) {
.mq-retina;
.background-image(@image) {
background-image: replace(@image, "\.", "_2x.");
background-size: 100%;
}
}
或者媒体依赖于选择器本身,如:
// ...................................
// usage:
.background-image(banner, "test.jpg");
// ...................................
// impl:
.mq-retina() {}
@media (min-device-pixel-ratio: 1.5) {
.mq-retina;
}
.background-image(@class, @image) {
.@{class} {
background-image: @image;
}
.mq-retina() {
.@{class} {
background-image: replace(@image, "\.", "_2x.");
background-size: 100%;
}
}
}
附言对于这个简化的案例,也可以修改第一个示例以消除重复,例如:
// ...................................
// usage:
.mq-common() {
.banner {
.background-image("test.jpg");
}
}
// ...................................
// impl:
.mq-default() {.mq-common}
.mq-retina() {.mq-common}
& {
.mq-default;
.background-image(@image) {
background-image: @image;
}
}
@media (min-device-pixel-ratio: 1.5) {
.mq-retina;
.background-image(@image) {
background-image: replace(@image, "\.", "_2x.");
background-size: 100%;
}
}
但这样它实际上变成了第二个示例的变体(其中更复杂的代码将导致在生成的 CSS 中重复选择器,因为您不想将所有属性都放入 .mq-common
), 不算整个事情也变得相当令人头疼。
附言最后, 最终可以通过引入另一个间接级别来合并“所有内容”(在生成的 CSS 中),但源代码本身变得过于冗长,无法在实践中实际使用。 (在这个例子中,我将把它分成两个文件以获得更清晰的代码,但这并不是真正需要的 - 导入的文件可以写成一个大的 mixin):
// ...................................
// styles.less:
.banner {
.mq-default({
color: red;
});
.mq-medium({
color: green;
});
.mq-retina({
color: blue;
});
.background-image("test.jpg");
note: not "wrapped" properties will appear in every media block;
}
.background-image(@image) {
.mq-default({
background-image: @image;
});
.mq-retina({
background-image: replace(@image, "\.", "_2x.");
background-size: 100%;
});
}
// ...................................
// main.less:
.media-import(default);
@media (min-width: 600px) {
.media-import(medium);
}
@media (min-device-pixel-ratio: 1.5) {
.media-import(retina);
}
.media-import(@device) {
.mq-default(@styles) when (@device = default) {@styles();}
.mq-medium(@styles) when (@device = medium) {@styles();}
.mq-retina(@styles) when (@device = retina) {@styles();}
@import (multiple) "styles.less";
}
关于css - 无冗余的 LESS CSS 视网膜媒体查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26000660/
我在尝试使用 WebStorm LESS File Watcher 时遇到此错误 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/
我有一个带有以下结构的 .less 样式表: @width:600; .some-style { width:@{width}px; } 这给出了以下错误: Expected '}' on l
说我有以下结构 /node_modules /src /components /component1 /style /style.less
我想使用灰度函数,但 LESS 一直抛出此错误,我没有看到灰度的 mixin 或如何使用它。有什么帮助吗? Error 148 Expected color in function 'graysc
我的文件较少,如下面的目录结构 vendor/includes/file1.less vendor/includes/file1.less vendor/includes/file1
如果我在 LESS 中定义以下嵌套样式: .nav-bar { .navbar-brand { background: #000; } } .nav-bar {
我正在尝试设置一个使用 lein-less 插件编译 .less 文件的 clojurescript 项目。我应该说我是 clojurescript 的新手。问题是它似乎没有运行。它在我运行“lein
有人会这样使用“less”: var less = require('less'); less.render('.class { width: (1 + 1) }', function (e, css
我正在尝试在一个新元素中测试 less.js。我 100% 确定 javascript 文件加载正常,但我的 css 文件夹中的 less 文件一直出现此错误。我打算在启动之前使用 less.app
我有以下更少: .container { .column, .columns { .one& { width: 40px; }
这是一个代码(test.less): body { padding: 50px; } body { padding: 20px; } 为什么在编译成 CSS 后我有这个: body {
我有一个变量 @index我想输出一个选择器,以便当 @index是 3 , 选择器是 [data-sth="3"] . 更长的例子: @index: 3; /* selector here */ {
假设我有一个使用 Less 定义的样式: ul.unstyled, ol.unstyled { margin-left: 0; list-style: none; } 稍后,我想重新使用 un
假设我有以下 Less 设置: .box { border: 1px solid #333; &.error { background-color: Red; } } 如果我想
我有一个 common.less文件,它为不同的皮肤实现了基本的 CSS: @textColor: black; @iconSize: 16px; .container: { color: @
我创建了使用 LESS 功能切换主题的代码。不幸的是,LESS 文件不会在浏览器中编译。如何在浏览器中编译 LESS 文件? 最佳答案 这是一张documentation : Client-side
我想使用 less 来定位类中的特定元素。 在这种情况下,我想定位类 button 的元素,但在此范围内我想定位一个 anchor 标签 a . 目前我有: .button { /* lots
我正在努力做某事。我的项目是这样的: /app /assets /components /stylesheets /less
我目前正在一个项目中使用 Twitter Bootstrap,包括 LESS 文件并使用我们编写的一些附加 LESS 代码进行编译。 最新版本意味着我们需要覆盖一些 Bootstrap LESS 变量
我有这个更少的代码,这工作得很好。我只是想在 less cli 编译它时节省一些空间。 .secondary-content { background: #ffcc80; color:
我是一名优秀的程序员,十分优秀!