แนวทางปฏิบัติที่ดีที่สุดในการปรับแต่งการบูตแบบทวิตเตอร์ [ปิด]


285

ฉันทำงานกับ Bootstrap 2.0.3 โดยใช้ LESS ฉันต้องการปรับแต่งมันอย่างกว้างขวาง แต่ฉันต้องการหลีกเลี่ยงการเปลี่ยนแปลงแหล่งที่มาเมื่อใดก็ตามที่เป็นไปได้เนื่องจากการเปลี่ยนแปลงในไลบรารีเป็นประจำ ฉันใหม่สำหรับ LESS ดังนั้นฉันจึงไม่ทราบว่าการรวบรวมนั้นใช้งานได้อย่างไร อะไรคือแนวปฏิบัติที่ดีที่สุดสำหรับการทำงานกับกรอบ LESS หรือ LESS


สวัสดีจากอนาคต! การปรับแต่ง Bootstrap "แนวทางปฏิบัติที่ดีที่สุด" มีการเปลี่ยนแปลงใน SASS based 3.x และ 4.x: stackoverflow.com/a/50410667/171456
Zim

คำตอบ:


180

โซลูชันของฉันคล้ายกับ jstam แต่ฉันหลีกเลี่ยงการเปลี่ยนแปลงไฟล์ต้นฉบับเมื่อเป็นไปได้ เนื่องจากการเปลี่ยนแปลงใน bootstrap จะเกิดขึ้นบ่อยครั้งฉันต้องการดึงแหล่งข้อมูลล่าสุดและทำการเปลี่ยนแปลงเพียงเล็กน้อยโดยทำการแก้ไขในไฟล์แยกต่างหาก แน่นอนมันไม่ได้เป็นหลักฐานแสดงหัวข้อย่อยอย่างสมบูรณ์

  1. คัดลอก bootstrap.less และ variables.less ไปยังไดเร็กทอรีพาเรนต์ เปลี่ยนชื่อ bootstrap.less เป็น theme.less หรืออะไรก็ตามที่คุณต้องการ โครงสร้างไดเรกทอรีไดเรกทอรีของคุณควรมีลักษณะดังนี้:

    /Website            
         theme.less
         variables.less
         /Bootstrap
         ...
  2. อัพเดตการอ้างอิงทั้งหมดใน theme.less เพื่อชี้ไปที่ไดเร็กทอรีย่อย bootstrap ตรวจสอบให้แน่ใจว่า variables.less ของคุณถูกอ้างอิงจากพาเรนต์และไม่ใช่ไดเร็กทอรี bootstrap เช่นนั้น:

    ...
    // CSS Reset
    @import "bootstrap/reset.less";
    
    // Core variables and mixins
    @import "variables.less"; // Modify this for custom colors, font-sizes, etc
    @import "bootstrap/mixins.less";
    
    // Grid system and page structure
    @import "bootstrap/scaffolding.less";
    @import "bootstrap/grid.less";
    @import "bootstrap/layouts.less";

    ...

  3. เพิ่มการแทนที่ CSS ของคุณในไฟล์ theme.less ทันทีหลังจากที่ถูกรวมไว้

    ...
    // Components: Nav
    @import "bootstrap/navs.less";
    @import "bootstrap/navbar.less";
    
    // overrides
    .navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner {
        border-radius: 0 0 0 0;
        padding: 10px;
    }
    
    .nav-tabs, .nav-pills {
        text-transform: uppercase;
    }
    
    .navbar .nav > li > a {
        text-shadow: none;
    }
    
    ...
  4. ลิงก์ไปที่ theme.less แทน bootstrap.less ในหน้า HTML ของคุณ

เมื่อใดก็ตามที่มีรุ่นใหม่ออกมาการเปลี่ยนแปลงของคุณจะปลอดภัย คุณควรแตกต่างกันระหว่างไฟล์บูตสแตรปที่กำหนดเองของคุณทุกครั้งที่มีเวอร์ชั่นใหม่ออกมา ตัวแปรและการนำเข้าอาจเปลี่ยนแปลงได้


มีเหตุผลเฉพาะสำหรับ # 3 หรือไม่ จะเกิดอะไรขึ้นถ้า css ที่กำหนดเองทั้งหมดของคุณปรากฏที่ด้านล่างหลังจากการนำเข้าทั้งหมดแทนที่จะถูกรวมเข้าด้วยกันหลังจากการนำเข้าแต่ละครั้ง
AaronLS

