CSS කැල්ක් () ශ්‍රිතයේ සාස් විචල්‍යය


1388

මම calc()ශ්‍රිතය සාස් ස්ටයිල් ෂීට් එකක භාවිතා කිරීමට උත්සාහ කරමි , නමුත් මට ගැටළු කිහිපයක් තිබේ. මෙන්න මගේ කේතය:

$body_padding: 50px

body
    padding-top: $body_padding
    height: calc(100% - $body_padding)

50pxමගේ body_paddingවිචල්‍යය වෙනුවට මම වචනානුසාරයෙන් භාවිතා කරන්නේ නම් , මට අවශ්‍ය දේ හරියටම මට ලැබේ. කෙසේ වෙතත්, මම විචල්යයට මාරු වන විට, මෙය ප්රතිදානය වේ:

body {
    padding-top: 50px;
    height: calc(100% - $body_padding); }

calcශ්‍රිතය තුළ විචල්‍යය ප්‍රතිස්ථාපනය කළ යුතු බව සාස් හඳුනා ගන්නේ කෙසේද ?



19
@ user3705055 ඒකක වෙනස් බැවින් සාස්ට 100% - 50px ගණනය කළ නොහැකි බැවින් ඔබට ගණනය කිරීම අවශ්‍ය වේ. මෙය ගණනය කළ හැක්කේ බ්‍රව්සරයට පමණි, අගයන් එකතු කිරීමට පෙර 100% px බවට පරිවර්තනය කිරීම සඳහා කන්ටේනරය කොතරම් විශාලදැයි දැනගත් පසු පමණි. ගණනය කිරීම් පැවතීමට නිශ්චිත හේතුව මෙයයි.
Mog0

Answers:


2608

අන්තර් මැදිහත්වීම :

