2017-01-31 7 views
1

すべての結果を選択してCSSラインに印刷できますか?@forのすべてを選択するscssを使用する

私の主な目標はこの動的なものにすることです。そのため、$列が12または8に切り替えられても、それらを1行にしたいと考えています。

2番目のコードブロックである.col-1、.col-2、.col-3、.col-4は2回印刷されていますが、上。

私はおそらくこれを書く別の方法を検討していましたが、私はこれをできるだけシンプルに保ちたいと思います。

.col-1 { 
    float: left; 
} 

$columns: 4; 

@for $col-width from 1 through $columns { 
    .col-#{$col-width} { 
    width: ((100/$columns) * $col-width) * 1%; 
    @extend .col-1; 
    } 
} 

このコードでは以下のようになります。今私の問題は、すべての.colが2回印刷されていることです。私は一度だけ見せたい。一度それを@extendにする方法や、より良い選択肢は何ですか?

.col-1, .col-2, .col-3, .col-4 { 
    float: left; 
    width: 100%; 
} 

.col-1, .col-2, .col-3, .col-4 { 
    width: 25%; 
} 

.col-2 { 
    width: 50%; 
} 

.col-3 { 
    width: 75%; 
} 

.col-4 { 
    width: 100%; 
} 
+0

ちょうど明確にするために - 正確に何をwanしますか最終的なCSSはこの4列の場合になりますか? – andi

答えて

2

私はあなたが探しているものはplaceholder selectorですが、以下のように拡張できると思います。プレースホルダセレクタは、%が前面にあるセレクタであり、そのようなセレクタ+ルールはSassファイルにのみ存在します。このブロック自体は、コンパイル済みのCSSファイルには存在しません。これらのプレースホルダを拡張するセレクタは、プレースホルダセレクタ内にのプロパティがリストされ、不必要にCSSに追加されません。また、プレースホルダーセレクターのルールが@forループによって変更されることはないので、他の答えでも説明されている問題で終わることはありません。以下は

%float-left { 
    float: left; 
} 
$columns: 4; 
@for $col-width from 1 through $columns { 
    .col-#{$col-width} { 
    width: ((100/$columns) * $col-width) * 1%; 
    @extend %float-left; 
    } 
} 

コンパイルCSSは次のようになります方法です:あなたは、ワイルドカード属性セレクタ

// target all classes containing "col-" 
[class*="col-"]{ float: left; }  

$columns: 4; 
@for $col-width from 1 through $columns { 
    .col-#{$col-width} { 
    width: 100%/$columns * $col-width; 
    } 
} 

CSS出力を持つすべての列クラスをターゲット可能性が

.col-1, .col-2, .col-3, .col-4 { 
    float: left; 
} 
.col-1 { 
    width: 25%; 
} 
.col-2 { 
    width: 50%; 
} 
.col-3 { 
    width: 75%; 
} 
.col-4 { 
    width: 100%; 
} 
0

COL-1ループ最初通過しているので、その幅が(100%)最初の定義されているだろう。ループの最初の反復の後、それは次のようになります。ループを通る

.col-1 { 
    float: left; 
    width: 100%; 
} 

後続の反復は、が100%の幅を含ん.col-1現在、あるものは何でも延長しようとします。

なぜ単にそのように@extendを取り除くと、ループ自体にフロートを定義?:

$columns: 4; 

@for $col-width from 1 through $columns { 
    .col-#{$col-width} { 
    width: ((100/$columns) * $col-width) * 1%; 
    float: left; 
    } 
} 

しないカラム1はまだ100%の幅を取得しますが、他の列ではないであろう。)

これが役に立ちます。

+0

私はそのようにすることができますが、複数回書かれた "浮動小数点:左"を持つことは理にかなっていますか?いくつかの行を1つの.css行の下に保存することで、いくつかの行を節約したかった – user3803699

0

[class*="col-"] { float: left; } 
.col-1 { width: 25%; } 
.col-2 { width: 50%; } 
.col-3 { width: 75%; } 
.col-4 { width: 100%; } 
+0

はい、これらのワイルドカード属性セレクタの使用中には常に注意が必要です。例えば、このセレクタはクラスが 'not-a-col-1'などの要素を選択するようになりました。 – Harry

+0

非常に有効なポイントハリーです。これはまともな解決策ではないようですが、命名規則の問題に直面する可能性があります。 – user3803699

+0

はい@ user3803699これは素晴らしいオプションですが、実装が慎重でないと難しくなります。 – Harry

関連する問題