2
@AaronLS: มันก็ใช้ได้เหมือนกัน ฉันคิดว่าหมายเลข 3 ใช้สำหรับจัดระเบียบ
Jonatan Littke

@joelrodgers ทำไม mixins.less จึงไม่สามารถแก้ไขได้โดยตรง
Joe Isaacson

คุณคิดอย่างไรเกี่ยวกับการรวมไฟล์ empty-custom.less (ผ่าน @import) ไว้ใน bootstrap.less จากนั้นทุกคนจะสามารถกำหนดค่าเริ่มต้นตัวแปร Bootstrap และปรับปรุงอย่างปลอดภัย อย่างไรก็ตามฉันคิดว่าคุณสมบัตินี้จะต้องรวมอยู่ใน Bootstrap
adriendenat

36

นี่คือสิ่งที่ฉันต่อสู้ด้วย ในอีกด้านหนึ่งฉันต้องการปรับแต่งไฟล์แปรปรวนอย่างมากด้วยสีและการตั้งค่าของฉันเอง ในทางกลับกันฉันต้องการเปลี่ยนไฟล์ Bootstrap ให้น้อยที่สุดเพื่อให้กระบวนการอัปเกรดง่ายขึ้น

วิธีแก้ปัญหาของฉัน (ตอนนี้) คือการสร้างไฟล์ addon LESS และแทรกลงในbootstrap.lessไฟล์หลังจากนำเข้าตัวแปรและมิกซ์อิน ดังนั้นสิ่งนี้:

...

// CSS Reset
@import "reset.less";

// Core variables and mixins
@import "variables.less"; // Modify this for custom colors, font-sizes, etc
@import "mixins.less";

// Custom Addons
@import "addon-file.less"; // <--- My custom LESS addon

// Grid system and page structure
@import "scaffolding.less";

...

วิธีนี้ถ้าฉันต้องการรีเซ็ตสีบูตแบบอักษรหรือเพิ่มมิกซ์อินเพิ่มเติมที่ฉันสามารถทำได้ รหัสของฉันแยกต่างหากจะถูกรวบรวมภายในการนำเข้า Bootstrap ที่เหลือ มันไม่สมบูรณ์แบบ แต่มันเป็น stopgap ที่ทำงานได้ดีสำหรับฉัน


1
ทางออกที่ดี นี่คือสิ่งที่ฉันทำกับการเปลี่ยนแปลงบางอย่าง ดูคำตอบของฉัน มันนานเกินไปที่จะแสดงความคิดเห็น
Joel Rodgers

ฉันชอบทางออกของคุณเช่นกันโจเอล การแยกโค้ดของคุณกับโค้ดของเฟรมเวิร์ก
jstam

เนื่องจาก mixins อ้างอิงถึงตัวแปรฉันจะต้องมี custom-variables.less เพิ่มเติมระหว่างการนำเข้า variables.less และ mixins.less หรือไม่ เพื่อให้ฉันสามารถแก้ไขตัวแปรเช่น @baseFontSize ฉันยังไม่รู้พอที่จะรู้ว่ามันจะทำให้ฉันสำลักประกาศตัวแปรชื่อเดียวกันอีกครั้งหรือไม่
AaronLS

ฉันพบว่านี่เป็นวิธีแก้ปัญหาที่มีประโยชน์มากที่สุดเพราะต่อหนึ่ง bootstrap ใหม่เราก็ต้องเพิ่มหนึ่งบรรทัดอีกครั้งเพื่อbootstrap.lessคว้าไฟล์ VS ที่กำหนดเองของเราอาจเปลี่ยนแปลงหลายบรรทัดถ้าเปลี่ยนชื่อไฟล์หลักน้อยกว่า ฯลฯ ... ฉันใช้ วิธีการแก้ปัญหานี้คอมไพล์ minified JS ของฉันอีกครั้งโดยใช้เสียงฮึดฮัดและสิ่งที่ดีในประทุน! การปรับแต่งใช้งานได้โดยไม่มีข้อความที่ไม่เป็นมิตร!important!
twknab

25

จากด้านข้างของฉันฉันเพิ่งมีไฟล์ชื่อที่theme.lessมีการนำเข้าboostrap.lessมาและด้านล่างฉันแทนที่ (แม้ว่ามันจะไม่ดีโดยใช้ LESS แต่ก็ง่ายกว่าที่จะรักษา) ค่าตัวแปรที่ฉันไม่ต้องการอัปเดต .

