首頁  >  問答  >  主體

新的標題:修改複選框的選取標記顏色

我已經實現了一個功能來更改複選框的背景顏色,但它使刻度線變成黑色,這是我不想要的,我希望標記仍然是白色,我該如何實現這一點?

HTML:-

<div v-for="category in categories" :key="category.id">
     <div>
        <input type="checkbox" class="categoryInput" @change="input()" 
        :true-value="category.id" false-value="0" v-model="currentCategory"/>
        <label class="form-label">{{category.name}}</label>
      </div>
</div>

這是函數:-

input(){
        var color = JSON.parse(localStorage.getItem('coloring') || '[]').CTAButtons
        let collection = document.getElementsByClassName("categoryInput");
        for (let i = 0; i < collection.length; i++) {
        collection[i].style.accentColor = color
        }
    }

這是輸出:- 背景變更成功,但刻度線改為黑色

P粉063039990P粉063039990305 天前412

全部回覆(2)我來回復

  • P粉310931198

    P粉3109311982023-12-19 18:20:08

    使用 vue 的優點是建立自訂元件。所以你可以嘗試如下所示的方法。

    工作StackBlitz

    #您可能需要根據您的特定要求調整程式碼。

    <template>
      <div v-for="category in categories" :key="category.id">
        <div>
          <label class="form-label categoryInput">
            <span class="material-icons icon" v-if="isChecked(category.id)"
              >check_box</span
            >
            <span
              class="material-icons-outlined icon"
              v-if="!isChecked(category.id)"
              >check_box_outline_blank</span
            >
            <input
              type="checkbox"
              class=""
              @change="input()"
              :value="category.id"
              v-model="currentCategory"
            />
            {{ category.name }}</label
          >
        </div>
      </div>
    </template>
    
    <script>
    export default {
      name: 'Checkbox',
      data: function () {
        return {
          currentCategory: [],
          categories: [
            { id: 1, name: 'alpha' },
            { id: 2, name: 'beta' },
          ],
        };
      },
      props: {},
      methods: {
        isChecked(categoryId) {
          return this.currentCategory.indexOf(categoryId) !== -1;
        },
        input() {
          var color = '#3bb0a8';
          let collection = document.getElementsByClassName('categoryInput');
          for (let i = 0; i < collection.length; i++) {
            const icons = collection[i].querySelectorAll('.icon');
            icons.forEach((iconEle) => {
              iconEle.style.color = color;
            });
          }
        },
      },
    };
    </script>
    
    <style scoped>
    label.categoryInput {
      display: flex;
      justify-content: center;
      align-items: center;
    }
    label.categoryInput input[type='checkbox'] {
      width: 0;
      height: 0;
    }
    </style>

    重要

    將以下內容新增至您的index.html標頭

    <link href="https://fonts.googleapis.com/css?family=Material+Icons|Material+Icons+Outlined|Material+Icons+Two+Tone|Material+Icons+Round|Material+Icons+Sharp" rel="stylesheet">

    回覆
    0
  • P粉218361972

    P粉2183619722023-12-19 12:43:00

    預設 HTML 複選框的刻度線顏色由瀏覽器決定,無法變更。不過,您可以建立自己的自訂複選框並根據需要設定樣式。

    HTML

    <label class="container">
        <input type="checkbox" checked="checked" />
        <span class="checkmark"></span>
    </label>
    

    CSS

    .container {
      display: block;
      position: relative;
      padding-left: 35px;
      margin-bottom: 12px;
      cursor: pointer;
      font-size: 22px;
      -webkit-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
      user-select: none;
    }
    
    /* Hide the browser's default checkbox */
    .container input {
      position: absolute;
      opacity: 0;
      cursor: pointer;
      height: 0;
      width: 0;
    }
    
    /* Create a custom checkbox */
    .checkmark {
      position: absolute;
      top: 0;
      left: 0;
      height: 25px;
      width: 25px;
      background-color: #eee;
    }
    
    /* On mouse-over, add a grey background color */
    .container:hover input ~ .checkmark {
      background-color: #ccc;
    }
    
    /* When the checkbox is checked, add a teal background */
    .container input:checked ~ .checkmark {
      background-color: #3bb0a8;
    }
    
    /* Create the checkmark/indicator (hidden when not checked) */
    .checkmark:after {
      content: '';
      position: absolute;
      display: none;
    }
    
    /* Show the checkmark when checked */
    .container input:checked ~ .checkmark:after {
      display: block;
    }
    
    /* Style the checkmark/indicator */
    .container .checkmark:after {
      left: 9px;
      top: 5px;
      width: 5px;
      height: 10px;
      border: solid white;
      border-width: 0 3px 3px 0;
      -webkit-transform: rotate(45deg);
      -ms-transform: rotate(45deg);
      transform: rotate(45deg);
    }
    

    JSFiddle

    #

    回覆
    0
  • 取消回覆