核取方塊

核取方塊配置

核取方塊配置相當簡單

<!-- checkbox element -->
<label class="checkbox">
  <!-- checkbox input -->
  <input type="checkbox" />
  <!-- checkbox icon -->
  <i class="icon-checkbox"></i>
</label>

核取方塊群組/清單

若要建立核取方塊群組/清單,我們需要使用 清單檢視 並加入一些額外內容

<div class="list">
  <ul>
    <!-- Single checkbox item -->
    <li>
      <label class="item-checkbox item-content">
        <!-- Checkbox input -->
        <input type="checkbox" />
        <!-- Checkbox icon -->
        <i class="icon icon-checkbox"></i>
        <div class="item-inner">
          <!-- Checkbox Title -->
          <div class="item-title">Books</div>
        </div>
      </label>
    </li>
    <!-- Another checkbox item -->
    <li>
      <label class="item-checkbox item-content">
        <!-- Checked by default -->
        <input type="checkbox" checked />
        <i class="icon icon-checkbox"></i>
        <div class="item-inner">
          <div class="item-title">Music</div>
        </div>
      </label>
    </li>
    ...
  </ul>
</div>
  • item-content 必須是具有額外 item-checkbox 類別的 <label> 元素
  • 核取方塊輸入 (<input type="checkbox" />) 必須是 item-content 的第一個子項
  • 核取方塊圖示必須在核取方塊輸入之後

不確定狀態

Framework7 提供核取方塊不確定狀態的視覺支援。

在 HTML 中,無法使用屬性設定此狀態,只能透過 JavaScript 設定

<input type="checkbox" id="my-checkbox" />
var checkboxEl = document.querySelector('#my-checkbox');
checkboxEl.indeterminate = true;

或使用 Dom7

var $checkboxEl = $('#my-checkbox');
$checkboxEl.prop('indeterminate', true);

但是,如果你將其與 路由器元件 一起使用,它將自動偵測此屬性並將其設定為元素屬性,因此可以在範本中使用

