Các đề xuất typeahead.js của Twitter không được tạo kiểu (không có viền, nền trong suốt, v.v.)


182

Tôi đang sử dụng typeahead.js 0.9.3 của twitter và có vẻ như các đề xuất của tôi hoàn toàn không được tạo kiểu.

Tôi đang nhận được điều này:

lỗi đánh máy

Thay vì một cái gì đó như thế này: (lấy từ trang ví dụ )

lý tưởng loại

JavaScript cho phép đánh máy:

$('.search-typeahead').typeahead({
    name: 'videos',
    remote: {
        url: '/api/v1/internal/videos/typeahead?text=%QUERY'
    }
});

Phần tử đầu vào HTML:

<input type="text" value="" id="search_keywords" class="no-clear search-typeahead"/>

Ghi chú bổ sung:

Trang web tôi đang làm việc có jQuery 1.10.1 và không sử dụng twitter bootstrap. Có một loạt CSS mà tôi không viết và do đó tôi không quen với điều mà tôi sợ đang can thiệp, tuy nhiên có vẻ như plugin bổ sung các kiểu riêng của nó (không có tệp .css đi kèm) vì vậy về mặt lý thuyết không nên ghi đè lên mọi thứ ? Tôi bối rối tại sao các kiểu của tôi hoạt động, nhưng các kiểu được thêm bởi plugin thì không, dẫn đến một đề xuất có nền trong suốt, không có viền, v.v.

Câu trả lời:


212

Vì vậy, nhìn vào các tài liệu bây giờ tôi thấy:

Theo mặc định, menu thả xuống được tạo bởi typeahead.js sẽ trông xấu và bạn sẽ muốn tạo kiểu cho nó để đảm bảo nó phù hợp với chủ đề của trang web của bạn.

Do đó, giải pháp của tôi là sao chép kiểu dáng từ ví dụ tôi muốn sao chép:

.tt-query, /* UPDATE: newer versions use tt-input instead of tt-query */
.tt-hint {
    width: 396px;
    height: 30px;
    padding: 8px 12px;
    font-size: 24px;
    line-height: 30px;
    border: 2px solid #ccc;
    border-radius: 8px;
    outline: none;
}

.tt-query { /* UPDATE: newer versions use tt-input instead of tt-query */
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}

.tt-hint {
    color: #999;
}

.tt-menu { /* UPDATE: newer versions use tt-menu instead of tt-dropdown-menu */
    width: 422px;
    margin-top: 12px;
    padding: 8px 0;
    background-color: #fff;
    border: 1px solid #ccc;
    border: 1px solid rgba(0, 0, 0, 0.2);
    border-radius: 8px;
    box-shadow: 0 5px 10px rgba(0,0,0,.2);
}

.tt-suggestion {
    padding: 3px 20px;
    font-size: 18px;
    line-height: 24px;
}

.tt-suggestion.tt-is-under-cursor { /* UPDATE: newer versions use .tt-suggestion.tt-cursor */
    color: #fff;
    background-color: #0097cf;

}

.tt-suggestion p {
    margin: 0;
}

19
Vì một số lý do, chỉnh sửa được đề xuất của tôi đã bị từ chối, nhưng lưu ý rằng tt-is-under-cursorlớp dường như đã được đổi tên thành tt-cursor. Tài liệu ở đây .
Joe Freeman

6
Ngoài ra còn có một tt-inputthay vì tt-query(như cho 0.10.5)
Filip Spiridonov

7
Sẽ không tốt hơn nếu có các phiên bản cũ trong các bình luận?
worldsayshi

3
.tt-dropdown-menu hiện là .tt-menu
bkwdesign

1
Thêm cursor: pointer;vào .tt-is-under-cursorđể có một con trỏ thích hợp cho người dùng biết rằng anh ta cần nhấp.
Laurent W.

124

Vì vậy, các phong cách sau đây sẽ cung cấp cho bạn giao diện này. Nó dựa trên CSS mà tôi trích xuất từ ​​trang web ví dụ chính thức của typeahead.

nhập mô tả hình ảnh ở đây

CSS:

.tt-query {
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}

.tt-hint {
  color: #999
}

.tt-menu {    /* used to be tt-dropdown-menu in older versions */
  width: 422px;
  margin-top: 4px;
  padding: 4px 0;
  background-color: #fff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
  -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
     -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
          box-shadow: 0 5px 10px rgba(0,0,0,.2);
}

