ข้อเสนอแนะ typeahead.js ของ Twitter ไม่ได้ถูกจัดรูปแบบ (ไม่มีขอบพื้นหลังโปร่งใส ฯลฯ )


182

ฉันใช้ประเภท twitter ของ twitter 0.9.3และดูเหมือนว่าคำแนะนำของฉันจะไม่ได้รับการออกแบบเลย

ฉันได้รับสิ่งนี้:

ข้อผิดพลาด typeahead

แทนที่จะเป็นสิ่งนี้: (นำมาจากหน้าตัวอย่าง )

เหมาะสำหรับประเภท

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 และไม่ใช้ twitter bootstrap มี 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)
Filip Spiridonov

7
จะดีกว่าไหมถ้ามีรุ่นเก่า ๆ ในความคิดเห็น?
worldsayshi

3
.tt-dropdown-menu ขณะนี้
ttt

1
เพิ่มในcursor: pointer;เพื่อ.tt-is-under-cursorให้มีเคอร์เซอร์ที่เหมาะสมที่บอกผู้ใช้ว่าเขาต้องการคลิก
Laurent W.

124

ดังนั้นสไตล์ต่อไปนี้จะทำให้คุณดูและรู้สึกแบบนี้ มันขึ้นอยู่กับ CSS ที่ฉันดึงมาจากเว็บไซต์ตัวอย่างของ Typeahead อย่างเป็นทางการ

ป้อนคำอธิบายรูปภาพที่นี่

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

อีกอันหนึ่งดูไม่ดีนักอันนี้ดูเหมือน Bootstrap มากที่สุด


1
ใช้งานได้ดีกับ Bootstrap
Jose Cherian

สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบโดยไม่มีการเปลี่ยนแปลงใน Rails 4.2 และ bootstrap-sass (3.3.7) autoprefixer-rails (> = 5.2.1) sass (> = 3.3.4) นอกจากนี้ยังเป็นมิตรกับการตอบสนองมากกว่าเล็กน้อย นอกจากนี้ยังหมายถึงกล่องอินพุตของคุณมีความกว้าง 100% ดังนั้นควรทำงานกับเลย์เอาต์ส่วนใหญ่
rmcsharry

แม้ว่าถ้าคุณป้อนข้อมูลมีขนาดกว้างกว่า 162 (ความกว้างขั้นต่ำที่นี่) คุณอาจต้องการเพิ่มความกว้าง: 100%; ไปที่ส่วนแรกสำหรับเมนู tt / 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 code (วางไว้ในลำดับชั้นที่อ่านง่ายขึ้น) และเติมมันด้วยสไตล์จากเมนูแบบเลื่อนลงของ 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เวอร์ชันที่ต้องใช้ตัวแปร / การประกาศ bootstrap ให้มากที่สุด น่าเสียดายที่คุณไม่สามารถขยาย selectors ซ้อนใน 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

0

ในกรณีของฉันโดยเฉพาะตำแหน่งแน่นอนแก้ไขมัน การวางตำแหน่งสัมพัทธ์ผลักองค์ประกอบการบูตอื่น ๆ ลงเมื่อรายการแนะนำ (เมนู tt) เปิดขึ้น

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

คุณสามารถเพิ่มสิ่งนี้ลงในคำตอบด้านบนhttps://stackoverflow.com/a/26934329/1225421

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.