body
    height: calc(100% - #{$body_padding})

මෙම අවස්ථාව සඳහා, මායිම් පෙට්ටිය ද ප්‍රමාණවත් වේ:

body
    box-sizing: border-box
    height: 100%
    padding-top: $body_padding

3
box-sizing: border-box;මගේ මතය අනුව, යන්නට සුදුසුම මාර්ගය වනු ඇත. පොදුවේ ගත් කල, කොටු ප්‍රමාණ කිරීමේ ආකෘතිය t
Brandito

බොහෝම ස්තූතියි! මම සීඑස්එස් මාර්ගය සමඟ යාමට සූදානම්ව සිටියෙමිcalc(100% - var(--body_padding))
සිලාර්

59

$variablesඔබේ ඇතුළත භාවිතා කිරීමටcalc() උස දේපල :

HTML:

<div></div>

SCSS:

$a: 4em;

div {
  height: calc(#{$a} + 7px);
  background: #e53b2c;
}

7
කිසියම් හේතුවක් නිසා, මෙම පිළිතුර වඩාත් පැහැදිලි ය. මම scss වැඩ ගොඩක් කරන්නේ නැහැ, එබැවින් මෙය "සරල" සහ මට තේරුම් ගැනීමට පහසු විය.
2b77bee6-5445-4c77-b1eb-4df3e5

5
මෙය අනිවාර්යයෙන්ම පිළිගත් පිළිතුරට වඩා පැහැදිලි පිළිතුරකි. 'අන්තර් මැදිහත්වීම:' මට කිසිවක් තේරුනේ නැත.
ජැක් මැතිව්

4
Ac ජැක්ස්මාතිය sass-lang.com/documentation/interpolation - එය ඔබට කිසිවක් අදහස් නොකරන්නේ නම් සහ එය බොහෝ ඡන්ද වලින් ලැබෙන පිළිතුරක් නම්, බොහෝ විට ඔබ තේරුම් ගත යුත්තේ කුමක් ගැනද යන්නයි. මගේ ශත දෙක පමණි ...
ඒ. චීසා

1
@ඒ. චීසා විශ්වාසයි, එය අන්තර් මැදිහත්වීම අර්ථ දක්වයි. කෙසේ වෙතත් සාස් හි අන්තර් මැදිහත්වීම ගැන OP සහ මම දැන සිටියේ නැත, එසේ නොවුවහොත් මෙම ප්‍රශ්නය කිසි විටෙකත් අසනු නොලැබේ. මේ අනුව අර්ථ දැක්වීමක් නොමැතිව කිසිවෙකු මීට පෙර අසා නැති වචනයක් ප්‍රකාශ කිරීම හෝ සියලු මවාපෑමක් සියල්ල ඇතුළත් පිළිතුරක් නිර්මාණය කිරීමට උපකාරී නොවේ. එම සබැඳිය නිසැකවම ප්‍රයෝජනවත් වේ. පිළිගත් පිළිතුරෙන් එය දැකීම සතුටක් වනු ඇත.
ජැක්

9

එය කෙලින්ම සම්බන්ධ නොවුනත්. නමුත් ඔබ නිසි ලෙස අවකාශය නොතැබුවහොත් CALC කේතය ක්‍රියා නොකරන බව මට පෙනී ගියේය.

එබැවින් මෙය මට වැඩ කළේ නැත calc(#{$a}+7px)

නමුත් මෙය සාර්ථක විය calc(#{$a} + 7px)

මෙය වටහා ගැනීමට මට යම් වේලාවක් ගත විය.


2

මම මෙය අත්හදා බැලුවෙමි. එය ලබා දී ඇති අනුපාතය අනුව සියලු මාධ්‍ය බිඳීම් ලක්ෂ්‍යය ස්වයංක්‍රීයව ගණනය කරනු ඇත (පාදක ප්‍රමාණය / අනුපාත-ප්‍රමාණය)


$base-size: 16;
$rate-size-xl: 24;

    // set default size for all cases;
    :root {
      --size: #{$base-size};
    }

    // if it's smaller then LG it will set size rate to 16/16;
    // example: if size set to 14px, it will be 14px * 16 / 16 = 14px
    @include media-breakpoint-down(lg) {
      :root {
        --size: #{$base-size};
      }
    }

    // if it is bigger then XL it will set size rate to 24/16;
    // example: if size set to 14px, it will be 14px * 24 / 16 = 21px
    @include media-breakpoint-up(xl) {
      :root {
        --size: #{$rate-size-xl};
      }
    }

@function size($px) {
   @return calc(#{$px} / $base-size * var(--size));
}

div {
  font-size: size(14px);
  width: size(150px);
}

1

මෙන්න SASS / SCSS සහ ගණිත සූත්‍ර ශෛලිය භාවිතා කරමින් ඉතා සරල විසඳුමක්:

/* frame circle */
.container {
    position: relative;
    border-radius: 50%;
    background-color: white;
    overflow: hidden;
    width: 400px;
    height: 400px; }

/* circle sectors */
.menu-frame-sector {
    position: absolute;
    width: 50%;
    height: 50%;
    z-index: 10000;
    transform-origin: 100% 100%;
  }

$sector_count: 8;
$sector_width: 360deg / $sector_count;

.sec0 {
    transform: rotate(0 * $sector_width) skew($sector_width);
    background-color: red; }
.sec1 {
    transform: rotate(1 * $sector_width) skew($sector_width);
    background-color: blue; }
.sec2 {
    transform: rotate(2 * $sector_width) skew($sector_width);
    background-color: red; }
.sec3 {
    transform: rotate(3 * $sector_width) skew($sector_width);
    background-color: blue; }
.sec4 {
    transform: rotate(4 * $sector_width) skew($sector_width);
    background-color: red; }
.sec5 {
    transform: rotate(5 * $sector_width) skew($sector_width);
    background-color: blue; }
.sec6 {
    transform: rotate(6 * $sector_width) skew($sector_width);
    background-color: red; }
.sec7 {
    transform: rotate(7 * $sector_width) skew($sector_width);
    background-color: blue; }

නිගමනය කිරීමට, තේරුම් ගැනීමට මම ඔබට තරයේ යෝජනා කරමි transform-origin, rotate()සහ skew():

https://tympanus.net/codrops/2013/08/09/building-a-circular-navigation-with-css-transforms/


-2

ඔබට ඔබේ වාචික භාවිතා කළ හැකිය #{your verbal}


3
මෙය අමුතු පිළිතුරක් සේ පෙනේ. මම හිතන්නේ ඔබ අදහස් කළ variableනමුත් OP යනු විචල්‍යයක් යනු කුමක්දැයි දන්නා නිසා (ඔවුන් $body_paddingඔවුන්ගේ කේතයේ සඳහන් කරයි) ඔබේ පිළිතුර එකතු කරන්නේ කුමක් ද?
මයික් පූල්

මට පිළිතුරක් ඇත
ගිරාජ්

-5

මේක උත්සාහ කරන්න:

@mixin heightBox($body_padding){
   height: calc(100% - $body_padding);
}

body{
   @include heightBox(100% - 25%);
   box-sizing: border-box
   padding:10px;
}

3
ඉහත පිළිගත් පිළිතුරට වඩා මෙය හොඳ වන්නේ කෙසේද? එය එකම දේ කරන බවක් නොපෙනේ ...?
ජූල්ස්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.