সাসে পরিবর্তনশীল ভেরিয়েবলগুলি তৈরি করা বা উল্লেখ করা


94

আমি অন্য ভেরিয়েবলের রেফারেন্স দিতে আমার ভেরিয়েবলের স্ট্রিং ইন্টারপোলেশন ব্যবহার করার চেষ্টা করছি:

// Set up variable and mixin
$foo-baz: 20px;

@mixin do-this($bar) {
    width: $foo-#{$bar};
}

// Use mixin by passing 'baz' string as a param for use $foo-baz variable in the mixin
@include do-this('baz');

তবে আমি যখন এটি করি তখন আমি নিম্নলিখিত ত্রুটিটি পাই:

অপরিজ্ঞাত পরিবর্তনশীল: "oo foo-"।

সাস কি পিএইচপি-স্টাইলের পরিবর্তনশীল ভেরিয়েবলগুলি সমর্থন করে?

উত্তর:


50

সাস ভেরিয়েবলগুলি তৈরি করতে বা গতিশীলভাবে অ্যাক্সেস করতে দেয় না। তবে, আপনি অনুরূপ আচরণের জন্য তালিকা ব্যবহার করতে পারেন।

scss:

$list: 20px 30px 40px;    
@mixin get-from-list($index) {
  width: nth($list, $index);
}

$item-number: 2;
#smth {
  @include get-from-list($item-number);
}

সিএসএস উত্পন্ন:

#smth {
  width: 30px; 
}

9
@ কাস্টাস এটি কীভাবে আপনার সমস্যার সমাধান করেছে? আমি একটি খুব অনুরূপ ইস্যুতে দৌড়াচ্ছি যেখানে আমাকে তালিকা থেকে স্ট্রিংয়ের মান নিতে এবং এর সাথে একটি add যুক্ত করতে এবং এটি একটি ভেরিয়েবল হিসাবে ব্যবহার করতে হবে।
সিমেগাউন

88

ভেরিয়েবলের পরিবর্তে SASS মানচিত্র ব্যবহার করা এটি সম্ভব। এখানে একটি দ্রুত উদাহরণ:

গতিশীলভাবে উল্লেখ করা:

$colors: (
  blue: #007dc6,
  blue-hover: #3da1e0
);

