やりたいこと
ある要素の幅を
bootstrapで.containerに設定しているwidthを基に、'calc()'で計算して設定したいです。
イメージは↓のような感じです。
Css
1td { 2 width: calc(#{getContainerWidth()} - #{$thWidth}); 3}
試したこと
- 関数作成
下記のように記述しましたが、コンパイル時に展開されてしまうので
いつも1170px
が返ってきます。
Sass
1@function getContainerWidth() { 2 @if (min-width: 1200px) { 3 @return (1170px); 4 } @else if (min-width: 992px) { 5 @return (970px); 6 } @else if (min-width: 768px) { 7 @return (750px); 8 } @else if (min-width: 576px) { 9 @return (540px); 10 } @else { 11 @return 100vw; 12 } 13}
@mixin
を使う
bootstrapと同じような形で展開される、@mixin
を作りました。
Sass
1@mixin setWidth($selector, $class, $property, $func) { 2 @each $min-width in 576px, 768px, 992px, 1200px { 3 @media (min-width: $min-width) { 4 #{$selector}.#{$class} { 5 @if $min-width == 576px { #{$property}: #{$func}(540px); } 6 @else if $min-width == 768px { #{$property}: #{$func}(750px); } 7 @else if $min-width == 992px { #{$property}: #{$func}(970px); } 8 @else if $min-width == 1200px { #{$property}: #{$func}(1170px); } 9 @else { $property: 100vw; } 10 } 11 } 12 } 13}
第4引数には関数を設定して、任意の計算をしたいです。
以下のような関数を用意しました。
@function func($value) { @return calc(#{$value} - #{$thWidth}); }
以下のように呼び出しました。
@include setWidth(td, test, width, func);
結果は@mixin
内のfunc
が思ったように展開されず、以下のようになりました。
func
以外は思ったようにできました。
@media (min-width: 576px) { td.test { width: func540px; } } @media (min-width: 768px) { td.test { width: func750px; } } @media (min-width: 992px) { td.test { width: func970px; } } @media (min-width: 1200px) { td.test { width: func1170px; } }
以下、参考にしたbootstrapの記述です。
Css
1@media (min-width: 768px) { 2 .container { 3 width: 750px; 4 } 5} 6 7@media (min-width: 992px) { 8 .container { 9 width: 970px; 10 } 11} 12 13@media (min-width: 1200px) { 14 .container { 15 width: 1170px; 16 } 17}
回答1件
あなたの回答
tips
プレビュー