Twitter의 typeahead.js 제안은 스타일이 지정되지 않았습니다 (테두리, 투명 배경 등 없음).


182

트위터의 typeahead.js 0.9.3을 사용 하고 있으며 내 제안이 전혀 스타일이없는 것 같습니다.

나는 이것을 얻는다 :

사전 버그

이와 같은 대신 : ( 예제 페이지 에서 가져온 )

타이프 헤드 이상

JavaScript를 사용하는 자동 완성 기능 :

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

HTML 입력 요소 :

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

추가 사항 :

내가 작업중 인 사이트에는 jQuery 1.10.1이 있으며 트위터 부트 스트랩을 사용하지 않습니다. 내가 작성하지 않았고 방해하는 것에 익숙하지 않은 CSS가 많이 있지만 플러그인은 자체 스타일을 추가하는 것 같습니다 (첨부 된 .css 파일은 없음) ? 내 스타일이 작동하는 이유가 혼란 스럽지만 플러그인으로 추가 된 스타일이 작동하지 않아 투명한 배경, 테두리 없음 등의 제안이 발생합니다.

답변:


212

이제 내가 볼 수 있는 문서를 살펴보십시오.

기본적으로 typeahead.js가 만든 드롭 다운 메뉴는보기에 좋지 않으며 웹 페이지 테마에 맞게 스타일을 지정해야합니다.

따라서 내 솔루션은 복제하려는 예제에서 스타일을 복사하는 것이 었습니다.

.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
어떤 이유로 든 제안 된 편집이 거부되었지만 tt-is-under-cursor클래스 이름이로 변경되었습니다 tt-cursor. 여기에 설명서가 있습니다 .
Joe Freeman

6
또한이 tt-input대신 tt-query(0.10.5 만)
필립 Spiridonov

7
주석에 이전 버전을 사용하는 것이 낫지 않습니까?
worldsayshi

3
.tt-

1
사용자에게 클릭해야한다는 것을 알려주는 적절한 커서를 추가 cursor: pointer;하려면 .tt-is-under-cursor에 추가 하십시오.
Laurent W.

124

따라서 다음 스타일로이 모양과 느낌을 얻을 수 있습니다. 공식 Typeahead 예제 웹 사이트에서 추출한 CSS를 기반으로합니다.

여기에 이미지 설명을 입력하십시오

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;
}

이것은 입력에 form-control클래스 가 있다고 가정합니다 . 내 예에서는 다음과 같습니다.

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

4
한 번의 조정으로 나를 위해 일했습니다. 표시는 .tt-dropdown-menu지금이다 .tt-menu. 대답 해줘서 고마워요.
groundh0g

33

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

다른 것들은 좋아 보이지 않았습니다. 이것은 부트 스트랩과 가장 비슷합니다.


1
Bootstrap과 함께 작동
Jose Cherian

이것은 Rails 4.2와 부트 스트랩-사스 (3.3.7) 자동 접두사 레일 (> = 5.2.1) sass (> = 3.3.4)의 변경없이 완벽하게 작동했습니다. 또한 입력 상자의 너비가 100 %가 될 수 있으므로 대부분의 레이아웃에서 작동해야합니다.
rmcsharry

입력이 162보다 넓 으면 (여기에 사용 된 최소 너비) 너비를 추가 할 수도 있습니다. 100 %; tt-menu / tt-dropdown의 첫 번째 섹션으로
rmcsharry

19

Typeahead가 클래스 이름 중 일부를 변경했으며 위의 예가 잘못되었습니다.

예를 들어 :

  • 사용 하는 대신.tt-suggestion.tt-is-under-cursor .tt-suggestion:hover
  • 대신 .tt-dropdown-menu, 사용.tt-menu

예제 페이지 에서 스타일을 빌리려면 여기 에서 스타일 시트를 볼 수 있습니다 .

.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;
}

스택 스 니펫의 데모는 다음과 같습니다.


2
타자가 너비를 너무 작게 만드는 것을 방지 할 수 있습니까?
Rune Jeppesen

13

이것은 나를 위해 작동하는 코드입니다.

.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
이 솔루션은 입력 너비에 관계없이 작동합니다. 감사!
spacesuitdiver

같은 화면에서 typeahead.js + BS3 + datatable을 사용하여 나에게 완벽하게 작동하십시오. 감사합니다
Mike Castro Demaria

3

BS3이 포함 된 환경이 적기 때문에 Zugwalt CSS 코드 (더 읽기 쉬운 계층 구조로 배치)를 가져 와서 bs3의 드롭 다운 메뉴에서 스타일로 채 웠습니다. 그것은 단순히 (맞춤형) 변수를 따르는 것입니다.

    .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

다음 scss은 부트 스트랩 변수 / 선언에 최대한 의존 하는 버전입니다. 불행히도 중첩 된 선택자를 sass로 확장 할 수는 없습니다. 그렇지 않으면 더 작습니다.

@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

Bootstrap 4를 사용하는 경우 다음을 수행하면 충분합니다.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.