整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          6個最好的HTML框架,用于開發一個偉大的移動UI

          這個移動時代,企業正在迅速擁抱移動解決方案,使他們的業務成為更高的預期。雖然有幾種方法可用于移動應用開發,但HTML5移動應用開發是最受歡迎的。雖然具有很少或根本沒有技術知識的人員可以聘請開發人員獲得多種應用程序來滿足他們的需求,但是有許多有魅力的HTML5框架和工具可以支持敏捷和輕松的移動開發。

          在這篇文章中,我將發現已知的用于設計和開發移動應用程序的神話般接口的HTML5框架。這些框架包括包含JavaScript和CSS文件的庫。這些庫允許開發人員精通開發移動應用程序,而不需要實現任何本機代碼。

          沒有任何進一步的煩惱,讓我們提供最好的HTML5移動UI框架。

          Kendo UI

          Kendo UI是最受歡迎的HTML5框架之一,加載了高端功能。您可以通過此框架輕松開發無價的跨平臺移動應用程序。這個快速和輕便的平臺配備了一套超過70個UI小部件; 這個強大的集是完全基于jQuery的。在提供AngularJS集成的同時,它還支持Bootstrap并提供離線數據解決方案。它還提供了13個內置主題的壓倒性的列表,可以定制,以創建所需的外觀和感覺。

          對于現場的新手,如果您擁有jQuery(可以輕松學習)的專業知識,那么開始使用Kendo UI就不難。此外,它還包括各種開源工具等

          Bootstrap

          Bootstrap是另一個支持HTML,CSS和JS的高級框架,它允許人們通過響應式布局來開發美觀的移動應用程序。這個絕對框架的直觀和簡單的界面允許具有初學者,中級或高級技能的人們以期望的方式精通開發移動應用程序。為了幫助您在這個平臺上方便地工作,它包括基于HTML和CSS的設計模板。您可以使用這些模板創建表單,排版,圖像輪播,導航等。

          Ionic

          Ionic是一個非常棒的HTML5框架,可以幫助開發先進的混合移動應用程序。它基本上是一個開源的前端SDK,它使用CSS,HTML和JavaScript來提供高效的混合移動應用開發。它包含可以幫助您開發高度交互式移動應用程序的工具。此外,它是用CSS擴展構建的--SASS(Syntactically Awesome StyleSheets),并針對AngularJS進行了優化。你可以很容易的開始運行這個框架,這很容易操作; 如果需要,您還可以參考互聯網上提供的便捷教程。

          Sencha Touch

          Sencha Touch是一個令人敬畏的HTML5和JavaScript框架,可以創建高端跨平臺移動網絡應用程序。這個基于MVC的框架為移動設備和驚人的主題提供了超過50個輝煌的UI組件,擁有原生的視覺吸引力。Sencha Touch開發的應用程序與所有主流移動平臺兼容。其本土化的UI小部件和強大的自適應布局增強了用戶交互,從而增加了其可信度。

          Onsen UI

          Onsen UI是一個基于元素的自定義框架,可以設計出令人難以置信的應用程序。它旨在提供具有優異UX的確定性HTML5應用程序,而不是提及本機類的性能。它本質上是響應的,因此,允許人們有效地瞄準大量的屏幕尺寸,而不會影響質量。您可以通過這個開源框架的易于使用的界面,精通開發混合應用程序。此外,它還支持Apache Cordova和PhoneGaps。

          Intel SDK

          Intel SDK是另一個令人驚奇的HTML5框架,在全球范圍內廣受歡迎,用于敏捷移動應用程序開發。您可以輕松開發跨平臺移動應用程序,具有所需的外觀和感覺。它通過審查工作流程使設計,開發,調試和部署相當簡單。

          所有這些框架提供最優秀的性能,您可以通過考慮您的項目需求和業務目標來簡化您的選擇。選擇最適合的框架,并開發出具有迷人而卓越UI的移動應用。

          (原創文章,版權所有)

          家好,很高興又見面了,我是"高級前端?進階?",由我帶著大家一起關注前端前沿、深入前端底層技術,大家一起進步,也歡迎大家關注、點贊、收藏、轉發,您的支持是我不斷創作的動力。

          今天給大家帶來的主題是“2023年前端必知的CSS 和 UI 15+全新功能”,文章知識點大部分來自于Google官網,但是內容做了不少總結和補充。希望本文能從總體上讓大家對2023年的瀏覽器新功能有一個大而全的了解。

          話不多說,直接進入正題!

          容器查詢(Container Queries)

          在創建移動網頁時,通常依靠媒體查詢來根據屏幕尺寸調整布局。 但是,如果想根據內容塊的大小應用修改該怎么辦? 這就是容器查詢的用途。

          容器查詢允許根據父級大小修改元素的樣式,這與媒體查詢根據視口的大小應用更改不同

          比如下面的例子:

          .post {
            container-type: inline-size;
              // size, inline-size或者 normal
              // 為.post元素聲明一個containment context
          }
          <div class="post">
            <div class="card">
              <h2>Card title</h2>
              <p>Card content</p>
            </div>
          </div>

          container-type 支持不同類型,不同類型有不同含義:

          • size:查詢將基于容器的內聯尺寸和塊尺寸。將布局、樣式和大小限制應用于容器。
          • inline-size:查詢將基于容器的內聯尺寸。將布局、樣式和內聯大小包含應用于元素。
          • normal:該元素不是任何容器大小查詢的查詢容器(query container),但仍然是容器樣式查詢的查詢容器。

          接下來,使用 @container 規則定義容器查詢。 以下示例中的查詢將根據包含上下文的最近祖先(nearest ancestor )的大小將樣式應用于元素。 具體來說,如果容器寬度超過 700 像素,此查詢將為卡片標題應用更大的字體大小:

          /* 容器小于700px樣式 */
          .card h2 {
            font-size: 1em;
          }
          /* 容器大于 700px */
          @container (min-width: 700px) {
            .card h2 {
              font-size: 2em;
            }
          }

          Style Queries

          容器查詢規范還允許開發者查詢父容器的樣式值。 目前,已在 Chrome 111 中部分實現,開發者可以在其中使用 CSS 自定義屬性來應用容器樣式。

          以下示例使用存儲在自定義屬性值中的天氣特征(例如下雨、晴天和陰天)來設置卡片背景和指示器圖標的樣式。

          @container style(--sunny: true) {
           .weather-card {
             background: linear-gradient(-30deg, yellow, orange);
           }
           .weather-card:after {
             content: url(<data-uri-for-demo-brevity>);
             background: gold;
           }
          }

          下面是 HTML 的內容值:

          <ul class="card-list">
             {/*使用--sunny: true*/}
             <li class="card-container" style="--sunny: true;">
              <div class="weather-card">
                <div class="day">Saturday</div>
                <div class="date">February <span>12</span></div>
                <div class="temps">
                  <div class="high">High: <span>55</span></div>/
                  <div class="low">Low: <span>47</span></div>
                </div>
                <div class="features">
                  Clear skies, sun
                </div>
              </div>
            </li>
          </ul>
          </ul>

          以上示例只是樣式查詢的開始,后續甚至可以使用布爾查詢來確定自定義屬性值是否存在并減少代碼重復,目前正在討論的是范圍查詢(range queries)以根據一系列值應用樣式。

          has()

          使用 :has() 選擇器,可以通過檢查父元素是否包含特定子元素,或者這些子元素是否處于特定狀態來應用樣式。 它本質上是一個“父”選擇器

          對該選擇器有不同的語法:

          • h1:has(p):選擇具有 <p> 子級標記的 <h1> ,無論其級別如何。
          • h1:has(> p):選擇具有 <p> 子級標記的 <h1>
          • h1:has(+ p):選擇后面直接跟著<p>元素的<h1>

          假如有以下 HTML:

          <article>
            <h1>Morning Times</h1>
            <h2>Delivering you news every morning</h2>
            <p>
              Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
              tempor incididunt ut labore et dolore magna aliqua.
            </p>
          </article>

          同時有以下選擇器:

          h1:has(+ h2) {
            margin: 0 0 0.25rem 0;
            color:red;
          }

          此時“Morning Times”文案將顯示紅色。

          nth-of

          Web 平臺現在具有更高級的 nth-child 選擇功能,而高級 nth-child 語法提供了一個新關鍵字(“of”),它允許開發者使用 An+B 的現有微語法,以及要在其中進行搜索的更具體的子集。

          如果在特殊類上使用常規的 nth-child,例如 :nth-child(2),則瀏覽器將選擇應用了特殊類的元素,并且也是第二個子元素。 這與 :nth-child(2 of .special) 形成對比,后者將首先預過濾所有 .special 元素,然后從該列表中選擇第二個元素。

          :nth-child(2 of .highlight)
          // 選擇具有 .highlight 類的第二個匹配元素
          :nth-child(4 of .highlight, .sale)
          // 從一組同級元素中選擇第四個元素,即 .highlight 或 .sale

          text-wrap: balance

          Chrome Canary 包含一項新功能(Chrome 114 或更高版本),即 text-wrap:balance。

          如果沒有 text-wrap: balance, 設計師、內容編輯和出版商幾乎沒有工具來改變行平衡的方式。最好的選擇是使用 <wbr> 或 - 幫助指導文本布局做出關于在何處換行和換行的更明智的決策。

          作為開發人員,由于不知道標題或段落的最終大小、字體大小,甚至語言。 有效且美觀地處理文本換行所需的所有變量都在瀏覽器中。 這就是為什么會看到標題換行,如下圖所示:

          .unbalanced {
            max-inline-size: 50ch;
          }

          使用 CSS Text 4 中的 text-wrap:balance,可以請求瀏覽器找出文本的最佳平衡換行解決方案。 瀏覽器確實知道所有因素,例如:字體大小、語言和分配的區域。 比如下面效果:

          代碼如下:

          .balanced {
            max-inline-size: 50ch;
            text-wrap: balance;
          }

          initial-letter

          網頁排版的另一個不錯的改進是 initial-letter, 此 CSS 屬性使開發者可以更好地控制內嵌首字下沉樣式。

          開發者可以在:first-letter 偽元素上使用 initial-letter 來指定,比如:基于字母占用的行數的字母大小。 字母的塊偏移或“下沉”,即字母所在的位置。

          p:first-letter {
            initial-letter: 3.5 3;
          }
          • 第一個參數定義字母的大小及其占用的行數: 字母將放大,同時保持其縱橫比。不能使用負值,但可以使用小數值。
          • 第二個參數定義字母下沉(letter sink): 這可以被認為是字母所在位置的偏移量。 值是可選的,不能為負數。 如果不存在,則假定字母大小的值取整至最接近的整數。 這相當于使用關鍵字“drop”。 接收器還接受另一個關鍵字值“raise”,它相當于接收器 1。

          新 viewport 單元

          開發網頁時,考慮屏幕的尺寸非常重要。 使用視口進行設計的一種方法是使用視口高度單位 vh/vw(100vh 是屏幕高度的 100%)。

          這種方法的問題是移動設備上沒有考慮瀏覽器的工具欄高度

          • 藍色箭頭:顯示頁面的高度
          • 紅色箭頭:屏幕上可見的高度

          為了解決這個問題,瀏覽器現在提供了新的單位值:

          • 小視口(svh/svw):考慮地址欄和工具欄
          • 大視口(lvh/lvw):不考慮地址欄和工具欄
          • 動態視口 (dvh/dvw):當工具欄可見或/和不可見時調整其值。

          重要的是要知道這些單位沒有考慮滾動條。 因此,根據具體情況,開發者可能希望使用一個單位值而不是另一個單位值,或者只使用視口以外的另一個單位。

          廣色域色彩空間

          Web 平臺的另一個新的關鍵補充是廣色域色彩空間。 在 Web 平臺上提供廣色域顏色之前,開發者可以拍攝色彩鮮艷的照片,并可在現代設備上查看,但無法創建與這些鮮艷值相匹配的按鈕、文本顏色或背景。

          但現在 Web 平臺上有了一系列新的色彩空間,包括: REC2020、P3、XYZ、LAB、OKLAB、LCH 和 OKLCH,可以在高清色彩指南中了解新的網絡色彩空間等。

          可以立即在 DevTools 中看到顏色范圍如何擴展,其中白線描繪了 srgb 范圍的結束位置以及更寬色域顏色范圍的開始位置。

          [data-color="red"] {
            background-color: oklch(50% 130 20);
          }
          [data-color="red-alpha"] {
            background-color: oklch(50% 130 20 / 0.4);
          }

          color-mix()

          color-mix() 函數對擴展的顏色空間進行擴展。

          此函數支持混合兩個顏色值,以根據混合顏色的通道創建新值,混合的色彩空間會影響結果。 在像 oklch 這樣更具感知性的色彩空間中,將具有與 srgb 等不同的顏色范圍。

          該方法的語法如下:

          color-mix(in lch, plum, pink);
          color-mix(in lch, plum 40%, pink);
          color-mix(in srgb, #34c9eb 20%, white);
          color-mix(in hsl longer hue, hsl(120 100% 50%) 20%, white);

          color-mix() 函數提供了大多數開發要求的功能,即能夠保留不透明的顏色值,同時為其添加一些透明度。

          現在,可以使用品牌顏色變量,同時以不同的不透明度創建這些顏色的變體, 實現此目的的方法是將顏色與透明混合。比如: 當將藍色品牌顏色與 10% 透明顏色混合時,會得到 90% 不透明品牌顏色。

          .shorter {
            background-color: color-mix(
              in hsl shorter hue,
              hsl(10 100% 50%),
              hsl(60 100% 50%)
            );
          }
          .longer {
            background-color: color-mix(
              in hsl longer hue,
              hsl(10 100% 50%),
              hsl(60 100% 50%)
            );
          }

          CSS Nesting(CSS 嵌套)

          CSS 嵌套的實現來自于大多數開發者對 Sass、Less 的喜愛,也是 CSS 開發人員多年來最要求的功能之一,終于在 Web 平臺中得以實現。

          CSS 嵌套允許開發人員以更簡潔、分組的格式編寫,從而減少冗余。

          .card {}
          .card:hover {}
          /* 可以通過下面方式嵌套 */
          .card {
            &:hover {}
          }

          CSS 嵌套還支持嵌套媒體查詢,當然也包括容器查詢。在以下示例中,如果卡片的容器中有足夠的寬度,卡片就會從縱向布局更改為橫向布局:

          .card {
            display: grid;
            gap: 1rem;
            @container (width >= 480px) {
              // 尺寸足夠大
              display: flex;
            }
          }

          Scoped CSS

          CSS Scoped 樣式允許開發人員指定特定樣式應用的邊界,本質上是在 CSS 中創建本機命名空間(native namespacing )。

          以前,開發人員只能依靠第 3 方腳本來重命名類,或使用特定的命名約定來防止樣式沖突,但目前開發者已經可以使用 @scope。:scope 屬于 CSS 偽類,它表示作為選擇器要匹配的參考點的元素。

          /* Selects a scoped element */
          :scope {
            background-color: lime;
          }

          在上面的例子中,:scope 等效于 :root,因為目前尚無一種方法來顯式建立作用域元素。當從 DOM API 使用,如(querySelector(), querySelectorAll(), matches(), 或 Element.closest()), :scope 匹配調用 API 的元素。

          let paragraph = document.getElementById('para');
          let output = document.getElementById('output');
          
          if (paragraph.matches(':scope')) {
            output.innerText = 'Yep, the element is its own scope as expected!';
          }

          上面的示例演示了調用 Element.matches() 方法中使用 :scope 偽類來匹配調用它的元素。

          Cascade layers

          層疊本質就是定義了如何合并來自多個源的屬性值的算法,簡單來說,CSS 規則的順序很重要。當兩條同級別的規則應用到一個元素的時候,寫在后面的就是實際使用的規則。

          h1 {
              color: red;
          }
          h1 {
              color: blue;
          }
          // 兩條規則優先級相同,所以順序在最后的生效,h1是color:blue'勝出',顯示藍色。

          Cascade layers 通過讓用戶控制哪些層比其他層具有更高的優先級來解決這個問題,這意味著對應用樣式進行更精細的控制。

          即 CSS @規則 中的@layer 聲明了一個 級聯層,同一層內的規則將級聯在一起,這給予了開發者對層疊機制的更多控制。

          @layer utilities {
            /* 創建一個名為 utilities 的級聯層 */
          }

          下面是導入@layer 的方式:

          @layer theme, layout, utilities;

          層最初被指定的順序決定了它是否有優先級。對于聲明而言,如果同一聲明在多個級聯層中被指定,最后一層中的將優先于其他層。因此,在上面的例子中,如果 theme 層和 utilities 層中存在沖突的規則,那么 utilities 層中的將優先被應用。

          即使 utilities 層中規則的優先級低于 theme 層中的,該規則仍會被應用。一旦級聯層順序建立之后,優先級和出現順序都會被忽略。這將使創建 CSS 選擇器變得更加簡單,因為你不需要確保每一個選擇器都有足夠高的優先級來覆蓋其他沖突的規則,只需要確保出現在一個順序更靠后的級聯層中。

          三角函數

          現在三角函數已經被添加到現有的 CSS 數學函數中。這些功能已經在所有主流瀏覽器中得到支持,使開發者能夠在 Web 平臺上創建更復雜的布局。 比如: sin()、cos() 、 tan()、asin()、acos()、atan() 、 atan2()等等。

          • cos(): CSS 函數是一個三角函數,它返回數字的余弦值,該值介于 -1 和 1 之間。該函數包含一個計算,必須通過解釋解析為 <number> 或 <angle> 以弧度表示的參數結果。 也就是說,cos(45deg)、cos(0.125turn) 和 cos(3.14159 / 4) 都表示相同的值,大約為 0.707。
          • sin():CSS 函數是一個三角函數,它返回數字的正弦值,該值是 -1 到 1 之間的值。該函數包含一個計算,必須通過解釋來解析為 <number> 或 <angle> 以弧度表示的參數結果。 也就是說,sin(45deg)、sin(0.125turn) 和 sin(3.14159 / 4) 都表示相同的值,大約為 0.707。

          單獨動畫屬性

          過去,開發者依賴于 transform 函數來應用子函數來縮放、旋轉和平移 UI 元素。 這涉及大量重復,并且在動畫中的不同時間應用多個變換時尤為復雜。

          .target {
            transform: translateX(50%) rotate(30deg) scale(1.2);
          }
          
          .target:hover {
            transform: translateX(50%) rotate(30deg) scale(2);
             /* Only scale changed here, yet you have to repeat all other parts */
          }

          現在,可以通過分離變換類型并單獨應用來在 CSS 動畫實現所有這些細節。

          .target {
            translate: 50% 0;
            rotate: 30deg;
            scale: 1.2;
          }
          .target:hover {
            scale: 2;
          }

          這樣,平移、旋轉或縮放的變化可以在動畫期間的不同時間以不同的變化率同時發生

          錨定位

          彈出窗口經常用于對話框和工具提示等元素,這些元素通常需要錨定到特定元素。

          現在,開發者可以使用 anchor()函數創建居中工具提示,使用錨點的寬度將工具提示定位在錨點 x 位置的 50%處。 然后,使用現有定位值來應用其余的放置樣式。但是,這種做法常常會遇到不少問題。

          為了解決這個問題,錨點定位 API 允許自定義的 fallback 位置。

          以下示例創建一個名為“top-then-bottom”的 fallback 位置。 瀏覽器將首先嘗試將工具提示放置在頂部,如果它不適合視口,則瀏覽器會將其放置在底部的錨定元素下方。

          .center-tooltip {
            position-fallback: --top-then-bottom;
            translate: -50% 0;
          }
          // 注意下面的兩個@try
          @position-fallback --top-then-bottom {
            @try {
              bottom: calc(anchor(top) + 0.5rem);
              left: anchor(center);
            }
            @try {
              top: calc(anchor(bottom) + 0.5rem);
              left: anchor(center);
            }
          }大家好,很高興又見面了,我是"高級前端?進階?",由我帶著大家一起關注前端前沿、深入前端底層技術,大家一起進步,也歡迎大家關注、點贊、收藏、轉發,您的支持是我不斷創作的動力。

          其他

          除了以上新增能力外,最近瀏覽器還新增了更多高級特性,比如:

          • Popover:全局屬性 popover 用來指定一個元素為彈出式元素(popover element)。彈出式元素通過 display: none 被隱藏,直到通過調用/控制元素(即帶有 popovertarget 屬性的 <button> 或 \ )或 HTMLElement.showPopover() 調用打開
          • <selectmenu>:通過 Popover 和錨點定位(anchor positioning),開發者可以構建完全可定制的選擇菜單。 OpenUI 社區小組一直在研究這些菜單的基本結構,并尋找允許自定義其中任何內容的方法。
          • Scroll-driven animations:提供了構建在 CSS 動畫模塊和 Web 動畫 API 之上的功能。 允許根據沿著基于滾動的時間線而不是默認的基于時間的文檔時間線的進度來對屬性值進行動畫處理。
          • View transitions:View Transitions API 提供了一種機制,可以輕松地在不同 DOM 狀態之間創建動畫轉換,同時還可以一步更新 DOM 內容。
          • 離散屬性動畫:為 Web 提供某種方法來為離散屬性設置動畫,比如 display:none 等
          • accent-color :為某些元素生成的用戶界面控件設置強調色。

          參考資料

          https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_container_queries

          https://developer.chrome.com/blog/whats-new-css-ui-2023/#style-queries

          https://developer.mozilla.org/zh-CN/docs/Web/CSS/:has

          https://developer.chrome.com/articles/css-nth-child-of-s/

          https://www.bookstack.cn/read/html-tutorial/spilt.4.docs-text.md

          https://developer.chrome.com/blog/css-text-wrap-balance/

          https://developer.chrome.com/blog/control-your-drop-caps-with-css-initial-letter/

          https://web.dev/articles/viewport-units?hl=zh-cn

          https://developer.mozilla.org/zh-CN/docs/Web/CSS/color_value/oklch#browser_compatibility

          https://developer.mozilla.org/zh-CN/docs/Web/CSS/color_value/color-mix

          https://developer.mozilla.org/zh-CN/docs/Web/CSS/:scope

          https://developer.chrome.com/blog/cascade-layers/

          https://www.mathsisfun.com/sine-cosine-tangent.html

          https://web.dev/articles/css-individual-transform-properties?hl=zh-cn

          https://developer.chrome.com/blog/tether-elements-to-each-other-with-css-anchor-positioning/

          https://developer.mozilla.org/zh-CN/docs/Web/HTML/Global_attributes/popover

          https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_scroll-driven_animations

          https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API

          https://developer.mozilla.org/en-US/docs/Web/CSS/accent-color

          https://positivethinking.tech/insights/the-10-new-css-features-in-2023/

          、了解React-Native組件

          作為開發者都知道,UI組件對于一個應用的重要性。也許,在一款應用中,你還沒有完整的,有體系的構建UI組件,但是你一定或多或少有種想把組件抽出來的沖動,就像有些沖動是人類的本能一樣....這是作為一個開發者的本能。那么組件的復用和統一化是十分必要的。常見的組件有:日歷、下拉列表(常在應用中表現為下拉刷新)、導航欄、頭部、底部、選項卡等等。React-Native就提供了一套iOS原生的組件,這樣就不用HTML5去模擬組件了。React-Native使用css來構建頁面布局,使用Native iOS Components給我們提供強大的組件功能。目前已有組件如下圖:

          二、使用CSS樣式 & Flexbox布局

          第一篇,已經知道了如何構建工程。這里同樣創建一個HelloWorld工程。默認啟動界面如下圖:

          1、基本樣式
          這里使用View和Text組件作為演示對象,首先,修改index.ios.js里面的代碼,這里只需要關注StyleSheet和render里面的模板。修改后的代碼如下:
          /**
          * Sample React Native App
          * https://github.com/facebook/react-native
          */
          'use strict';
          var React = require('react-native');
          var {
           AppRegistry,
           StyleSheet,
           Text,
           View,
          } = React;
          var HelloWorld = React.createClass({
           render: function() {
           return (
           <View>
           <View></View>
           </View>
           );
           }
          });
          var styles = StyleSheet.create({
          });
          AppRegistry.registerComponent('HelloWorld', () => HelloWorld);
          這時候,你cmd + R刷新模擬器應該看到是空白的界面。現在,是展現css魅力的時候了。React-native使用的css 表達是一個JS自面量對象,并且嚴格區分該對象屬性的類型,所以要遵循對象的寫法,而不能使用以前css的寫法,這個需要自己熟悉了。
          (1)增加一個帶邊框的矩形,紅色邊框
           直接在組件上添加樣式是這樣的:style={{height:40, borderWidth: 1, borderColor: 'red'}}style是組件的一個自有屬性,第一個{}JS執行環境或者說是模板,第二個{}只是css樣式對象的括號而已(慢慢體會,不難理解)。這樣修改后的代碼如下:
           render: function() {
           return (
           <View>
           <View style={{height:40, borderWidth: 1, borderColor: 'red'}}>
           </View>
           </View>
           );
           }
           cmd + R刷新模擬器,結果如下:

           (2)如何知道該組件支持哪些樣式呢?
           上面的已經很簡單了,作為web開發者用腳趾頭都能閉眼寫出來。如果我們需要知道該組件有哪些樣式,又不想查手冊,一個最為簡單的方法是,在樣式表里寫錯一個屬性,比如我寫一個沒有的屬性“border”。但是該屬性必須寫到樣式的創建中去,而不能寫為內聯樣式。寫成內聯樣式,你是看不到報錯提示的。我們改寫成樣式表創建類里面:
           var HelloWorld = React.createClass({
           render: function() {
           return (
           <View>
           <View style={styles.style_1}>
           </View>
           </View>
           );
           }
           });
           var styles = StyleSheet.create({
           style_1:{
           border: '1px solid red',
           height:40,
           borderWidth: 1, 
           borderColor: 'red',
           }
           });
           這個時候你就能齊刷刷地看到樣式表的報錯和提示有哪些樣式了,如下圖所示:

           (3)獨立樣式類
           其實上面已經展示了獨立樣式類了,那么樣式類創建很簡單,我們只需要使用React.StyleSheet來創建類。其實創建的類就是一個js對象而已。那么在組件上引用是這樣的<View style={{對象名稱.對象屬性}}></View>,就跟上面(2)的代碼一樣。
           2、說說Flexbox布局
           其實,這樣的css樣式,作為web開發者一用就會,那么說說布局的事兒。除去margin, padding, position等大家熟悉的web布局的話,最為重要的就是flexbox,目前支持的屬性如下,有6個:

           (1)先說flex屬性,上一段代碼
           var HelloWorld = React.createClass({
           render: function() {
           return (
           <View style={styles.style_0}>
           <View style={styles.style_1}></View>
           <View style={styles.style_1}></View>
           <View style={{flex:10}}></View>
           </View>
           );
           }
           });
           var styles = StyleSheet.create({
           style_0:{
           flex:1,
           },
           style_1:{
           flex: 5,
           height:40,
           borderWidth: 1, 
           borderColor: 'red',
           }
           });
           當一個(元素)組件,定義了flex屬性時,表示該元素是可伸縮的。當然flex的屬性值是大于0的時候才伸縮,其小于和等于0的時候不伸縮,例如:flex:0, flex:-1等。上面的代碼,最外層的view是可伸縮的,因為沒有兄弟節點和它搶占空間。里層是3個view,可以看到三個view的flex屬性加起來是5+5+10=20,所以第一個view和第二個view分別占1/4伸縮空間, 最后一個view占據1/2空間,具體如下圖:

           (2) flexDirection
           flexDirection在React-Native中只有兩個屬性,一個是row(橫向伸縮)和column(縱向伸縮)。具體的效果可見如下代碼:
           var HelloWorld = React.createClass({
           render: function() {
           return (
           <View style={styles.style_0}>
           <View style={styles.style_1}>
           <Text style={{marginTop:40, fontSize:25}}>1/4高</Text>
           <Text style={{marginTop:40, fontSize:25}}>1/4高</Text>
           </View>
           <View style={[styles.style_1, {flexDirection: 'column'}]}>
           <Text style={{marginTop:40, fontSize:25}}>1/4高</Text>
           <Text style={{marginTop:40, fontSize:25}}>1/4高</Text>
           </View>
           <View style={{flex:10, borderWidth: 1, borderColor: 'red',}}>
           <Text style={{marginTop:40, fontSize:25}}>1/2高</Text>
           </View>
           </View>
           );
           }
           });
           var styles = StyleSheet.create({
           style_0:{
           flex:1,
           },
           style_1:{
           flex: 5,
           flexDirection: 'row',
           height:40,
           borderWidth: 1, 
           borderColor: 'red',
           }
           });
           具體的效果如下:

           (3)alignSelf:對齊方式
           alignSelf的對齊方式主要有四種:flex-start、 flex-end、 center、 auto、 stretch。看看代碼,應該就很清楚了:

           效果如下圖

          主站蜘蛛池模板: 日本中文一区二区三区亚洲| 亚洲高清毛片一区二区| 日韩内射美女人妻一区二区三区| 精品伦精品一区二区三区视频| 色屁屁一区二区三区视频国产| 麻豆精品人妻一区二区三区蜜桃| 国产精品高清视亚洲一区二区| 亚洲一区在线免费观看| 亚洲一区二区三区四区视频| 国产高清一区二区三区 | 一区二区在线免费视频| 国产一区二区三区无码免费| 色一乱一伦一区一直爽| 亚洲免费视频一区二区三区| 国产精品被窝福利一区| 亚洲色大成网站www永久一区 | 亚洲AV综合色一区二区三区| 久久婷婷久久一区二区三区| 一区二区三区日韩精品| 国内精品一区二区三区东京 | 国产福利一区二区| 日韩国产一区二区| 狠狠色成人一区二区三区| 国产色综合一区二区三区 | 日韩高清国产一区在线| 一本一道波多野结衣AV一区| 韩国精品福利一区二区三区| 一区二区国产精品| 99久久精品费精品国产一区二区| 国产色综合一区二区三区| AA区一区二区三无码精片 | 99久久综合狠狠综合久久一区| 国产日韩精品视频一区二区三区 | 内射女校花一区二区三区| 精品无码人妻一区二区免费蜜桃| 人妻视频一区二区三区免费| 成人国产精品一区二区网站| 久久久久无码国产精品一区| 国产一区二区在线| 国产精品福利区一区二区三区四区| 久久国产午夜一区二区福利|