<input type="checkbox" {{#if something}}indeterminate{{/if}} id="my-checkbox" />

核取方塊圖示位置

預設情況下,核取方塊清單項目圖示顯示在清單項目的開頭。

而且可以覆寫此行為,以指定核取方塊清單項目圖示的位置 - 在清單項目的開頭或結尾。

為此,我們需要在 item-checkbox 中加入額外的 item-checkbox-icon-startitem-checkbox-icon-end 類別

<!-- Additional "item-checkbox-icon-end" class will force checkbox icon to appear in the beginning of the list item for all themes -->
<li>
  <!-- Additional "item-checkbox-icon-end" class -->
  <label class="item-checkbox item-checkbox-icon-end item-content">
    <!-- Checkbox input -->
    <input type="checkbox" />
    <!-- Checkbox icon -->
    <i class="icon icon-checkbox"></i>
    <div class="item-inner">
      <!-- Checkbox Title -->
      <div class="item-title">Books</div>
    </div>
  </label>
</li>

CSS 變數

以下是相關 CSS 變數 (CSS 自訂屬性) 清單。

請注意,註解變數預設未指定,而其值是它們在此情況下的後備值。

:root {
  /* --f7-checkbox-active-color: var(--f7-theme-color); */
  --f7-checkbox-icon-color: #fff;
  --f7-checkbox-extra-margin: 0px;
}
:root .dark,
:root.dark {
  --f7-checkbox-inactive-color: rgba(255, 255, 255, 0.3);
  --f7-checkbox-icon-color: #000;
}
.ios {
  --f7-checkbox-size: 22px;
  --f7-checkbox-border-radius: 50%;
  --f7-checkbox-border-width: 1px;
  --f7-checkbox-inactive-color: #c7c7cc;
}
.md {
  --f7-checkbox-size: 18px;
  --f7-checkbox-border-radius: 2px;
  --f7-checkbox-border-width: 2px;
  --f7-checkbox-inactive-color: #6d6d6d;
}

範例

checkbox.html
<template>
  <div class="page">
    <div class="navbar">
      <div class="navbar-bg"></div>
      <div class="navbar-inner sliding">
        <div class="title">Checkbox</div>
      </div>
    </div>
    <div class="page-content">
      <div class="block-title">Inline</div>
      <div class="block block-strong-ios block-outline-ios">
        <p>Lorem <label class="checkbox"><input type="checkbox" /><i class="icon-checkbox"></i></label> ipsum dolor sit
          amet, consectetur adipisicing elit. Alias beatae illo nihil aut eius commodi sint eveniet aliquid eligendi
          <label class="checkbox"><input type="checkbox" /><i class="icon-checkbox"></i></label> ad delectus impedit
          tempore nemo, enim vel praesentium consequatur nulla mollitia!
        </p>
      </div>
      <div class="block-title">Checkbox Group</div>
      <div class="list list-strong-ios list-outline-ios list-dividers-ios">
        <ul>
          <li>
            <label class="item-checkbox item-checkbox-icon-start item-content">
              <input type="checkbox" name="demo-checkbox" value="Books" checked />
              <i class="icon icon-checkbox"></i>
              <div class="item-inner">
                <div class="item-title">Books</div>
              </div>
            </label>
          </li>
          <li>
            <label class="item-checkbox item-checkbox-icon-start item-content">
              <input type="checkbox" name="demo-checkbox" value="Movies" />
              <i class="icon icon-checkbox"></i>
              <div class="item-inner">
                <div class="item-title">Movies</div>
              </div>
            </label>
          </li>
          <li>
            <label class="item-checkbox item-checkbox-icon-start item-content">
              <input type="checkbox" name="demo-checkbox" value="Food" />
              <i class="icon icon-checkbox"></i>
              <div class="item-inner">
                <div class="item-title">Food</div>
              </div>
            </label>
          </li>
          <li>
            <label class="item-checkbox item-checkbox-icon-start item-content">
              <input type="checkbox" name="demo-checkbox" value="Drinks" />
              <i class="icon icon-checkbox"></i>
              <div class="item-inner">
                <div class="item-title">Drinks</div>
              </div>
            </label>
          </li>
        </ul>
      </div>

      <div class="list list-strong-ios list-outline-ios list-dividers-ios">
        <ul>
          <li>
            <label class="item-checkbox item-checkbox-icon-end item-content">
              <input type="checkbox" name="demo-checkbox" value="Books" checked />
              <i class="icon icon-checkbox"></i>
              <div class="item-inner">
                <div class="item-title">Books</div>
              </div>
            </label>
          </li>
          <li>
            <label class="item-checkbox item-checkbox-icon-end item-content">
              <input type="checkbox" name="demo-checkbox" value="Movies" />
              <i class="icon icon-checkbox"></i>
              <div class="item-inner">
                <div class="item-title">Movies</div>
              </div>
            </label>
          </li>
          <li>
            <label class="item-checkbox item-checkbox-icon-end item-content">
              <input type="checkbox" name="demo-checkbox" value="Food" />
              <i class="icon icon-checkbox"></i>
              <div class="item-inner">
                <div class="item-title">Food</div>
              </div>
            </label>
          </li>
          <li>
            <label class="item-checkbox item-checkbox-icon-end item-content">
              <input type="checkbox" name="demo-checkbox" value="Drinks" />
              <i class="icon icon-checkbox"></i>
              <div class="item-inner">
                <div class="item-title">Drinks</div>
              </div>
            </label>
          </li>
        </ul>
      </div>

      <div class="block-title">Indeterminate State</div>
      <div class="list list-strong-ios list-outline-ios list-dividers-ios">
        <ul>
          <li>
            <label class="item-checkbox item-checkbox-icon-start item-content">
              <input type="checkbox" name="demo-checkbox" checked=${movies.length===2}
                indeterminate=${movies.length===1} @change=${onMoviesChange} />
              <i class="icon icon-checkbox"></i>
              <div class="item-inner">
                <div class="item-title">Movies</div>
              </div>
            </label>
            <ul>
              <li>
                <label class="item-checkbox item-checkbox-icon-start item-content">
                  <input type="checkbox" name="demo-checkbox" value="Movie 1" checked=${movies.indexOf('Movie 1')>= 0}
                  @change=${onMovieChange}
                  />
                  <i class="icon icon-checkbox"></i>
                  <div class="item-inner">
                    <div class="item-title">Movie 1</div>
                  </div>
                </label>
              </li>
              <li>
                <label class="item-checkbox item-checkbox-icon-start item-content">
                  <input type="checkbox" name="demo-checkbox" value="Movie 2" checked=${movies.indexOf('Movie 2')>= 0}
                  @change=${onMovieChange}
                  />
                  <i class="icon icon-checkbox"></i>
                  <div class="item-inner">
                    <div class="item-title">Movie 2</div>
                  </div>
                </label>
              </li>
            </ul>
          </li>
        </ul>
      </div>

      <div class="block-title">With Media Lists</div>
      <div class="list list-strong-ios list-outline-ios list-dividers-ios media-list">
        <ul>
          <li>
            <label class="item-checkbox item-checkbox-icon-start item-content">
              <input type="checkbox" name="demo-media-checkbox" value="1" />
              <i class="icon icon-checkbox"></i>
              <div class="item-inner">
                <div class="item-title-row">
                  <div class="item-title">Facebook</div>
                  <div class="item-after">17:14</div>
                </div>
                <div class="item-subtitle">New messages from John Doe</div>
                <div class="item-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut
                  turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit
                  amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In
                  vel dui laoreet, commodo augue id, pulvinar lacus.</div>
              </div>
            </label>
          </li>
          <li>
            <label class="item-checkbox item-checkbox-icon-start item-content">
              <input type="checkbox" name="demo-media-checkbox" value="2" />
              <i class="icon icon-checkbox"></i>
              <div class="item-inner">
                <div class="item-title-row">
                  <div class="item-title">John Doe (via Twitter)</div>
                  <div class="item-after">17:11</div>
                </div>
                <div class="item-subtitle">John Doe (@_johndoe) mentioned you on Twitter!</div>
                <div class="item-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut
                  turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit
                  amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In
                  vel dui laoreet, commodo augue id, pulvinar lacus.</div>
              </div>
            </label>
          </li>
          <li>
            <label class="item-checkbox item-checkbox-icon-start item-content">
              <input type="checkbox" name="demo-media-checkbox" value="3" />
              <i class="icon icon-checkbox"></i>
              <div class="item-inner">
                <div class="item-title-row">
                  <div class="item-title">Facebook</div>
                  <div class="item-after">16:48</div>
                </div>
                <div class="item-subtitle">New messages from John Doe</div>
                <div class="item-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut
                  turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit
                  amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In
                  vel dui laoreet, commodo augue id, pulvinar lacus.</div>
              </div>
            </label>
          </li>
          <li>
            <label class="item-checkbox item-checkbox-icon-start item-content">
              <input type="checkbox" name="demo-media-checkbox" value="4" />
              <i class="icon icon-checkbox"></i>
              <div class="item-inner">
                <div class="item-title-row">
                  <div class="item-title">John Doe (via Twitter)</div>
                  <div class="item-after">15:32</div>
                </div>
                <div class="item-subtitle">John Doe (@_johndoe) mentioned you on Twitter!</div>
                <div class="item-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut
                  turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit
                  amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In
                  vel dui laoreet, commodo augue id, pulvinar lacus.</div>
              </div>
            </label>
          </li>
        </ul>
      </div>
    </div>
  </div>
</template>
<script>
  export default (props, { $update }) => {
    let movies = ['Movie 1'];

    const onMovieChange = (e) => {
      var value = e.target.value;
      if (e.target.checked) {
        movies.push(value);
      } else {
        movies.splice(movies.indexOf(value), 1);
      }
      $update();
    }
    const onMoviesChange = (e) => {
      if (movies.length === 1 || movies.length === 0) {
        movies = ['Movie 1', 'Movie 2'];
      } else if (movies.length === 2) {
        movies = [];
      }
      $update();
    }

    return $render;
  };
</script>