[css] CSS에서 if / else 조건을 사용할 수 있습니까?

CSS에서 조건을 사용하고 싶습니다.

아이디어는 올바른 스타일 시트를 생성하기 위해 사이트가 실행될 때 대체 할 변수가 있다는 것입니다.

이 변수에 따라 스타일 시트가 변경되도록하고 싶습니다!

다음과 같이 보입니다.

[if {var} eq 2 ]
    background-position : 150px 8px;
[else]
    background-position : 4px 8px; 

할 수 있습니까? 어떻게하나요?



답변

전통적인 의미는 아니지만 HTML에 액세스 할 수있는 경우이를 위해 클래스를 사용할 수 있습니다. 이걸 고려하세요:

<p class="normal">Text</p>

<p class="active">Text</p>

CSS 파일에서 :

p.normal {
  background-position : 150px 8px;
}
p.active {
  background-position : 4px 8px;
}

이것이 CSS 방식입니다.


그런 다음 Sass 와 같은 CSS 전처리 기가 있습니다. 당신이 사용할 수있는 조건문 이이 같은 which’d 살펴 :

$type: monster;
p {
  @if $type == ocean {
    color: blue;
  } @else if $type == matador {
    color: red;
  } @else if $type == monster {
    color: green;
  } @else {
    color: black;
  }
}

단점은 스타일 시트를 사전 처리해야한다는 점과 조건이 런타임이 아닌 컴파일 시간에 평가된다는 것입니다.


적절한 CSS의 새로운 기능은 사용자 정의 속성 (일명 CSS 변수)입니다. 런타임에 평가됩니다 (지원하는 브라우저에서).

그들과 함께 당신은 라인을 따라 뭔가를 할 수 있습니다.

:root {
  --main-bg-color: brown;
}

.one {
  background-color: var(--main-bg-color);
}

.two {
  background-color: black;
}

마지막으로 선호하는 서버 측 언어로 스타일 시트를 사전 처리 할 수 ​​있습니다. PHP를 사용하는 style.css.php경우 다음과 같은 파일을 제공합니다 .

p {
  background-position: <?php echo (@$_GET['foo'] == 'bar')? "150" : "4"; ?>px 8px;
}

이 경우 이러한 스타일 시트를 캐싱하기가 어렵 기 때문에 성능에 영향을 미칩니다.


답변

아래는 여전히 유효한 내 오래된 답변이지만 오늘은 더 의견이 많은 접근 방식이 있습니다.

CSS가 너무 짜증나는 이유 중 하나는 조건부 구문이 없기 때문입니다. CSS는 그 자체로 현대 웹 스택에서 완전히 사용할 수 없습니다. 잠시 동안 SASS를 사용하면 내가 왜 그렇게 말하는지 알게 될 것입니다. SASS에는 조건부 구문이 있으며 기본 CSS에 비해 많은 다른 이점도 있습니다.


이전 답변 (아직 유효 함) :

일반적으로 CSS에서는 할 수 없습니다!

다음과 같은 브라우저 조건이 있습니다.

/*[if IE]*/
body {height:100%;}
/*[endif]*/

그러나 아무도 Javascript를 사용하여 DOM을 변경하거나 클래스를 동적으로 할당하거나 각 프로그래밍 언어로 스타일을 연결하는 것을 막을 수 없습니다.

나는 때때로 CSS 클래스를 뷰에 문자열로 보내고 그 (php)와 같은 코드에 에코합니다.

<div id="myid" class="<?php echo $this->cssClass; ?>">content</div>


답변

calc()와 함께 사용 var()하여 일종의 모방 조건부를 사용할 수 있습니다 .

:root {
--var-eq-two: 0;
}

.var-eq-two {
    --var-eq-two: 1;
}

.block {
    background-position: calc(
        150px * var(--var-eq-two) +
        4px * (1 - var(--var-eq-two))
    ) 8px;
}

개념


답변

두 개의 개별 스타일 시트를 만들고 비교 결과에 따라 그중 하나를 포함 할 수 있습니다.

하나에 둘 수 있습니다

background-position : 150px 8px;

다른 하나

background-position : 4px 8px;

CSS에서 수행 할 수있는 유일한 검사는 브라우저 인식이라고 생각합니다.

조건부 CSS


답변

CSS에서 일종의 조건부이기도 한 CSS 의사 클래스를 아무도 언급하지 않았다는 사실에 놀랐습니다. 이것으로 자바 스크립트 한 줄없이 꽤 진보 된 일을 할 수 있습니다.

일부 의사 클래스 :

  • : active-요소가 클릭되고 있습니까?
  • : checked-라디오 / 체크 박스 / 옵션이 선택되어 있습니까? (이렇게하면 체크 박스를 사용하여 조건부 스타일을 지정할 수 있습니다!)
  • : empty-요소가 비어 있습니까?
  • : fullscreen-문서가 전체 화면 모드입니까?
  • : focus-요소에 키보드 포커스가 있습니까?
  • : focus-within-요소 또는 하위 요소에 키보드 포커스가 있습니까?
  • : has ([selector])-요소에 [selector]와 일치하는 자식이 포함되어 있습니까? (슬프게도 주요 브라우저에서는 지원되지 않습니다.)
  • : hover-마우스가이 요소를 가리 킵니까?
  • : in-range / : out-of-range-입력 값이 최소 및 최대 한계 사이 / 밖입니까?
  • : invalid / : valid-양식 요소에 유효하지 않은 / 유효한 내용이 있습니까?
  • : link-방문하지 않은 링크입니까?
  • : not ()-선택기를 반전합니다.
  • : target-이 요소가 URL 조각의 대상입니까?
  • : visited-사용자가 이전에이 링크를 방문한 적이 있습니까?

예:

div { color: white; background: red }
input:checked + div { background: green }
<input type=checkbox>Click me!
<div>Red or green?</div>


답변

css 파일을 PHP로 구문 분석하도록 서버를 설정 한 다음 간단한 PHP 문으로 변수 변수를 정의합니다.

물론 이것은 당신이 PHP를 사용하고 있다고 가정합니다 …


답변

대신에 사용할 수 없습니다.

.Container *:not(a)
{
    color: #fff;
}