自動布局演算法
1. DIV+CSS 如里在裡面自動分行!
1.你定死表格的寬度,即給表格一個寬度值(是數值,不是百分比)
2.強制不換行
div{
//white-space:不換行;normal 默認;nowrap強制在同一行內顯示所有文本,直到文本結束或者遭遇 br 對象
white-space:nowrap; }
自動換行
div{
word-wrap: break-word;
//word-break設置強行換行;normal 亞洲語言和非亞洲語言的文本規則,允許在字內換行
word-break: normal;
}
強制英文單詞斷行
div{
word-break:break-all;
}
3.總結了一下,只要在CSS中定義了如下句子,可保網頁不會再被撐開了。
table{table-layout: fixed;}
td(word-break: break-all; word-wrap:break-word;)
注釋一下:
1.第一條table{table-layout: fixed;},此樣式可以讓表格中有!!!(感嘆號)之類的字元時自動換行。
2.td{word-break: break-all},一般用這句這OK了,但在有些特殊情況下還是會撐開,因此需要再加上後面一句(word-wrap:break-word;)就可以解決。此樣式可以讓表格中的一些連續的英文單詞自動換行。
(1)語法:
word-break : normal | break-all | keep-all
參數:
normal : 依照亞洲語言和非亞洲語言的文本規則,允許在字內換行
break-all : 該行為與亞洲語言的normal相同。也允許非亞洲語言文本行的任意字內斷開。該值適合包含一些非亞洲文本的亞洲文本
keep-all : 與所有非亞洲語言的normal相同。對於中文,韓文,日文,不允許字斷開。適合包含少量亞洲文本的非亞洲文本
(2)語法:
word-wrap : normal | break-word
參數:
normal : 允許內容頂開指定的容器邊界
break-word : 內容將在邊界內換行。如果需要,詞內換行(word-break)也行發生
說明:
設置或檢索當當前行超過指定容器的邊界時是否斷開轉行。
對應的腳本特性為word-wrap。請參閱我編寫的其他書目。
(3)語法:
table-layout : auto | fixed
參數:
auto : 默認的自動演算法。布局將基於各單元格的內容。表格在每一單元格讀取計算之後才會顯示出來。速度很慢
fixed : 固定布局的演算法。在這演算法中,水平布局是僅僅基於表格的寬度,表格邊框的寬度,單元格間距,列的寬度,而和表格內容無關
說明:
如何讓表格自動換行?
設置或檢索表格的布局演算法。
對應的腳本特性為tableLayout。
4.按照網上大多數文章的說法,只要在CSS中加入:
代碼
..........
Code:
table {<br />
table-layout:fixed;word-break:break-all;word-wrap:break-word;}<br />
div{word-break:break-all;word-wrap:break-word;}
就可以解決表格和層被撐破,最初我也是這樣做的。不過這樣的代碼會造成一個問題,你會發現英文詞全部被截斷了,這不符合英語的書寫習慣也不利於閱讀。
後來我發現上述代碼改寫一下就可以做到既防止表格/層撐破又防止單詞斷裂了。
如下:
代碼
Code:
table {
table-layout: fixed;
word-wrap:break-word;
}
div {
word-wrap:break-word;
}
這也是現在我用的代碼。
2. 有什麼東西能導致sdautolayout無法自動布局
所謂自動布局,其實就是將手動布局的計算過程抽象出一套演算法,然後利用約束模型收集view的寬高左右等各個維度對應的數據,最後在恰當的時機根據約束計算出view的frame。
了解了這個基本原理之後,我們就可以動手設計一個自動布局庫了。在設計自動布局庫的過程中,我們主要需要解決以下幾個問題:
3. Altium Designer 6.9自動布線時布局的問題
陣列粘貼。陣列形式為circular,步進角度分別為360°/5以及360°/9。
相信自動布線,不如相信母豬會上樹。
自動布線一般不要設置成布弧形。AD的布線器演算法拙劣算不過來。
這么幾根線,自己手動布多好,輕松&愉快。
4. word-break:break-all和word-wrap:break-word的區別
word-break:break-all和word-wrap:break-word都是能使其容器如DIV的內容自動換行。
它們的區別就在於:
1,word-break:break-all 例如div寬200px,它的內容就會到200px自動換行,如果該行末端有個英文單詞很長(congratulation等),它會把單詞截斷,變成該行末端為conra(congratulation的前端部分),下一行為tulation(conguatulation)的後端部分了。
2,word-wrap:break-word 例子與上面一樣,但區別就是它會把congratulation整個單詞看成一個整體,如果該行末端寬度不夠顯示整個單詞,它會自動把整個單詞放到下一行,而不會把單詞截斷掉的。
3,word-break;break-all 支持版本:IE5以上 該行為與亞洲語言的 normal 相同。也允許非亞洲語言文本行的任意字內斷開。該值適合包含一些非亞洲文本的亞洲文本。 WORD-WRAP:break-word 支持版本:IE5.5以上 內容將在邊界內換行。如果需要,詞內換行( word-break )也將發生。表格自動換行,避免撐開。 word-break : normal | break-all | keep-all 參數: normal : 依照亞洲語言和非亞洲語言的文本規則,允許在字內換行 break-all : 該行為與亞洲語言的normal相同。也允許非亞洲語言文本行的任意字內斷開。該值適合包含一些非亞洲文本的亞洲文本 keep-all : 與所有非亞洲語言的normal相同。對於中文,韓文,日文,不允許字斷開。適合包含少量亞洲文本的非亞洲文本 語法: word-wrap : normal | break-word 參數: normal : 允許內容頂開指定的容器邊界 break-word : 內容將在邊界內換行。如果需要,詞內換行(word-break)也行發生說明:設置或檢索當當前行超過指定容器的邊界時是否斷開轉行。
對應的腳本特性為wordWrap。請參閱我編寫的其他書目。 語法: table-layout : auto | fixed 參數: auto : 默認的自動演算法。布局將基於各單元格的內容。表格在每一單元格讀取計算之後才會顯示出來。速度很慢 fixed : 固定布局的演算法。在這演算法中,水平布局是僅僅基於表格的寬度,表格邊框的寬度,單元格間距,列的寬度,而和表格內容無關說明:設置或檢索表格的布局演算法。對應的腳本特性為tableLayout。
建議:word-break 用3C檢測會顯示問題的,導致網路快照也會出問題-這個屬性OPERA FIREFOX 瀏覽器也不支持 word-break屬性可以用white-space:normal;來代替,這樣在FireFox和IE下就都能正確換行,而且要注意,單詞間的空格不能用 來代替,不然不能正確換行。
5. 請高人指點一下css layout具體的含義,我知道height:1%可以觸發,但是為何必須出發layout呢,麻煩指點。
css layout
按照我的理解 應該只在IE中有層布局屬性這一說。。
有些時候元素沒有寬高的時候就沒有布局屬性。所以設置為height:1%;
事實上 zoom:1; 也可以激活布局屬性!
6. 有誰知道TexturePacker最新的破解版哪裡有下嗎,Mac軟體使用
texturepacker for mac 破解版是一個不錯的圖片組合工具;小編提供的手機蘋果電腦系統專版,全功能的圖形用戶界面,包括支持多點觸摸,縮放和所有精靈使用樹視圖!極端快速的布局演算法在實時顯示所有的變化!本站提供texturepacker mac 破解版下載。
texturepacker mac 破解版功能特色:
1.在你構建工具鏈整合TexturePacker或直接加入到Xcode。當更新你的資產就放入Assets文件夾。重建您的項目也將重建所有的表的變化。
2.你可以優化你的形象不同的像素格式,包括rgba4444,rgb565,rgba8888。保存的顏色,你也可以適用於不同的抖動方法。
3.TexturePacker是第一個工具具有cocos2d的新pvr.ccz格式的直接支持!特別是當工作與16bit紋理這種新格式比優化PNG文件更快和更小的。
4.TexturePacker將幫助您使用GUI和命令行創建簡單的表達2048x2048像素。擠壓重復外周圍的像素形狀以避免閃爍時平鋪紋理。自動微調,自動調整大小,極端的快速自動布局。
7. HTML代碼,表格Table的列寬問題
在外面再設置個table,設定成兩列,
左邊一列固定寬度,裡面放個table,裝第1、2列
8. 在GEF中如何使用DirectedGraph來對圖中的對象進行位置的排放
而在一開始希望顯示一個初始模型文件的時候,再對應保存圖信息的文件不存在的情況下,如何能夠很好的顯示這個圖,是一個比較麻煩的問題,涉及到對布局演算法的一些分析與實現。這片文章就是介紹,如何使用GEF內的DirectedGraph這個類以及其相應的布局演算法類DirectedGraphLayout,來解決這個問題。 基本思想是:為GEF的EditPart模型生成一個DirectedGraph,然後使用DirectedGraphLayout來計算布局,最後將布局的結果通過GEF顯示出來。 在參考了GEF的flow example之後,對其代碼作了部分重構,寫了這片文章,希望對遇到同樣問題的同志能夠有一定的幫助。 首先引入一個介面:public interface GraphBuilder { public void contributeNodesToGraph(DirectedGraph graph, Map map); public void contributeEdgesToGraph(DirectedGraph graph, Map map); public void applyGraphResults(DirectedGraph graph, Map map);}這個介面中定義了幾個方法,其含義從其方法名中可以猜出:contributeNodesToGraph:將當前對象作為節點(Node)添加到DirectedGraph中。contributeEdgesToGraph:將當前對象所對應的連線作為邊(Edge)添加到DirectedGraph中。applyGraphResults:將圖中生成的布局信息取出,對本對象進行重新布局。介面中的graph參數就是保存的圖的信息,map參數維持一個對象到節點/邊的映射,使得每個對象能夠方便的找到其對應的圖中的節點或者邊。這個介面的使用,在後面會有涉及。下面先看看顯示圖的容器是如何構建的。 圖的容器定義為GraphDiagramEditPart,這個EditPart對應於要顯示的有向圖的容器。它實現了GraphBuider介面,這也是我們主要需要關注的介面:public class GraphDiagramEditPart extends AbstractGraphicalEditPart implements GraphBuilder. contributeNodesToGraph方法將自身作為節點添加到圖中,但是因為GraphDiagramEditPart對應的是容器,因此它不需要向圖中添加信息,只是調用其子EditPart,將其添加到圖中。 public void contributeNodesToGraph(DirectedGraph graph, Map map) { for (int i = 0; i < getChildren().size(); i++) { NodeEditPart activity = (NodeEditPart)getChildren().get(i); activity.contributeNodesToGraph(graph, map); } } contributeEdgesToGraph方法將這個EditPart的所有子EditPart取出,調用其contributeEdgesToGraph方法,通過這個方法,就可以將所有的邊添加到圖中了: public void contributeEdgesToGraph(DirectedGraph graph, Map map) { for (int i = 0; i < getChildren().size(); i++) { NodeEditPart child = (NodeEditPart)children.get(i); child.contributeEdgesToGraph(graph, map); } } applyGraphResults方法將所有取出所有的子EditPart,並調用其applyGraphResults,使得圖中所生成的布局信息能夠被應用到顯示上。 public void applyGraphResults(DirectedGraph graph, Map map) { applyChildrenResults(graph, map); } protected void applyChildrenResults(DirectedGraph graph, Map map) { for (int i = 0; i < getChildren().size(); i++) { GraphBuilder part = (GraphBuilder) getChildren().get(i); part.applyGraphResults(graph, map); } } 下面要介紹的是NodeEditPart,它作圖中所有節點所對應的EditPart的抽象父類,也實現了GraphBuilder介面。每一個要做為節點添加到圖中的EditPart,應該繼承這個類。public abstract class NodeEditPart extends AbstractGraphicalEditPart implements GraphBuilder{ public void contributeNodesToGraph(DirectedGraph graph, Map map) { Node n = new Node(this); n.outgoingOffset = 7; n.incomingOffset = 7; n.width = getFigure().getPreferredSize().width; n.height = getFigure().getPreferredSize().height; n.setPadding(new Insets(10,8,10,12)); map.put(this, n); graph.nodes.add(n); } public void contributeEdgesToGraph(DirectedGraph graph, Map map) { List outgoing = getSourceConnections(); for (int i = 0; i < outgoing.size(); i++) { EdgeEditPart part = (EdgeEditPart)getSourceConnections().get(i); part.contributeEdgesToGraph(graph, map); } } public void applyGraphResults(DirectedGraph graph, Map map) { Node n = (Node)map.get(this); getFigure().setBounds(new Rectangle(n.x, n.y, n.width, n.height)); for (int i = 0; i < getSourceConnections().size(); i++) { EdgeEditPart trans = (EdgeEditPart) getSourceConnections().get(i); trans.applyGraphResults(graph, map); } }} 再就是邊所對應EditPart的抽象類EdgeEditPart。每一個要作為邊添加到圖中的EditPart,需要繼承這個類。在上面NodeEditPart中對其所對應的Figure其實並沒有什麼要求,但是對EdgeEditPart所對應的Figure,要求其Figure必須由一個BendpointConnectionRouter,作為其ConnectionRouter:setConnectionRouter(new BendpointConnectionRouter())。這樣圖的邊的路徑信息才能夠被顯示出來。public abstract class EdgeEditPart extends AbstractConnectionEditPart implements GraphBuilder { public void contributeEdgesToGraph(DirectedGraph graph, Map map) { Node source = (Node)map.get(getSource()); Node target = (Node)map.get(getTarget()); Edge e = new Edge(this, source, target); e.weight = 2; graph.edges.add(e); map.put(this, e); } public void applyGraphResults(DirectedGraph graph, Map map) { Edge e = (Edge)map.get(this); NodeList nodes = e.vNodes; PolylineConnection conn = (PolylineConnection)getConnectionFigure(); conn.setTargetDecoration(new PolygonDecoration()); if (nodes != null) { List bends = new ArrayList(); for (int i = 0; i < nodes.size(); i++) { Node vn = nodes.getNode(i); int x = vn.x; int y = vn.y; if (e.isFeedback) { bends.add(new AbsoluteBendpoint(x, y + vn.height)); bends.add(new AbsoluteBendpoint(x, y)); } else { bends.add(new AbsoluteBendpoint(x, y)); bends.add(new AbsoluteBendpoint(x, y + vn.height)); } } conn.setRoutingConstraint(bends); } else { conn.setRoutingConstraint(Collections.EMPTY_LIST); } }} 最後的就是一個LayoutManager來初始化圖的創建,以及對圖的信息進行解釋了,生成最終布局了。這個GraphLayoutManager作為GraphDiagramEditPart所對應的GraphDiagram的LayoutManager,來顯示圖的內容。public class GraphLayoutManager extends AbstractLayout { private GraphBuilder diagram; GraphLayoutManager(GraphBuilder diagram) { this.diagram = diagram; } protected Dimension calculatePreferredSize(IFigure container, int wHint, int hHint) { container.validate(); List children = container.getChildren(); Rectangle result = new Rectangle().setLocation(container .getClientArea().getLocation()); for (int i = 0; i < children.size(); i++) result.union(((IFigure) children.get(i)).getBounds()); result.resize(container.getInsets().getWidth(), container.getInsets() .getHeight()); return result.getSize(); } public void layout(IFigure container) { DirectedGraph graph = new DirectedGraph(); Map partsToNodes = new HashMap(); diagram.contributeNodesToGraph(graph, partsToNodes); diagram.contributeEdgesToGraph(graph, partsToNodes); new DirectedGraphLayout().visit(graph); diagram.applyGraphResults(graph, partsToNodes); }}可以看到在layout方法中,首先生成了一個DirectedGraph,並調用了contributeNodesToGraph以及contributeEdgesToGraph方法,將節點和邊的信息添加到這個生成的DirectedGraphGraph中,然後使用布局演算法DirectedGraphLayout().visit(graph)來計算生成圖的信息(這里使用了visitor模式)最後調用applyGraphResults將圖的信息應用到圖形的顯示上。 至此,所有框架的工作做完了,如果要將模型作為一個有向圖顯示的話,只需要將模型的容器對象對應於GraphDiagramEditPart(在EditPartFactory中進行映射),為每一個需要表示為節點的對象,對應到一個繼承於NodeEditPart的EditPart,為每一個需要表示為邊的模型對象,對應到一個繼承於EdgeEditPart的EditPart。這樣,就能夠將圖的布局演算法,應用到GEF框架中了。 這里寫的比較簡單,使用起來也會有一些具體的約束。例如在有向圖中,是不能夠有孤立的節點的。如果使用CompoundDirectedGraph,就不會有這樣的問題,CompoundDirectedGraph可以包括子圖,可以支持更為復雜的圖形。在Flow Example中使用的就是CompoundDirectedGraph。在後面,我或許會將這個框架進行改寫,以使其支持CompoundDirectedGraph來進行布局演算法。下面的圖是一個生成的例子,大家可以看一下效果: 這是從OWL文件中讀取內容之後生成的一個圖的表示。可以看到,OWL的節點通過自動圖的自動布局之後,已經有了較好的視覺效果。