色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

選中子復選框時改變父標簽樣式

錢諍諍2年前8瀏覽0評論

當復選框被選中時,我想將“添加邊框”添加到我的復選框容器中。

目前,我有這個:

<label
  htmlFor="choose-me"
  className=
    'flex w-fit items-center justify-evely p-3 border-2 border-grey-4 text-grey-8 
     peer-checked:bg-light-indigo peer-checked:text-medium-indigo peer-checked:border-medium-indigo'>
  <input type="checkbox" id="choose-me" className="peer mr-3 " />
  Check me
</label>

我想要如下的東西:

checkbox - checked and unchecked

但是,當我在標簽中輸入內容時,我無法更改標簽樣式。

一個只有CSS的解決方案是使用:has偽選擇器(注意:Firefox還不支持)。只有當標簽包含已被選中的復選框時,才會應用這些類。

index.css

@tailwind base;
@tailwind components;
@tailwind utilities;

@layer components {
  .checkbox-label:has(input:checked) {
    @apply border-blue-800 bg-blue-400 text-blue-800;
  }
}

你的JSX:(去掉不用的類)

<label className="checkbox-label justify-evely border-grey-4 text-grey-8 flex w-fit items-center gap-x-2 border-2 p-3">
  <input type="checkbox" id="choose-me" />
  Check me
</label>

你可以在這里測試:https://play.tailwindcss.com/zidP4zm2Pq

支持的瀏覽器列表:has:https://developer . Mozilla . org/en-US/docs/Web/CSS/:has # browser _ compatibility

首先,重要的是要記住,tailwind中的對等功能并不針對父母(這正是你目前所擁有的)。您只能將相鄰的元素作為目標。

此外,由于CSS :peer combinator的工作方式,您只能針對以前的組件,這意味著當復選框被選中時,復選框必須出現在您想要影響其狀態的對等體之前。

<label
  htmlFor="choose-me"
  class=
    'flex w-fit items-center justify-evely p-3 text-grey-8 relative'
>
  <input type="checkbox" id="choose-me" class="peer mr-3 relative z-10" />
  <div class="absolute inset-0 border-2 border-grey-4 peer-checked:bg-indigo-200 peer-checked:text-indigo-800 peer-checked:border-indigo-800 peer-checked:block z-0"></div>
  <span class="relative z-10">Check me</span>
</label>

根據@Vikesir的評論,這里有一個使用純tailwind/css的示例,假設您不想在react組件中處理狀態(盡管這也是我的第一個想法,是個好主意)。

你會注意到我在一個空的div中捏造并使用它來模擬背景和邊框的變化。我還將標簽文本包裝在一個span中,以確保我可以更改它的z-index,這樣復選框和文本都可以在處理狀態更改的div上方看到。

編輯:

如果您不希望代碼中出現空的div,下面是一個版本,它使用了一個基于保存標簽文本的span構建的偽元素:

<label
  htmlFor="choose-me"
  class=
    'flex w-fit items-center justify-evely text-grey-8 relative'
>
  <input type="checkbox" id="choose-me" class="peer mr-3 absolute left-2.5 z-20" />
  <span class="relative z-10 inset-0 py-3 pr-3 pl-8 before:-z-10 before:content-[''] before:absolute before:inset-0 before:h-full before:w-full before:border-2 before:border-grey-4 peer-checked:before:bg-indigo-200 peer-checked:before:text-indigo-800 peer-checked:before:border-indigo-800 peer-checked:before:block">Check me</span>
</label>

使用useState處理活動狀態:

const [isactive,setActive] = useState(false)

在JSX:

<label
  onClick={()=>setActive(isactive?false:true)}
  className= {`${isactive?'active-style':'normal-style'} extra-style-classes`}
>
  <input type="checkbox" id="choose-me" className= {`${isactive?'active-style':'normal-style'} extra-style-classes`} />
  Check me
</label>

感謝貢獻一個堆棧溢出的答案!

請務必回答問題。提供詳細信息并分享您的研究!但是要避免…

尋求幫助、澄清或回應其他答案。根據意見發表聲明;用參考資料或個人經歷來支持他們。要了解更多,請查看我們關于撰寫精彩答案的提示。