สิ่งนี้ทำงานได้ดีสำหรับการมีค่าที่กำหนดเองสำหรับตัวแปรใน variables.less

หลังจากนั้นฉันก็รวบรวมtheme.lessไฟล์แทนbootstrap.less

ตัวอย่างtheme.less:

@import "path/to/my/bootstrap.less";  
@linkColor: #MyAwesomeColor;  

1
นี่คือวิธีที่ 1) มีสำเนาของรหัส bootstrap ที่สามารถอัปเดตได้ตามต้องการในขณะที่ยัง 2) สามารถกำหนดค่าที่คุณกำหนดเองได้ ดูstackoverflow.com/questions/13809895/…สำหรับรายละเอียดเกี่ยวกับโครงสร้างโฟลเดอร์
Jeromy French

ฉันแน่ใจว่าจะใส่รหัสนี้ก่อนโค้ดน้อยลงเพื่อให้แน่ใจว่า bootstrap ไม่ได้แทนที่มัน
Aram Kocharyan

มันใช้งานได้ดีสำหรับฉัน ฉันเพิ่งชี้ Koala ที่ theme.less และมันรวบรวมทุกครั้งที่ฉันบันทึก
ow3n

ในกรณีที่มีผู้ใช้รุ่น SASS ให้ระวัง! default
prasanthv

5

ไกลดีกว่า (IMHO) วิธีการคือการใช้คิวจากBootswatchโครงการ GitHub เรียกswatchmaker โครงการนี้ได้รับการออกแบบมาโดยเฉพาะสำหรับการสร้างและจัดการธีม Bootstrap หลายสิบรายการบนเว็บไซต์

Makefileในโครงการสร้างswatchmaker.less(คุณสามารถเปลี่ยนชื่อเพื่อสิ่งที่ต้องการcustomizations.less) ไฟล์นี้มีการนำเข้ามากมาย:

@import "bootstrap/less/bootstrap.less";
@import "swatch/variables.less";
@import "swatch/bootswatch.less";
@import "bootstrap/less/utilities.less";

คุณสามารถเปลี่ยนชื่อswatchโฟลเดอร์และbootswatch.lessไฟล์เป็นสิ่งที่คุณเห็นว่าเหมาะสม

สิ่งนี้สมเหตุสมผลเนื่องจากคุณสามารถอัพเกรด Bootstrap โดยไม่กระทบกับไฟล์ของคุณเอง ในความเป็นจริงแล้วMakefileยังมีคำสั่งเพื่อดึง Bootstrap เวอร์ชันล่าสุด ดู README ในหน้าโครงการสำหรับข้อมูลเพิ่มเติม

เป็นโบนัส README ยังแนะนำให้คุณติดตั้งwatchrgem ซึ่งจะสร้างโครงการโดยอัตโนมัติเมื่อ.lessไฟล์มีการเปลี่ยนแปลง


4

ถ้า (และเฉพาะถ้า) คุณมีเวลาที่คุณสามารถทำได้เหมือนฉัน ฉันเก็บเฟรมเวิร์กเวอร์ชันที่ปรับปรุงแล้วของตัวเองและทุกครั้งที่มีการอัพเดตเฟรมเวิร์กฉันอ่านเอกสารและตรวจสอบแหล่งที่มาสำหรับการปรับเปลี่ยน

วิธีแก้ปัญหานี้อาจฟังดูน้อยกว่าในครั้งแรก แต่ฉันมีเหตุผลที่จะทำเช่นนั้น ฉันไม่ได้ทำงานกับสิ่งใดสิ่งหนึ่ง แต่เป็นการรวมเฟรมเวิร์กแนวทางปฏิบัติที่ดีที่สุดการตั้งค่าใหม่ / สไตล์ชีททั่วไปและฉันมั่นใจเสมอว่าจะไม่มีการปรับปรุงใด ๆ

ฉันทำงานและด้วยกรอบงานที่กำหนดเองของฉันเองด้วยเหตุผลดังต่อไปนี้

  1. ฉันถอดออกทุก ๆ นิดหน่อยฉันไม่จำเป็นต้องเก็บของแบบโมดูลาร์และเล็ก
  2. ฉันใช้กรอบงานของฉันสำหรับงานของลูกค้าและต้องการ) รู้ว่าฉันทำงานด้วยอะไรในขณะที่ข) เป็นเจ้าของทุกอย่างที่ฉันขายให้กับลูกค้า ฉันไม่เพียงแค่คัดลอกและใช้กรอบงาน แต่พยายามทำความเข้าใจและสร้างใหม่
  3. ฉันใช้เฟรมเวิร์กร่วมกับ CMS และไม่สามารถวางและลืมเฟรมเวิร์กในโครงการ / เริ่มตั้งแต่เริ่มต้น

