Die Vorschläge von typeahead.j von Twitter sind nicht gestylt (ohne Rand, transparenten Hintergrund usw.).


182

Ich verwende die typeahead.js 0.9.3 von Twitter und es scheint, dass meine Vorschläge überhaupt nicht gestylt sind.

Ich bekomme das:

Typeahead-Fehler

Anstelle von so etwas: (entnommen aus der Beispielseite )

Schreibkopf ideal

JavaScript, das typeahead aktiviert:

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

HTML-Eingabeelement:

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

Zusätzliche Bemerkungen:

Die Site, an der ich arbeite, hat jQuery 1.10.1 und verwendet keinen Twitter-Bootstrap. Es gibt eine Reihe von CSS, die ich nicht geschrieben habe und mit denen ich nicht vertraut bin, von denen ich befürchte, dass sie stören. Es scheint jedoch, dass das Plugin seine eigenen Stile hinzufügt (es gibt keine zugehörige CSS-Datei), sodass es theoretisch keine Dinge überschreiben sollte ? Ich bin verwirrt, warum meine Stile funktionieren, die vom Plugin hinzugefügten jedoch nicht, was zu Vorschlägen mit transparentem Hintergrund, ohne Rahmen usw. führt.

Antworten:


212

Wenn ich mir also die Dokumente ansehe, sehe ich jetzt:

Standardmäßig sieht das von typeahead.js erstellte Dropdown-Menü hässlich aus, und Sie sollten es so gestalten, dass es in das Thema Ihrer Webseite passt.

Meine Lösung bestand daher darin, das Styling aus dem Beispiel zu kopieren, das ich replizieren wollte:

.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
Aus irgendeinem Grund wurde meine vorgeschlagene Bearbeitung abgelehnt, aber beachten Sie, dass die tt-is-under-cursorKlasse anscheinend in umbenannt wurde tt-cursor. Dokumentation hier .
Joe Freeman

6
Es gibt auch eine tt-inputanstelle der tt-query(wie für 0.10.5)
Filip Spiridonov

7
Wäre es nicht besser, die alten Versionen in den Kommentaren zu haben?
Worldsayshi

3
.tt-Dropdown-Menü ist jetzt .tt-Menü
bkwdesign

1
Fügen Sie hinzu cursor: pointer;, .tt-is-under-cursorum einen geeigneten Cursor zu erhalten, der dem Benutzer mitteilt, dass er klicken muss.
Laurent W.

124

Die folgenden Stile geben Ihnen dieses Look & Feel. Es basiert auf dem CSS, das ich von der offiziellen Typeahead-Beispielwebsite extrahiert habe.

Geben Sie hier die Bildbeschreibung ein

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

Dies setzt voraus, dass Ihre Eingabe die form-controlKlasse hat. In meinem Beispiel ist es so:

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

4
Arbeitete für mich mit einem Tweak. Erscheint .tt-dropdown-menujetzt .tt-menu. Danke für die Antwort.
Groundh0g

33

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

Die anderen sahen nicht gut aus, dieser sieht am ehesten wie Bootstrap aus.


1
Funktioniert hervorragend mit Bootstrap
Jose Cherian

Dies funktionierte perfekt ohne Änderungen an Rails 4.2 und Bootstrap-Sass (3.3.7) Autoprefixer-Rails (> = 5.2.1) Sass (> = 3.3.4). Es ist auch etwas reaktionsschneller als einige der anderen Lösungen. Außerdem bedeutet dies, dass Ihr Eingabefeld eine Breite von 100% haben kann und daher mit den meisten Layouts funktionieren sollte.
rmcsharry

Wenn Ihre Eingabe jedoch breiter als 162 ist (die hier verwendete Mindestbreite), möchten Sie möglicherweise auch die Breite hinzufügen: 100%; zum ersten Abschnitt für das tt-Menü / tt-Dropdown
rmcsharry

19

Typeahead hat einige seiner Klassennamen geändert und die obigen Beispiele sind jetzt falsch.

Zum Beispiel:

  • Anstelle von .tt-suggestion.tt-is-under-cursor Gebrauch.tt-suggestion:hover
  • Anstatt .tt-dropdown-menu, Verwendung.tt-menu

Wenn Sie den Stil von der Beispielseite ausleihen möchten , sehen Sie das Stylesheet hier :

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

Hier ist eine Demo in Stack Snippets


2
Kann verhindert werden, dass Typeahead die Breite so klein macht?
Rune Jeppesen

13

Dies ist der Code, der für mich funktioniert:

.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
Diese Lösung funktioniert unabhängig von der Breite der Eingabe. Vielen Dank!
Raumanzug

Arbeiten Sie perfekt für mich mit typeahead.js + BS3 + datatable auf demselben Bildschirm. Vielen Dank
Mike Castro Demaria

3

Da ich mit BS3 weniger Umgebung habe, habe ich Zugwalt-CSS-Code genommen (in eine besser lesbare Hierarchie eingeordnet) und ihn mit dem Styling aus dem Dropdown-Menü von bs3 gefüllt. Es folgt einfach Ihren (angepassten) Variablen.

    .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

Hier ist eine scssVersion, die sich so weit wie möglich auf die Bootstrap-Variablen / Deklarationen stützt. Leider können Sie verschachtelte Selektoren in sass nicht erweitern, da sie sonst kleiner wären:

@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

Wenn Sie Bootstrap 4 verwenden, reicht dies aus:

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

In meinem speziellen Fall hat die absolute Positionierung das Problem gelöst. Die relative Positionierung drückte andere Bootstrap-Elemente nach unten, als die Vorschlagsliste (tt-Menü) geöffnet war.

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

Sie können dies zu der obigen Antwort https://stackoverflow.com/a/26934329/1225421 hinzufügen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.