.tt-suggestion {
  padding: 3px 20px;
  line-height: 24px;
}

.tt-suggestion.tt-cursor,.tt-suggestion:hover {
  color: #fff;
  background-color: #0097cf;

}

.tt-suggestion p {
  margin: 0;
}

Điều này giả định đầu vào của bạn sẽ có form-controllớp. Ví dụ của tôi, nó như thế này:

<input class="typeahead form-control" type="text" placeholder="States of USA">

4
Làm việc cho tôi với một điều chỉnh. Xuất hiện .tt-dropdown-menulà bây giờ .tt-menu. Cảm ơn về câu trả lời.
groundh0g

33

https://github.com/bassjobsen/typeahead.js-bootstrap-css/blob/master/typeaheadjs.css

Những cái khác trông không tuyệt lắm, cái này trông giống Bootstrap nhất.


1
Hoạt động tuyệt vời với Bootstrap
Jose Cherian

Điều này hoạt động hoàn hảo mà không có thay đổi nào trong Rails 4.2 và bootstrap-sass (3.3.7) autoprefixer-rails (> = 5.2.1) sass (> = 3.3.4) Nó cũng thân thiện hơn với một số giải pháp khác. Thêm vào đó, nó có nghĩa là hộp đầu vào của bạn có thể có chiều rộng 100% vì vậy nên hoạt động với hầu hết các bố cục.
rmcsharry

Mặc dù nếu đầu vào của bạn rộng hơn 162 (chiều rộng tối thiểu được sử dụng ở đây) thì bạn cũng có thể muốn thêm chiều rộng: 100%; đến phần đầu tiên cho menu tt / tt-dropdown
rmcsharry

19

Kiểu chữ đã thay đổi một số tên lớp của họ và các ví dụ trên hiện không chính xác.

Ví dụ:

  • Thay vì .tt-suggestion.tt-is-under-cursor sử dụng.tt-suggestion:hover
  • Thay vì .tt-dropdown-menu, sử dụng.tt-menu

Nếu bạn muốn mượn kiểu từ trang ví dụ , bạn có thể xem biểu định kiểu của họ ở đây :

.typeahead,
.tt-query,
.tt-hint {
  width: 396px;
  height: 30px;
  padding: 8px 12px;
  font-size: 24px;
  line-height: 30px;
  border: 2px solid #ccc;
  -webkit-border-radius: 8px;
     -moz-border-radius: 8px;
          border-radius: 8px;
  outline: none;
}

.typeahead {
  background-color: #fff;
}

.typeahead:focus {
  border: 2px solid #0097cf;
}

.tt-query {
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}

.tt-hint {
  color: #999
}

.tt-menu {
  width: 422px;
  margin: 12px 0;
  padding: 8px 0;
  background-color: #fff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  -webkit-border-radius: 8px;
     -moz-border-radius: 8px;
          border-radius: 8px;
  -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
     -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
          box-shadow: 0 5px 10px rgba(0,0,0,.2);
}

.tt-suggestion {
  padding: 3px 20px;
  font-size: 18px;
  line-height: 24px;
}

.tt-suggestion:hover {
  cursor: pointer;
  color: #fff;
  background-color: #0097cf;
}

.tt-suggestion.tt-cursor {
  color: #fff;
  background-color: #0097cf;

}

.tt-suggestion p {
  margin: 0;
}

Đây là bản demo trong Stack Snippets


2
Có thể ngăn chặn kiểu chữ làm cho chiều rộng quá nhỏ?
Rune Jeppesen

13

Đây là mã làm việc cho tôi:

.twitter-typeahead .tt-query,
.twitter-typeahead .tt-hint {
    margin-bottom: 0;
}
.tt-hint {
    display: block;
    width: 100%;
    padding: 8px 12px;
    font-size: 14px;
    line-height: 1.428571429;
    color: #999;
    vertical-align: middle;
    background-color: #ffffff;
    border: 1px solid #cccccc;
    border-radius: 4px;
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
    -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
          transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
}
.tt-dropdown-menu {
    min-width: 160px;
    margin-top: 2px;
    padding: 5px 0;
    background-color: #ffffff;
    border: 1px solid #cccccc;
    border: 1px solid rgba(0, 0, 0, 0.15);
    border-radius: 4px;
    -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
          box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
    background-clip: padding-box;

}
.tt-suggestion {
    display: block;
    padding: 3px 20px;
}
.tt-suggestion.tt-is-under-cursor {
    color: #fff;
    background-color: #dfdfdf;
}
.tt-suggestion.tt-is-under-cursor a {
    color: #fff;
}
.tt-suggestion p {
    margin: 0;
}

