Twitter'ın typeahead.js önerileri biçimlendirilmedi (kenarlığı, şeffaf arka planı vb. Yok)


182

Ben twitter'ın typeahead.js 0.9.3 kullanıyorum ve benim öneriler hiç tarz değil gibi görünüyor.

Bunu alıyorum:

yazım hatası

Bunun gibi bir şey yerine: ( örnekler sayfasından alınmıştır )

daktilo tipi ideal

JavaScript etkinleştiren yazı tipi:

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

HTML giriş öğesi:

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

Ek Notlar:

Üzerinde çalıştığım site jQuery 1.10.1 ve twitter bootstrap kullanmıyor. Yazmadığım ve dolayısıyla korktuğumdan korkmadığım bir sürü CSS var, ancak eklenti kendi stillerini ekliyor gibi görünüyor (eşlik eden .css dosyası yok), bu yüzden teorik olarak şeyleri geçersiz kılmamalı ? Stillerimin neden çalıştığı konusunda kafam karıştı, ancak eklenti tarafından eklenenler işe yaramaz, şeffaf arka planlı, sınırsız vb.

Yanıtlar:


212

Şimdi gördüğüm belgelere baktığımda :

Varsayılan olarak, typeahead.js tarafından oluşturulan açılır menü çirkin görünecek ve web sayfanızın temasına uyduğundan emin olmak için stil vermek isteyeceksiniz.

Benim çözümüm böylece çoğaltmak istediğim örnekten stil kopyalamak oldu:

.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
Herhangi bir nedenle önerilen düzenlemem reddedildi, ancak tt-is-under-cursorsınıfın yeniden adlandırılmış gibi göründüğüne dikkat edin tt-cursor. Belgeler burada .
Joe Freeman

6
Ayrıca Orada tt-inputyerine tt-query(0.10.5 gibi)
Filip Spiridonov

7
Yorumlarda eski sürümlere sahip olmak daha iyi olmaz mıydı?
worldsayshi

3
.tt-dropdown-menu şimdi .tt-menu
bkwdesign

1
Kullanıcıya tıklaması gerektiğini bildiren uygun bir imleç cursor: pointer;eklemek .tt-is-under-cursoriçin ekleyin .
Laurent

124

Yani, aşağıdaki stiller size bu görünümü ve hissi verecektir. Resmi Typeahead örnekleri web sitesinden çıkardığım CSS'ye dayanıyor.

resim açıklamasını buraya girin

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

Bu, girdinizin form-controlsınıfa sahip olacağını varsayar . Örneğim için şöyle:

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

4
Benim için bir değişiklik yaptı. Görünüyor .tt-dropdown-menuşimdi .tt-menu. Cevap için teşekkürler.
groundh0g

33

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

Diğerleri harika görünmüyordu, bu en çok Bootstrap'a benziyor.


1
Bootstrap ile harika çalışıyor
Jose Cherian

Bu Rails 4.2 ve bootstrap-sass (3.3.7) autoprefixer-rails (> = 5.2.1) sass (> = 3.3.4) 'de hiçbir değişiklik olmadan mükemmel bir şekilde çalıştı. Ayrıca, giriş kutunuzun genişliğinin% 100 olabileceği anlamına gelir, bu nedenle çoğu düzende çalışması gerekir.
rmcsharry

Girdiğiniz sayfa 162'den daha genişse (burada kullanılan minimum genişlik), genişlik de eklemek isteyebilirsiniz:% 100; tt-menu / tt-dropdown için ilk bölüme
rmcsharry

19

Typeahead bazı sınıf adlarını değiştirdi ve yukarıdaki örnekler artık yanlış.

Örneğin:

  • Yerine .tt-suggestion.tt-is-under-cursor kullanımı.tt-suggestion:hover
  • Yerine .tt-dropdown-menu, kullanımı.tt-menu

Stili örnekler sayfasından ödünç almak istiyorsanız, stil sayfasını burada görebilirsiniz :

.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ığın Parçacıklarında Bir Demo


2
Yazı tipinin genişliği bu kadar küçük yapmasını önlemek mümkün müdür?
Rune Jeppesen

13

Bu benim için çalışan kod:

.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
Bu çözüm, girdinin genişliği ne olursa olsun çalışır. Teşekkürler!
spacesuitdiver

Aynı ekranda typeahead.js + BS3 + datatable ile mükemmel çalışın. Teşekkürler
Mike Castro Demaria

3

BS3 dahil daha az bir ortam var çünkü ben Zugwalt css kodu (daha okunabilir bir hiyerarşi yerleştirilir) aldı ve bs3 açılan menüsünden stil ile doldurdu. Basitçe (özelleştirilmiş) değişkenlerinizi takip eder.

    .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

İşte scssmümkün olduğunca bootstrap değişkenlerine / bildirimlerine dayanan bir sürüm. Maalesef iç içe seçicileri sass'ta genişletemezsiniz, aksi takdirde daha küçük olur:

@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 kullanıyorsanız, bunu yapmak yeterlidir:

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

Benim özel durumumda mutlak konumlandırma bunu çözdü. Göreli konumlandırma, öneri listesi (tt menüsü) açıkken diğer önyükleme öğelerini aşağı bastırıyordu.

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

Bunu yukarıdaki cevaba ekleyebilirsiniz https://stackoverflow.com/a/26934329/1225421

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.