@mixin colorSet($colorName) {
    color: map-get($colors, $colorName);
    &:hover {
        color: map-get($colors, $colorName#{-hover});
    }
}
a {
    @include colorSet(blue);
}

ফলাফলগুলি:

a { color:#007dc6 }
a:hover { color:#3da1e0 }

গতিশীলভাবে তৈরি করা:

@function addColorSet($colorName, $colorValue, $colorHoverValue: null) {
  $colorHoverValue: if($colorHoverValue == null, darken( $colorValue, 10% ), $colorHoverValue);

  $colors: map-merge($colors, (
    $colorName: $colorValue,
    $colorName#{-hover}: $colorHoverValue
  ));

  @return $colors;
}

@each $color in blue, red {
  @if not map-has-key($colors, $color) {
    $colors: addColorSet($color, $color);
  }
  a {
    &.#{$color} { @include colorSet($color); }
  }
}

ফলাফলগুলি:

a.blue { color: #007dc6; }
a.blue:hover { color: #3da1e0; }
a.red { color: red; }
a.red:hover { color: #cc0000; }

10
মনে রাখবেন এটি এখনও "গতিশীল পরিবর্তনশীল" নয়। আমরা চিরকাল থেকেই ব্যবহার করে আসছি এমন তালিকার একটি তালিকা ব্যবহারের ক্ষেত্রে এটি কেবল একটি বৈচিত্র।
cimmanon

13
এটি প্রকৃতপক্ষে তালিকার উপরে প্রসারিত হয়, যা কেবল সূচক সংখ্যাটিকে নির্দিষ্টকরণের পরিবর্তনশীল হিসাবে গ্রহণ করে। এটি চলকগুলিকে ডায়নামিকালি উত্পাদিত নাম সহ কল ​​করার অনুমতি দেয় যা একটি পাস করা স্ট্রিংয়ের কনটেন্টেশন দ্বারা তৈরি হয়েছিল, যা অনুরোধকৃত কার্যকারিতা ছিল।
dibbledeedoo

4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। যদিও সম্পূর্ণ গতিশীল নয়, এটি অনুরোধ করা কার্যকারিতা সর্বোত্তমভাবে নকল করে।
থোমাক্স

4
কার্যকর হওয়ার সময়, এই উদাহরণটি কোনও ভেরিয়েবল তৈরি করছে না
ইথিল

সত্য। অপের প্রশ্নের শিরোনাম থাকা সত্ত্বেও, এর পাঠ্যটি ভেরিয়েবলগুলি তৈরির বর্ণনা দেয় না, তাই আমি এটিকে সম্বোধন করি না। তবে, এটি করার সাথে সম্পর্কিত একটি বিভাগ যুক্ত করেছেন (যদিও মানচিত্রের সাথে এখনও, একক ভেরিয়েবল নয়)।
dibbledeedoo

5

যে কোনও সময় আমার শর্তসাপেক্ষ মান ব্যবহার করা দরকার, আমি ফাংশনগুলিতে ঝুঁকছি। এখানে একটি সহজ উদাহরণ।

$foo: 2em;
$bar: 1.5em;

@function foo-or-bar($value) {
  @if $value == "foo" {
    @return $foo;
  }
  @else {
    @return $bar;
  }
}

@mixin do-this($thing) {
  width: foo-or-bar($thing);
}

আমি মনে করি এটি ঠিক যা খুঁজছি। এটি মূলত মিক্সিনে পাস করা মানটি গ্রহণ করে এবং এটি ফাংশনটির মাধ্যমে চালিত করে। তারপরে, স্টেটমেন্টগুলির একটি সিরিজের উপর নির্ভর করে ভেরিয়েবলের মতো একই স্ট্রিংয়ের মান প্রদান করে। সম্ভাব্য অসীম সংখ্যার মান দিয়ে এটি করা কি সম্ভব হবে? ধরা যাক আমাদের কাছে কেবল foo বা বার নয়, অনেকগুলি স্ট্রিংয়ের একটি তালিকা রয়েছে।
সিমেগাউন

4
এটি খাঁটি খারাপ অনুশীলন, আপনি যদি শর্তগুলির একটি অন্তহীন চেইন দিয়ে শেষ করতে চান না। মূল মান জোড় সহ SASS মানচিত্র ব্যবহার করুন এবং এর পরিবর্তে মানগুলি টানুন।
mystrdat

এটি এই শোকেসে মূলত অনর্থক - কেন আপনি কেবল কল করবেন না @include do-this($foo);? ... তবে এটি
অর্থবোধ

2

আপনি যদি রেলগুলির সাথে কাজ করছেন এবং সম্ভবত অন্যান্য পরিস্থিতিতে এটি ব্যবহার করছেন তবে এখানে আরেকটি বিকল্প রয়েছে।

আপনি যদি ফাইল এক্সটেনশনের শেষে .erb যুক্ত করেন, ব্যর্থতা SASS দোভাষীকে প্রেরণের আগে ফাইলটিতে erb প্রক্রিয়া করবে। এটি আপনাকে রুবিতে যা করতে চান তা করার সুযোগ দেয়।

উদাহরণস্বরূপ: (ফাইল: foo.css.scss.erb)

// Set up variable and mixin
$foo-baz: 20px; // variable

<%
def do_this(bar)
  "width: $foo-#{bar};"
end
%>

#target {
  <%= do_this('baz') %>
}

নিম্নলিখিত scss ফলাফল:

// Set up variable and mixin
$foo-baz: 20px; // variable

#target {
  width: $foo-baz;
}

কোনটি মোটা, নিম্নলিখিত সিএসএসের ফলাফল:

#target {
  width: 20px;
}

0

আমি সম্প্রতি একটি রঙকে ডায়নামিকভাবে উল্লেখ করার প্রয়োজনটি করেছি।

আমার কাছে প্রতিটি প্রকল্পের জন্য একটি _colours.scss ফাইল রয়েছে, যেখানে আমি আমার সমস্ত রঙ একবারে সংজ্ঞায়িত করি এবং তাদের জুড়ে চলক হিসাবে উল্লেখ করি।

আমার _forms.scss ফাইলটিতে আমি প্রতিটি রঙের জন্য বাটন শৈলী সেটআপ করতে চেয়েছিলাম। সাধারণত একটি ক্লান্তিকর কাজ। এটি আমাকে প্রতিটি ভিন্ন রঙের জন্য একই কোড লিখতে এড়াতে সহায়তা করেছিল।

একমাত্র ক্ষতি হ'ল আসল সিএসএস লেখার আগে আপনাকে প্রতিটি রঙের নাম এবং মান তালিকাভুক্ত করতে হবে।

// $red, $blue - variables defined in _colours.scss
$colours: 
  'red' $red,
  'blue' $blue;

@each $name, $colour in $colours {
  .button.has-#{$name}-background-color:hover {
    background-color: lighten($colour, 15%);
  }
}

-2

ডায়নামিক ভেরিয়েবল তৈরি করা এখন পর্যন্ত SASS তে সম্ভব নয়, যেহেতু আপনি স্যাস কমান্ডটি চালানোর পরে আপনি একবারে আরও একটি ভার্স যুক্ত করতে / সংযোগ স্থাপন করবেন p

কমান্ডটি চালানোর সাথে সাথে এটি অবৈধ সিএসএসের জন্য একটি ত্রুটি ছুঁড়ে দেবে, কারণ আপনার সমস্ত ঘোষিত ভেরিয়েবলগুলি উত্তোলন অনুসরণ করবে।

একবার চালানোর পরে, আপনি উড়ে আবার ভেরিয়েবল ঘোষণা করতে পারবেন না

আমি এটি বুঝতে পেরেছি তা জানতে, নিম্নলিখিতটি সঠিক হলে দয়া করে বলুন:

আপনি পরেরটি ঘোষণা করতে চান যেখানে পরের অংশটি (শব্দ) গতিশীল

কিছুটা এইরকম

$list: 100 200 300;

@each $n in $list {
    $font-$n: normal $n 12px/1 Arial;
}

// should result in something like

$font-100: normal 100 12px/1 Arial;
$font-200: normal 200 12px/1 Arial;
$font-300: normal 300 12px/1 Arial;

// So that we can use it as follows when needed

.span {
    font: $font-200;
    p {
       font: $font-100
    }
}

আপনি যদি এটি চান তবে আমি এখনই ভয় পাচ্ছি, এটি অনুমোদিত নয়


4
দুর্ভাগ্যক্রমে এটি কাজ করছে না: ত্রুটি scss / घटक.scss (লাইন 71: "$ ফন্ট-": প্রত্যাশিত ":" এর পরে অবৈধ সিএসএস, "$ n: সাধারণ $ n 1 ...") ছিল
ক্রিজিসটফ রোমানভস্কি

4
@ কাস্টাস, উফ! পরিষ্কার না হওয়ার জন্য দুঃখিত - আমি কোনও সমাধান দিচ্ছি না, বরং আরও একবার প্রশ্নটি ব্যাখ্যা করছি
ওম শঙ্কর

16
অনুমোদিত নয় এমন কোনও সমাধান সম্ভবত পোস্ট করা উচিত!
Rhyso

আমি প্রস্থ এটি কাজ করবে কিন্তু মনে হচ্ছে আমরা স্যাসের মাধ্যমে ভেরিয়েবল তৈরি করতে পারি না?
v3nt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.