1
Giải pháp này hoạt động bất kể chiều rộng của đầu vào. Cảm ơn!
Spaceuitdiver

Làm việc hoàn hảo với tôi với typeahead.js + BS3 + có thể truy cập được trên cùng một màn hình. Cảm ơn
Mike Castro Demaria

3

Vì tôi có ít môi trường hơn với BS3 nên tôi đã lấy mã css Zugwalt (đặt nó trong một hệ thống phân cấp dễ đọc hơn) và điền vào nó với kiểu dáng từ menu thả xuống của bs3. Nó chỉ đơn giản là theo các biến (tùy chỉnh) của bạn.

    .twitter-typeahead {
      display: block;
      width: 100%; //BS 3 needs this to inherit this for children

      .tt-query,
      .tt-hint {
        margin-bottom: 0;
      }

      .tt-dropdown-menu {
        z-index: @zindex-dropdown;
        min-width: 326px;
        padding: 5px 0;
        margin: 2px 0 0; // override default ul
        font-size: @font-size-base;
        text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
        background-color: @dropdown-bg;
        border: 1px solid @dropdown-fallback-border; // IE8 fallback
        border: 1px solid @dropdown-border;
        border-radius: @border-radius-base;
        .box-shadow(0 6px 12px rgba(0, 0, 0, .175));
        background-clip: padding-box;

        .tt-suggestions {

          .tt-suggestion {
            padding: 3px 12px;
            font-weight: normal;
            line-height: @line-height-base;
            color: @dropdown-link-color;
            white-space: nowrap; // prevent links from randomly breaking onto new lines
          }

          .tt-suggestion.tt-cursor {
            color: @dropdown-link-hover-color;
            background-color: @dropdown-link-hover-bg;
          }

          .tt-suggestion p {
            margin: 0;
          }
        }
      }
    }

1

Đây là một scssphiên bản dựa trên các biến / khai báo bootstrap càng nhiều càng tốt. Thật không may, bạn không thể mở rộng các bộ chọn lồng nhau trong sass, nếu không nó sẽ nhỏ hơn:

@mixin typeahead-active() {
  // mimics  @extend .dropdown-menu > .active > a;
  color: $dropdown-link-active-color;
  text-decoration: none;
  outline: 0;
  background-color: $dropdown-link-active-bg;
}

//https://github.com/corejavascript/typeahead.js/blob/master/doc/jquery_typeahead.md#class-names
span.twitter-typeahead {

  // this is the suggested matches dropdown
  .tt-menu {
    @extend .dropdown-menu;
  }

  .tt-hint {
    color: #999
  }

  // Added to suggestion elements.
  .tt-suggestion {

    // mimic .dropdown-menu > li > a
    padding: 3px 20px;
    line-height: $line-height-base;

    // Added to suggestion element when menu cursor moves to said suggestion.
    &.tt-cursor {
      @include typeahead-active;
    }

    // Hover/focus on suggestion
    &:hover,
    &:focus {
      @include typeahead-active;
    }

    p {
      margin: 0;
    }
  }

  .input-group & {
    display: block !important;
    .tt-dropdown-menu {
      top: 32px !important;
    }
  }
  .input-group.input-group-lg & {
    .tt-dropdown-menu {
      top: 44px !important;
    }
  }
  .input-group.input-group-sm & {
    .tt-dropdown-menu {
      top: 28px !important;
    }
  }
}

1

Nếu bạn đang sử dụng Bootstrap 4, thì đủ để làm điều này:

span.twitter-typeahead
  width: 100%

.tt-input
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075)

.tt-menu
  @extend .list-group
  box-shadow: 0 5px 10px rgba(0,0,0,.2)
  width: 100%

.tt-suggestion
  @extend .list-group-item

.tt-selectable
  @extend .list-group-item-action

0

Trong trường hợp cụ thể của tôi định vị tuyệt đối giải quyết nó. Định vị tương đối đã đẩy các yếu tố bootstrap khác xuống khi danh sách gợi ý (menu tt) được mở.

.tt-menu { 
    z-index: 2147483647;
    position: absolute;    
}

Bạn có thể thêm câu này vào câu trả lời trên https://stackoverflow.com/a/26934329/1225421

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.