ใช่ฉันเข้าใจ แต่สำหรับฉันสิ่งต่าง ๆ กำลังเปลี่ยนแปลงอย่างรวดเร็วจนเทคโนโลยีเว็บนี้กลายเป็นเรื่องยากที่จะติดตาม
Joel Rodgers

1
ตามที่กล่าวไว้: แนวทางของฉันมีไว้สำหรับผู้ที่ติดตามดูการพัฒนาในปัจจุบันของกรอบงานหลาย ๆ กรอบเท่านั้น ฉันทำอย่างนั้นเพราะฉันจะต้องอยู่ด้านบนของการพัฒนาและวิธีการที่แตกต่างเพื่อความท้าทายทางเทคนิค ฉันคิดว่าสิ่งนี้เหมาะกว่าสำหรับนักพัฒนาเฟรมเวิร์กและมือปืนรับจ้างที่เพียงแค่ "ต้องการทำงานให้สำเร็จ"
ทุก Bits เท่ากับ

4

ฉันมาที่ทางออกเดียวกับ Joel:

ไฟล์หักที่กำหนดเอง

เช่นเดียวกับที่อธิบายไว้ข้างต้น: ฉันสร้างสำเนาโลคัลสำหรับไฟล์ Less ทั้งหมดที่ฉันกำหนดเอง: เช่น: "variables-custom.less", "alert-custom.less", "buttons-custom.less" ดังนั้นฉันสามารถใช้มาตรฐานและมีการเพิ่มเติมของตัวเอง ข้อเสียคือ: เมื่อ Bootstrap จะได้รับการอัปเดตมันเป็นการยากที่จะโยกย้าย

แต่มีอย่างอื่น:

รูปแบบการแทนที่

เมื่อมองไปรอบ ๆ เวิร์กโฟลว์ฉันมักจะเห็นคนแนะนำให้เพียงแค่แทนที่สไตล์ ดังนั้นคุณนำเข้าไฟล์ Less Less มาตรฐานก่อนจากนั้นจึงเพิ่มการประกาศที่กำหนดเองของคุณที่ด้านล่าง ข้อเสียคือ: อัปเดตเป็นเวอร์ชันใหม่ได้ง่ายขึ้น ข้อเสียคือ: ไฟล์ CSS ที่รวบรวมรวมถึงการแทนที่ทั้งหมด ตัวเลือก CSS บางตัวถูกกำหนดไว้สองครั้ง ดังนั้นเบราว์เซอร์จึงต้องทำการยกเพื่อค้นหาว่าจะใช้งานจริงอย่างไร ไม่สะอาดจริงๆ

ฉันสงสัยว่าทำไมตัวประมวลผลล่วงหน้าไม่ฉลาดพอที่จะแก้ปัญหาการประกาศสองครั้งดังกล่าวได้ มีขั้นตอนการทำงานที่ดีกว่านี้หรือไม่


1
ฉันเห็นว่าคุณกำลังชี้ แต่คุณสามารถเรียกใช้ยูทิลิตี้การทำความสะอาด CSS ออนไลน์หรือในพื้นที่ นี่คือรายการของพวกเขา: stackoverflow.com/questions/135657/… คุณอาจไม่ต้องการคอมไพเลอร์น้อยลงที่ทำงานในผลิตภัณฑ์อยู่ดี
Joel Rodgers

ขอบคุณสำหรับการตอบกลับไม่ทราบว่ามีเครื่องมือฝุ่นฉัน เจ๋งฉันจะขุดมัน จริงๆแล้วฉันใช้คอมไพเลอร์น้อยกว่าในท้องถิ่น anyways (CodeKit) ไม่ต้องการรวบรวม css สองครั้ง
Frank Lämmer

2

เพียงเพิ่ม@import "../../styles.less";(หรือที่ใดก็ตามที่สไตล์ชีทของคุณอยู่) เพื่อ bootstrap.less ที่ด้านล่าง วิธีนี้ช่วยให้คุณใช้ Bootstrap มิกซ์อินเช่น.gradientหรือ.border-radiusภายในสไตล์ของคุณเอง

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